X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/321db4b6bf15df209942b9c0e6c744c8e7074d1b..7e48d7d9fb4b546e6a68239e8a77ce7ef79df3b0:/src/motif/statbmp.cpp diff --git a/src/motif/statbmp.cpp b/src/motif/statbmp.cpp index 223a5780d6..e0d2ac766e 100644 --- a/src/motif/statbmp.cpp +++ b/src/motif/statbmp.cpp @@ -6,25 +6,31 @@ // Created: 17/09/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ #pragma implementation "statbmp.h" #endif +#include "wx/defs.h" + #include "wx/statbmp.h" +#ifdef __VMS__ +#pragma message disable nosimpint +#endif #include #include #include #include +#ifdef __VMS__ +#pragma message enable nosimpint +#endif -#include +#include "wx/motif/private.h" -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxStaticBitmap, wxControl) -#endif /* * wxStaticBitmap @@ -38,15 +44,16 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id, const wxString& name) { m_messageBitmap = bitmap; + m_messageBitmapOriginal = bitmap; SetName(name); m_backgroundColour = parent->GetBackgroundColour(); m_foregroundColour = parent->GetForegroundColour(); if (parent) parent->AddChild(this); if ( id == -1 ) - m_windowId = (int)NewControlId(); + m_windowId = (int)NewControlId(); else - m_windowId = id; + m_windowId = id; m_windowStyle = style; @@ -61,17 +68,22 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id, XmNalignment, XmALIGNMENT_BEGINNING, NULL); - XtVaSetValues ((Widget) m_mainWidget, - XmNlabelPixmap, (Pixmap) ((wxBitmap&)bitmap).GetLabelPixmap (m_mainWidget), - XmNlabelType, XmPIXMAP, - NULL); + ChangeBackgroundColour (); - SetCanAddEventHandler(TRUE); - AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y); + DoSetBitmap(); - SetFont(* parent->GetFont()); + m_font = parent->GetFont(); + ChangeFont(FALSE); - ChangeBackgroundColour (); + SetCanAddEventHandler(TRUE); + + wxSize actualSize(size); + // work around the cases where the bitmap is a wxNull(Icon/Bitmap) + if (actualSize.x == -1) + actualSize.x = bitmap.GetWidth() ? bitmap.GetWidth() : 1; + if (actualSize.y == -1) + actualSize.y = bitmap.GetHeight() ? bitmap.GetHeight() : 1; + AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, actualSize.x, actualSize.y); return TRUE; } @@ -81,28 +93,43 @@ wxStaticBitmap::~wxStaticBitmap() SetBitmap(wxNullBitmap); } -void wxStaticBitmap::SetSize(int x, int y, int width, int height, int sizeFlags) -{ - wxControl::SetSize(x, y, width, height, sizeFlags); -} - -void wxStaticBitmap::SetBitmap(const wxBitmap& bitmap) +void wxStaticBitmap::DoSetBitmap() { - m_messageBitmap = bitmap; - Widget widget = (Widget) m_mainWidget; int x, y, w1, h1, w2, h2; GetPosition(&x, &y); - if (bitmap.Ok()) + if (m_messageBitmapOriginal.Ok()) { - w2 = bitmap.GetWidth(); - h2 = bitmap.GetHeight(); + w2 = m_messageBitmapOriginal.GetWidth(); + 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, - XmNlabelPixmap, ((wxBitmap&)bitmap).GetLabelPixmap (widget), + XmNlabelPixmap, pixmap, XmNlabelType, XmPIXMAP, - NULL); + NULL); GetSize(&w1, &h1); if (! (w1 == w2) && (h1 == h2)) @@ -116,17 +143,28 @@ void wxStaticBitmap::SetBitmap(const wxBitmap& bitmap) XmNlabelType, XmSTRING, XmNlabelPixmap, XmUNSPECIFIED_PIXMAP, NULL); - } + } } -void wxStaticBitmap::ChangeFont() +void wxStaticBitmap::SetBitmap(const wxBitmap& bitmap) { - wxWindow::ChangeFont(); + m_messageBitmap = bitmap; + m_messageBitmapOriginal = bitmap; + + DoSetBitmap(); +} + +void wxStaticBitmap::ChangeFont(bool keepOriginalSize) +{ + wxWindow::ChangeFont(keepOriginalSize); } void wxStaticBitmap::ChangeBackgroundColour() { wxWindow::ChangeBackgroundColour(); + + // must recalculate the background colour + DoSetBitmap(); } void wxStaticBitmap::ChangeForegroundColour()