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)
|
const wxColour& color)
|
||||||
{
|
{
|
||||||
wxImage img = wxBitmap((const char*)bits, w, h).ConvertToImage();
|
wxImage img = wxBitmap((const char*)bits, w, h).ConvertToImage();
|
||||||
img.Replace(0,0,0,123,123,123);
|
if (color.Alpha() == wxALPHA_OPAQUE)
|
||||||
img.Replace(255,255,255,color.Red(),color.Green(),color.Blue());
|
{
|
||||||
img.SetMaskColour(123,123,123);
|
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);
|
return wxBitmap(img);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -217,13 +217,13 @@ void wxAuiGenericTabArt::UpdateColoursFromSystem()
|
|||||||
m_baseColourBrush = wxBrush(m_baseColour);
|
m_baseColourBrush = wxBrush(m_baseColour);
|
||||||
|
|
||||||
m_activeCloseBmp = wxAuiBitmapFromBits(close_bits, 16, 16, wxSystemSettings::GetColour(wxSYS_COLOUR_CAPTIONTEXT));
|
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_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_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_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()
|
wxAuiTabArt* wxAuiGenericTabArt::Clone()
|
||||||
|
Reference in New Issue
Block a user