Take into account icon mask in wxStaticBitmap
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16308 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
44d130a35e
commit
7af68c666b
@ -76,8 +76,12 @@ public:
|
|||||||
virtual void ChangeBackgroundColour();
|
virtual void ChangeBackgroundColour();
|
||||||
virtual void ChangeForegroundColour();
|
virtual void ChangeForegroundColour();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void DoSetBitmap();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
wxBitmap m_messageBitmap;
|
wxBitmap m_messageBitmap;
|
||||||
|
wxBitmap m_messageBitmapOriginal;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -44,6 +44,7 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id,
|
|||||||
const wxString& name)
|
const wxString& name)
|
||||||
{
|
{
|
||||||
m_messageBitmap = bitmap;
|
m_messageBitmap = bitmap;
|
||||||
|
m_messageBitmapOriginal = bitmap;
|
||||||
SetName(name);
|
SetName(name);
|
||||||
m_backgroundColour = parent->GetBackgroundColour();
|
m_backgroundColour = parent->GetBackgroundColour();
|
||||||
m_foregroundColour = parent->GetForegroundColour();
|
m_foregroundColour = parent->GetForegroundColour();
|
||||||
@ -67,10 +68,9 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id,
|
|||||||
XmNalignment, XmALIGNMENT_BEGINNING,
|
XmNalignment, XmALIGNMENT_BEGINNING,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
XtVaSetValues ((Widget) m_mainWidget,
|
ChangeBackgroundColour ();
|
||||||
XmNlabelPixmap, (Pixmap) ((wxBitmap&)bitmap).GetLabelPixmap (m_mainWidget),
|
|
||||||
XmNlabelType, XmPIXMAP,
|
DoSetBitmap();
|
||||||
NULL);
|
|
||||||
|
|
||||||
m_font = parent->GetFont();
|
m_font = parent->GetFont();
|
||||||
ChangeFont(FALSE);
|
ChangeFont(FALSE);
|
||||||
@ -78,14 +78,13 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id,
|
|||||||
SetCanAddEventHandler(TRUE);
|
SetCanAddEventHandler(TRUE);
|
||||||
|
|
||||||
wxSize actualSize(size);
|
wxSize actualSize(size);
|
||||||
|
// work around the cases where the bitmap is a wxNull(Icon/Bitmap)
|
||||||
if (actualSize.x == -1)
|
if (actualSize.x == -1)
|
||||||
actualSize.x = bitmap.GetWidth();
|
actualSize.x = bitmap.GetWidth() ? bitmap.GetWidth() : 1;
|
||||||
if (actualSize.y == -1)
|
if (actualSize.y == -1)
|
||||||
actualSize.y = bitmap.GetHeight();
|
actualSize.y = bitmap.GetHeight() ? bitmap.GetHeight() : 1;
|
||||||
AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, actualSize.x, actualSize.y);
|
AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, actualSize.x, actualSize.y);
|
||||||
|
|
||||||
ChangeBackgroundColour ();
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,21 +93,41 @@ wxStaticBitmap::~wxStaticBitmap()
|
|||||||
SetBitmap(wxNullBitmap);
|
SetBitmap(wxNullBitmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxStaticBitmap::SetBitmap(const wxBitmap& bitmap)
|
void wxStaticBitmap::DoSetBitmap()
|
||||||
{
|
{
|
||||||
m_messageBitmap = bitmap;
|
|
||||||
|
|
||||||
Widget widget = (Widget) m_mainWidget;
|
Widget widget = (Widget) m_mainWidget;
|
||||||
int x, y, w1, h1, w2, h2;
|
int x, y, w1, h1, w2, h2;
|
||||||
|
|
||||||
GetPosition(&x, &y);
|
GetPosition(&x, &y);
|
||||||
|
|
||||||
if (bitmap.Ok())
|
if (m_messageBitmapOriginal.Ok())
|
||||||
{
|
{
|
||||||
w2 = bitmap.GetWidth();
|
w2 = m_messageBitmapOriginal.GetWidth();
|
||||||
h2 = bitmap.GetHeight();
|
h2 = m_messageBitmapOriginal.GetHeight();
|
||||||
|
|
||||||
|
Pixmap pixmap;
|
||||||
|
|
||||||
|
// Must re-make the bitmap to have its transparent areas drawn
|
||||||
|
// in the current widget background colour.
|
||||||
|
if (m_messageBitmapOriginal.GetMask())
|
||||||
|
{
|
||||||
|
int backgroundPixel;
|
||||||
|
XtVaGetValues( widget, XmNbackground, &backgroundPixel,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
wxColour col;
|
||||||
|
col.SetPixel(backgroundPixel);
|
||||||
|
|
||||||
|
wxBitmap newBitmap = wxCreateMaskedBitmap(m_messageBitmapOriginal, col);
|
||||||
|
m_messageBitmap = newBitmap;
|
||||||
|
|
||||||
|
pixmap = (Pixmap) m_messageBitmap.GetPixmap();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pixmap = (Pixmap) m_messageBitmap.GetLabelPixmap(widget);
|
||||||
|
|
||||||
XtVaSetValues (widget,
|
XtVaSetValues (widget,
|
||||||
XmNlabelPixmap, ((wxBitmap&)bitmap).GetLabelPixmap (widget),
|
XmNlabelPixmap, pixmap,
|
||||||
XmNlabelType, XmPIXMAP,
|
XmNlabelType, XmPIXMAP,
|
||||||
NULL);
|
NULL);
|
||||||
GetSize(&w1, &h1);
|
GetSize(&w1, &h1);
|
||||||
@ -127,6 +146,14 @@ void wxStaticBitmap::SetBitmap(const wxBitmap& bitmap)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxStaticBitmap::SetBitmap(const wxBitmap& bitmap)
|
||||||
|
{
|
||||||
|
m_messageBitmap = bitmap;
|
||||||
|
m_messageBitmapOriginal = bitmap;
|
||||||
|
|
||||||
|
DoSetBitmap();
|
||||||
|
}
|
||||||
|
|
||||||
void wxStaticBitmap::ChangeFont(bool keepOriginalSize)
|
void wxStaticBitmap::ChangeFont(bool keepOriginalSize)
|
||||||
{
|
{
|
||||||
wxWindow::ChangeFont(keepOriginalSize);
|
wxWindow::ChangeFont(keepOriginalSize);
|
||||||
@ -135,6 +162,9 @@ void wxStaticBitmap::ChangeFont(bool keepOriginalSize)
|
|||||||
void wxStaticBitmap::ChangeBackgroundColour()
|
void wxStaticBitmap::ChangeBackgroundColour()
|
||||||
{
|
{
|
||||||
wxWindow::ChangeBackgroundColour();
|
wxWindow::ChangeBackgroundColour();
|
||||||
|
|
||||||
|
// must recalculate the background colour
|
||||||
|
DoSetBitmap();
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxStaticBitmap::ChangeForegroundColour()
|
void wxStaticBitmap::ChangeForegroundColour()
|
||||||
|
Loading…
Reference in New Issue
Block a user