Honour the colour alpha channel in wxAuiBitmapFromBits()
This fixes creating wrong bitmaps for system colours with alpha and allows to use the correct wxSYS_COLOUR_INACTIVECAPTIONTEXT constant in wxAuiGenericTabArt instead of a wrong but, due to the loss of alpha, better looking wxSYS_COLOUR_INACTIVECAPTION which was used before.
This commit is contained in:
committed by
Vadim Zeitlin
parent
872692132a
commit
623c116b7a
@@ -95,9 +95,38 @@ wxBitmap wxAuiBitmapFromBits(const unsigned char bits[], int w, int h,
|
||||
const wxColour& color)
|
||||
{
|
||||
wxImage img = wxBitmap((const char*)bits, w, h).ConvertToImage();
|
||||
img.Replace(0,0,0,123,123,123);
|
||||
img.Replace(255,255,255,color.Red(),color.Green(),color.Blue());
|
||||
img.SetMaskColour(123,123,123);
|
||||
if (color.Alpha() == wxALPHA_OPAQUE)
|
||||
{
|
||||
img.Replace(0,0,0,123,123,123);
|
||||
img.Replace(255,255,255,color.Red(),color.Green(),color.Blue());
|
||||
img.SetMaskColour(123,123,123);
|
||||
}
|
||||
else
|
||||
{
|
||||
img.InitAlpha();
|
||||
const int newr = color.Red();
|
||||
const int newg = color.Green();
|
||||
const int newb = color.Blue();
|
||||
const int newa = color.Alpha();
|
||||
for (int x = 0; x < w; x++)
|
||||
{
|
||||
for (int y = 0; y < h; y++)
|
||||
{
|
||||
int r = img.GetRed(x, y);
|
||||
int g = img.GetGreen(x, y);
|
||||
int b = img.GetBlue(x, y);
|
||||
if (r == 0 && g == 0 && b == 0)
|
||||
{
|
||||
img.SetAlpha(x, y, wxALPHA_TRANSPARENT);
|
||||
}
|
||||
else
|
||||
{
|
||||
img.SetRGB(x, y, newr, newg, newb);
|
||||
img.SetAlpha(x, y, newa);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return wxBitmap(img);
|
||||
}
|
||||
|
||||
|
@@ -217,13 +217,13 @@ void wxAuiGenericTabArt::UpdateColoursFromSystem()
|
||||
m_baseColourBrush = wxBrush(m_baseColour);
|
||||
|
||||
m_activeCloseBmp = wxAuiBitmapFromBits(close_bits, 16, 16, wxSystemSettings::GetColour(wxSYS_COLOUR_CAPTIONTEXT));
|
||||
m_disabledCloseBmp = wxAuiBitmapFromBits(close_bits, 16, 16, wxSystemSettings::GetColour(wxSYS_COLOUR_INACTIVECAPTION));
|
||||
m_disabledCloseBmp = wxAuiBitmapFromBits(close_bits, 16, 16, wxSystemSettings::GetColour(wxSYS_COLOUR_INACTIVECAPTIONTEXT));
|
||||
m_activeLeftBmp = wxAuiBitmapFromBits(left_bits, 16, 16, wxSystemSettings::GetColour(wxSYS_COLOUR_CAPTIONTEXT));
|
||||
m_disabledLeftBmp = wxAuiBitmapFromBits(left_bits, 16, 16, wxSystemSettings::GetColour(wxSYS_COLOUR_INACTIVECAPTION));
|
||||
m_disabledLeftBmp = wxAuiBitmapFromBits(left_bits, 16, 16, wxSystemSettings::GetColour(wxSYS_COLOUR_INACTIVECAPTIONTEXT));
|
||||
m_activeRightBmp = wxAuiBitmapFromBits(right_bits, 16, 16, wxSystemSettings::GetColour(wxSYS_COLOUR_CAPTIONTEXT));
|
||||
m_disabledRightBmp = wxAuiBitmapFromBits(right_bits, 16, 16, wxSystemSettings::GetColour(wxSYS_COLOUR_INACTIVECAPTION));
|
||||
m_disabledRightBmp = wxAuiBitmapFromBits(right_bits, 16, 16, wxSystemSettings::GetColour(wxSYS_COLOUR_INACTIVECAPTIONTEXT));
|
||||
m_activeWindowListBmp = wxAuiBitmapFromBits(list_bits, 16, 16, wxSystemSettings::GetColour(wxSYS_COLOUR_CAPTIONTEXT));
|
||||
m_disabledWindowListBmp = wxAuiBitmapFromBits(list_bits, 16, 16, wxSystemSettings::GetColour(wxSYS_COLOUR_INACTIVECAPTION));
|
||||
m_disabledWindowListBmp = wxAuiBitmapFromBits(list_bits, 16, 16, wxSystemSettings::GetColour(wxSYS_COLOUR_INACTIVECAPTIONTEXT));
|
||||
}
|
||||
|
||||
wxAuiTabArt* wxAuiGenericTabArt::Clone()
|
||||
|
Reference in New Issue
Block a user