]>
git.saurik.com Git - wxWidgets.git/blob - src/motif/statbmp.cpp
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxStaticBitmap
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
13 #pragma implementation "statbmp.h"
18 #include "wx/statbmp.h"
21 #pragma message disable nosimpint
25 #include <Xm/LabelG.h>
26 #include <Xm/RowColumn.h>
28 #pragma message enable nosimpint
31 #include "wx/motif/private.h"
33 IMPLEMENT_DYNAMIC_CLASS(wxStaticBitmap
, wxControl
)
39 bool wxStaticBitmap::Create(wxWindow
*parent
, wxWindowID id
,
40 const wxBitmap
& bitmap
,
46 m_messageBitmap
= bitmap
;
47 m_messageBitmapOriginal
= bitmap
;
49 m_backgroundColour
= parent
->GetBackgroundColour();
50 m_foregroundColour
= parent
->GetForegroundColour();
51 if (parent
) parent
->AddChild(this);
54 m_windowId
= (int)NewControlId();
58 m_windowStyle
= style
;
60 Widget parentWidget
= (Widget
) parent
->GetClientWidget();
62 m_mainWidget
= (WXWidget
) XtVaCreateManagedWidget ("staticBitmap",
64 xmLabelGadgetClass
, parentWidget
,
66 xmLabelWidgetClass
, parentWidget
,
68 XmNalignment
, XmALIGNMENT_BEGINNING
,
71 ChangeBackgroundColour ();
75 m_font
= parent
->GetFont();
78 SetCanAddEventHandler(TRUE
);
80 wxSize
actualSize(size
);
81 // work around the cases where the bitmap is a wxNull(Icon/Bitmap)
82 if (actualSize
.x
== -1)
83 actualSize
.x
= bitmap
.GetWidth() ? bitmap
.GetWidth() : 1;
84 if (actualSize
.y
== -1)
85 actualSize
.y
= bitmap
.GetHeight() ? bitmap
.GetHeight() : 1;
86 AttachWidget (parent
, m_mainWidget
, (WXWidget
) NULL
, pos
.x
, pos
.y
, actualSize
.x
, actualSize
.y
);
91 wxStaticBitmap::~wxStaticBitmap()
93 SetBitmap(wxNullBitmap
);
96 void wxStaticBitmap::DoSetBitmap()
98 Widget widget
= (Widget
) m_mainWidget
;
99 int x
, y
, w1
, h1
, w2
, h2
;
103 if (m_messageBitmapOriginal
.Ok())
105 w2
= m_messageBitmapOriginal
.GetWidth();
106 h2
= m_messageBitmapOriginal
.GetHeight();
110 // Must re-make the bitmap to have its transparent areas drawn
111 // in the current widget background colour.
112 if (m_messageBitmapOriginal
.GetMask())
115 XtVaGetValues( widget
, XmNbackground
, &backgroundPixel
,
119 col
.SetPixel(backgroundPixel
);
121 wxBitmap newBitmap
= wxCreateMaskedBitmap(m_messageBitmapOriginal
, col
);
122 m_messageBitmap
= newBitmap
;
124 pixmap
= (Pixmap
) m_messageBitmap
.GetPixmap();
127 pixmap
= (Pixmap
) m_messageBitmap
.GetLabelPixmap(widget
);
129 XtVaSetValues (widget
,
130 XmNlabelPixmap
, pixmap
,
131 XmNlabelType
, XmPIXMAP
,
135 if (! (w1
== w2
) && (h1
== h2
))
136 SetSize(x
, y
, w2
, h2
);
140 // Null bitmap: must not use current pixmap
141 // since it is no longer valid.
142 XtVaSetValues (widget
,
143 XmNlabelType
, XmSTRING
,
144 XmNlabelPixmap
, XmUNSPECIFIED_PIXMAP
,
149 void wxStaticBitmap::SetBitmap(const wxBitmap
& bitmap
)
151 m_messageBitmap
= bitmap
;
152 m_messageBitmapOriginal
= bitmap
;
157 void wxStaticBitmap::ChangeFont(bool keepOriginalSize
)
159 wxWindow::ChangeFont(keepOriginalSize
);
162 void wxStaticBitmap::ChangeBackgroundColour()
164 wxWindow::ChangeBackgroundColour();
166 // must recalculate the background colour
170 void wxStaticBitmap::ChangeForegroundColour()
172 wxWindow::ChangeForegroundColour();