8 and 16-bit color lookups are now done only when needed. Very useful when only working in 32-bit color
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4944 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -93,6 +93,8 @@ RGBColor::RGBColor(const RGBColor &col)
|
|||||||
color32=col.color32;
|
color32=col.color32;
|
||||||
color16=col.color16;
|
color16=col.color16;
|
||||||
color8=col.color8;
|
color8=col.color8;
|
||||||
|
update8=col.update8;
|
||||||
|
update16=col.update16;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -101,14 +103,21 @@ RGBColor::RGBColor(const RGBColor &col)
|
|||||||
RGBColor::RGBColor(void)
|
RGBColor::RGBColor(void)
|
||||||
{
|
{
|
||||||
SetColor(0,0,0,0);
|
SetColor(0,0,0,0);
|
||||||
|
update8=update16=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Returns the color as the closest 8-bit color in the palette
|
\brief Returns the color as the closest 8-bit color in the palette
|
||||||
\return The palette index for the current color
|
\return The palette index for the current color
|
||||||
*/
|
*/
|
||||||
uint8 RGBColor::GetColor8(void) const
|
uint8 RGBColor::GetColor8(void)
|
||||||
{
|
{
|
||||||
|
if(update8)
|
||||||
|
{
|
||||||
|
color8=FindClosestColor(system_palette, color32);
|
||||||
|
update8=false;
|
||||||
|
}
|
||||||
|
|
||||||
return color8;
|
return color8;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,8 +125,14 @@ uint8 RGBColor::GetColor8(void) const
|
|||||||
\brief Returns the color as the closest 16-bit color
|
\brief Returns the color as the closest 16-bit color
|
||||||
\return 16-bit value of the current color, including alpha
|
\return 16-bit value of the current color, including alpha
|
||||||
*/
|
*/
|
||||||
uint16 RGBColor::GetColor16(void) const
|
uint16 RGBColor::GetColor16(void)
|
||||||
{
|
{
|
||||||
|
if(update16)
|
||||||
|
{
|
||||||
|
color16=FindClosestColor16(color32);
|
||||||
|
update16=false;
|
||||||
|
}
|
||||||
|
|
||||||
return color16;
|
return color16;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,6 +158,8 @@ void RGBColor::SetColor(uint8 r, uint8 g, uint8 b, uint8 a)
|
|||||||
color32.green=g;
|
color32.green=g;
|
||||||
color32.blue=b;
|
color32.blue=b;
|
||||||
color32.alpha=a;
|
color32.alpha=a;
|
||||||
|
|
||||||
|
update8=update16=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -158,6 +175,8 @@ void RGBColor::SetColor(int r, int g, int b, int a)
|
|||||||
color32.green=(uint8)g;
|
color32.green=(uint8)g;
|
||||||
color32.blue=(uint8)b;
|
color32.blue=(uint8)b;
|
||||||
color32.alpha=(uint8)a;
|
color32.alpha=(uint8)a;
|
||||||
|
|
||||||
|
update8=update16=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -168,7 +187,9 @@ void RGBColor::SetColor(uint16 col16)
|
|||||||
{
|
{
|
||||||
color16=col16;
|
color16=col16;
|
||||||
SetRGBColor(&color32,col16);
|
SetRGBColor(&color32,col16);
|
||||||
color8=FindClosestColor(system_palette,color32);
|
|
||||||
|
update8=true;
|
||||||
|
update16=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -179,7 +200,9 @@ void RGBColor::SetColor(uint8 col8)
|
|||||||
{
|
{
|
||||||
color8=col8;
|
color8=col8;
|
||||||
color32=system_palette[col8];
|
color32=system_palette[col8];
|
||||||
color16=FindClosestColor16(color32);
|
|
||||||
|
update8=false;
|
||||||
|
update16=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -189,8 +212,7 @@ void RGBColor::SetColor(uint8 col8)
|
|||||||
void RGBColor::SetColor(const rgb_color &color)
|
void RGBColor::SetColor(const rgb_color &color)
|
||||||
{
|
{
|
||||||
color32=color;
|
color32=color;
|
||||||
color16=FindClosestColor16(color32);
|
update8=update16=true;
|
||||||
color8=FindClosestColor(system_palette,color32);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -202,6 +224,8 @@ void RGBColor::SetColor(const RGBColor &col)
|
|||||||
color32=col.color32;
|
color32=col.color32;
|
||||||
color16=col.color16;
|
color16=col.color16;
|
||||||
color8=col.color8;
|
color8=col.color8;
|
||||||
|
update8=col.update8;
|
||||||
|
update16=col.update16;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -213,6 +237,8 @@ RGBColor & RGBColor::operator=(const RGBColor &col)
|
|||||||
color32=col.color32;
|
color32=col.color32;
|
||||||
color16=col.color16;
|
color16=col.color16;
|
||||||
color8=col.color8;
|
color8=col.color8;
|
||||||
|
update8=col.update8;
|
||||||
|
update16=col.update16;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,8 +249,7 @@ RGBColor & RGBColor::operator=(const RGBColor &col)
|
|||||||
RGBColor & RGBColor::operator=(const rgb_color &col)
|
RGBColor & RGBColor::operator=(const rgb_color &col)
|
||||||
{
|
{
|
||||||
color32=col;
|
color32=col;
|
||||||
color16=FindClosestColor16(color32);
|
update8=update16=true;
|
||||||
color8=FindClosestColor(system_palette,color32);
|
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@@ -259,7 +284,7 @@ RGBColor RGBColor::MakeBlendColor(const RGBColor &color, const float &position)
|
|||||||
if(mod<0 )
|
if(mod<0 )
|
||||||
newcol.red=0;
|
newcol.red=0;
|
||||||
|
|
||||||
delta=int16(col2.green)-int16(col.green);
|
delta=int16(col2.green)-int16(col.green);
|
||||||
mod=col.green + (position * delta);
|
mod=col.green + (position * delta);
|
||||||
newcol.green=uint8(mod);
|
newcol.green=uint8(mod);
|
||||||
if(mod>255 )
|
if(mod>255 )
|
||||||
|
|||||||
Reference in New Issue
Block a user