]>
git.saurik.com Git - wxWidgets.git/blob - src/os2/bmpbuttn.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/os2/bmpbuttn.cpp
3 // Purpose: wxBitmapButton
4 // Author: David Webster
8 // Copyright: (c) David Webster
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 // For compilers that support precompilation, includes "wx.h".
13 #include "wx/wxprec.h"
17 #include "wx/bmpbuttn.h"
22 #include "wx/os2/private.h"
25 IMPLEMENT_DYNAMIC_CLASS(wxBitmapButton
, wxButton
)
27 #define BUTTON_HEIGHT_FACTOR (EDIT_CONTROL_FACTOR * 1.1)
29 bool wxBitmapButton::Create( wxWindow
* pParent
,
31 const wxBitmap
& rBitmap
,
35 const wxValidator
& rValidator
,
36 const wxString
& rsName
)
38 m_bmpNormal
= rBitmap
;
41 SetValidator(rValidator
);
44 pParent
->AddChild(this);
46 m_backgroundColour
= pParent
->GetBackgroundColour() ;
47 m_foregroundColour
= pParent
->GetForegroundColour() ;
48 m_windowStyle
= lStyle
;
50 if (lStyle
& wxBU_AUTODRAW
)
52 m_marginX
= wxDEFAULT_BUTTON_MARGIN
;
53 m_marginY
= wxDEFAULT_BUTTON_MARGIN
;
59 int nHeight
= rSize
.y
;
62 m_windowId
= NewControlId();
66 if (nWidth
== wxDefaultCoord
&& rBitmap
.Ok())
67 nWidth
= rBitmap
.GetWidth() + 4 * m_marginX
;
69 if (nHeight
== wxDefaultCoord
&& rBitmap
.Ok())
70 nHeight
= rBitmap
.GetHeight() + 4 * m_marginY
;
72 ULONG ulOS2Style
= WS_VISIBLE
| WS_TABSTOP
| BS_USERBUTTON
;
74 if (m_windowStyle
& wxCLIP_SIBLINGS
)
75 ulOS2Style
|= WS_CLIPSIBLINGS
;
77 m_hWnd
= (WXHWND
)::WinCreateWindow( GetHwndOf(pParent
)
90 //Subclass again for purposes of dialog editing mode
93 SetFont(*wxSMALL_FONT
);
100 } // end of wxBitmapButton::Create
102 bool wxBitmapButton::OS2OnDraw( WXDRAWITEMSTRUCT
* pItem
)
104 PUSERBUTTON pUser
= (PUSERBUTTON
)pItem
;
105 bool bAutoDraw
= (GetWindowStyleFlag() & wxBU_AUTODRAW
) != 0;
111 bool bIsSelected
= pUser
->fsState
& BDS_HILITED
;
112 wxClientDC
vDc(this);
114 if (bIsSelected
&& m_bmpSelected
.Ok())
115 pBitmap
= &m_bmpSelected
;
116 else if ((pUser
->fsState
& BDS_DEFAULT
) && m_bmpFocus
.Ok())
117 pBitmap
= &m_bmpFocus
;
118 else if ((pUser
->fsState
& BDS_DISABLED
) && m_bmpDisabled
.Ok())
119 pBitmap
= &m_bmpDisabled
;
121 pBitmap
= &m_bmpNormal
;
128 // Centre the bitmap in the control area
132 int nWidth
= vDc
.m_vRclPaint
.xRight
- vDc
.m_vRclPaint
.xLeft
;
133 int nHeight
= vDc
.m_vRclPaint
.yTop
- vDc
.m_vRclPaint
.yBottom
;
134 int nBmpWidth
= pBitmap
->GetWidth();
135 int nBmpHeight
= pBitmap
->GetHeight();
137 nX1
= (nWidth
- nBmpWidth
) / 2;
138 nY1
= (nHeight
- nBmpHeight
) / 2;
140 if (bIsSelected
&& bAutoDraw
)
147 // Draw the button face
149 DrawFace( vDc
, bIsSelected
);
154 vDc
.DrawBitmap( *pBitmap
, nX1
, nY1
, true );
157 // Draw focus / disabled state, if auto-drawing
159 if ((pUser
->fsState
== BDS_DISABLED
) && bAutoDraw
)
161 DrawButtonDisable( vDc
, *pBitmap
);
163 else if ((pUser
->fsState
== BDS_DEFAULT
) && bAutoDraw
)
165 DrawButtonFocus(vDc
);
168 } // end of wxBitmapButton::OS2OnDraw
170 void wxBitmapButton::DrawFace (wxClientDC
& rDC
, bool bSel
)
173 // Set up drawing colors
175 wxPen
vHiLitePen(*wxWHITE
, 2, wxSOLID
); // White
176 wxColour
gray85(85, 85, 85);
177 wxPen
vDarkShadowPen(gray85
, 2, wxSOLID
);
178 wxColour
vFaceColor(204, 204, 204); // Light Grey
181 // Draw the main button face
183 // This triggers a redraw and destroys the bottom & left focus border and
184 // doesn't seem to do anything useful.
185 // ::WinFillRect(rDC.GetHPS(), &rDC.m_vRclPaint, vFaceColor.GetPixel());
189 // Note: DrawLine expects wxWidgets coordinate system so swap
191 rDC
.SetPen(bSel
? vDarkShadowPen
: vHiLitePen
);
193 rDC
.DrawLine( rDC
.m_vRclPaint
.xLeft
+ 1
194 ,rDC
.m_vRclPaint
.yBottom
+ 1
195 ,rDC
.m_vRclPaint
.xRight
- 1
196 ,rDC
.m_vRclPaint
.yBottom
+ 1
199 rDC
.DrawLine( rDC
.m_vRclPaint
.xLeft
+ 1
200 ,rDC
.m_vRclPaint
.yBottom
+ 1
201 ,rDC
.m_vRclPaint
.xLeft
+ 1
202 ,rDC
.m_vRclPaint
.yTop
- 1
205 rDC
.SetPen(bSel
? vHiLitePen
: vDarkShadowPen
);
207 rDC
.DrawLine( rDC
.m_vRclPaint
.xLeft
+ 1
208 ,rDC
.m_vRclPaint
.yTop
- 1
209 ,rDC
.m_vRclPaint
.xRight
- 1
210 ,rDC
.m_vRclPaint
.yTop
- 1
213 rDC
.DrawLine( rDC
.m_vRclPaint
.xRight
- 1
214 ,rDC
.m_vRclPaint
.yBottom
+ 1
215 ,rDC
.m_vRclPaint
.xRight
- 1
216 ,rDC
.m_vRclPaint
.yTop
- 1
219 } // end of wxBitmapButton::DrawFace
221 void wxBitmapButton::DrawButtonFocus (
225 wxPen
vBlackPen(*wxBLACK
, 2, wxSOLID
);
228 // Draw a thick black line around the outside of the button
229 // Note: DrawLine expects wxWidgets coordinate system so swap
231 rDC
.SetPen(vBlackPen
);
233 rDC
.DrawLine( rDC
.m_vRclPaint
.xLeft
234 ,rDC
.m_vRclPaint
.yBottom
235 ,rDC
.m_vRclPaint
.xRight
236 ,rDC
.m_vRclPaint
.yBottom
239 rDC
.DrawLine( rDC
.m_vRclPaint
.xRight
240 ,rDC
.m_vRclPaint
.yBottom
241 ,rDC
.m_vRclPaint
.xRight
242 ,rDC
.m_vRclPaint
.yTop
245 rDC
.DrawLine( rDC
.m_vRclPaint
.xRight
246 ,rDC
.m_vRclPaint
.yTop
247 ,rDC
.m_vRclPaint
.xLeft
248 ,rDC
.m_vRclPaint
.yTop
251 rDC
.DrawLine( rDC
.m_vRclPaint
.xLeft
252 ,rDC
.m_vRclPaint
.yTop
253 ,rDC
.m_vRclPaint
.xLeft
254 ,rDC
.m_vRclPaint
.yBottom
256 } // end of wxBitmapButton::DrawButtonFocus
258 void wxBitmapButton::DrawButtonDisable( wxClientDC
& rDC
,
261 wxPen
vGreyPen(wxT("GREY"), 2, wxSOLID
);
264 // Draw a thick black line around the outside of the button
265 // Note: DrawLine expects wxWidgets coordinate system so swap
267 rDC
.SetPen(vGreyPen
);
269 rDC
.DrawLine( rDC
.m_vRclPaint
.xLeft
270 ,rDC
.m_vRclPaint
.yBottom
271 ,rDC
.m_vRclPaint
.xRight
272 ,rDC
.m_vRclPaint
.yBottom
275 rDC
.DrawLine( rDC
.m_vRclPaint
.xRight
276 ,rDC
.m_vRclPaint
.yBottom
277 ,rDC
.m_vRclPaint
.xRight
278 ,rDC
.m_vRclPaint
.yTop
281 rDC
.DrawLine( rDC
.m_vRclPaint
.xRight
282 ,rDC
.m_vRclPaint
.yTop
283 ,rDC
.m_vRclPaint
.xLeft
284 ,rDC
.m_vRclPaint
.yTop
287 rDC
.DrawLine( rDC
.m_vRclPaint
.xLeft
288 ,rDC
.m_vRclPaint
.yTop
289 ,rDC
.m_vRclPaint
.xLeft
290 ,rDC
.m_vRclPaint
.yBottom
292 wxDisableBitmap(rBmp
, vGreyPen
.GetColour().GetPixel());
293 } // end of wxBitmapButton::DrawButtonDisable
295 void wxBitmapButton::SetDefault()
297 wxButton::SetDefault();
300 #endif // ndef for wxUSE_BMPBUTTON