]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/bmpbuttn.cpp
Applied patch from Ticket #9563. Use just the rectangle of the widget with the focus...
[wxWidgets.git] / src / os2 / bmpbuttn.cpp
index 12ce06f72792376c8f8b149caebd02f66567e57c..bfaf5a7217e0548f579ebb6e77a177eae53bf93c 100644 (file)
@@ -19,6 +19,7 @@
 #ifndef WX_PRECOMP
 #endif
 
+#include "wx/os2/dcclient.h"
 #include "wx/os2/private.h"
 
 
@@ -127,16 +128,16 @@ bool wxBitmapButton::OS2OnDraw( WXDRAWITEMSTRUCT* pItem)
     //
     // Centre the bitmap in the control area
     //
-    int                             nX         = 0;
     int                             nX1        = 0;
     int                             nY1        = 0;
-    int                             nWidth     = vDc.m_vRclPaint.xRight - vDc.m_vRclPaint.xLeft;
-    int                             nHeight    = vDc.m_vRclPaint.xRight - vDc.m_vRclPaint.xLeft;
+    wxPMDCImpl                      *impl = (wxPMDCImpl*) vDc.GetImpl();
+    int                             nWidth     = impl->m_vRclPaint.xRight - impl->m_vRclPaint.xLeft;
+    int                             nHeight    = impl->m_vRclPaint.yTop - impl->m_vRclPaint.yBottom;
     int                             nBmpWidth  = pBitmap->GetWidth();
     int                             nBmpHeight = pBitmap->GetHeight();
 
-    nX1 = nX + (nWidth - nBmpWidth) / 2;
-    nY1 = nX + (nHeight - nBmpHeight) / 2;
+    nX1 = (nWidth - nBmpWidth) / 2;
+    nY1 = (nHeight - nBmpHeight) / 2;
 
     if (bIsSelected && bAutoDraw)
     {
@@ -147,11 +148,7 @@ bool wxBitmapButton::OS2OnDraw( WXDRAWITEMSTRUCT* pItem)
     //
     // Draw the button face
     //
-    {
-        DrawFace( vDc
-                 ,bIsSelected
-                );
-    }
+    DrawFace( vDc, bIsSelected );
 
     //
     // Draw the bitmap
@@ -163,9 +160,7 @@ bool wxBitmapButton::OS2OnDraw( WXDRAWITEMSTRUCT* pItem)
     //
     if ((pUser->fsState == BDS_DISABLED) && bAutoDraw)
     {
-        DrawButtonDisable( vDc
-                          ,*pBitmap
-                         );
+        DrawButtonDisable( vDc, *pBitmap );
     }
     else if ((pUser->fsState == BDS_DEFAULT) && bAutoDraw)
     {
@@ -187,33 +182,41 @@ void wxBitmapButton::DrawFace (wxClientDC& rDC, bool bSel)
     //
     // Draw the main button face
     //
-    ::WinFillRect(rDC.GetHPS(), &rDC.m_vRclPaint, vFaceColor.GetPixel());
+    // This triggers a redraw and destroys the bottom & left focus border and
+    // doesn't seem to do anything useful.
+    //    ::WinFillRect(rDC.GetHPS(), &rDC.m_vRclPaint, vFaceColor.GetPixel());
 
     //
     // Draw the border
+    // Note: DrawLine expects wxWidgets coordinate system so swap
     //
     rDC.SetPen(bSel ? vDarkShadowPen : vHiLitePen);
-    rDC.DrawLine( rDC.m_vRclPaint.xLeft + 1
-                 ,rDC.m_vRclPaint.yTop - 1
-                 ,rDC.m_vRclPaint.xRight - 1
-                 ,rDC.m_vRclPaint.yTop - 1
+    wxPMDCImpl                      *impl = (wxPMDCImpl*) rDC.GetImpl();
+    // top
+    rDC.DrawLine( impl->m_vRclPaint.xLeft + 1
+                 ,impl->m_vRclPaint.yBottom + 1
+                 ,impl->m_vRclPaint.xRight - 1
+                 ,impl->m_vRclPaint.yBottom + 1
                 );
-    rDC.DrawLine( rDC.m_vRclPaint.xLeft + 1
-                 ,rDC.m_vRclPaint.yTop - 1
-                 ,rDC.m_vRclPaint.xLeft + 1
-                 ,rDC.m_vRclPaint.yBottom + 1
+    // left
+    rDC.DrawLine( impl->m_vRclPaint.xLeft + 1
+                 ,impl->m_vRclPaint.yBottom + 1
+                 ,impl->m_vRclPaint.xLeft + 1
+                 ,impl->m_vRclPaint.yTop - 1
                 );
 
     rDC.SetPen(bSel ? vHiLitePen : vDarkShadowPen);
-    rDC.DrawLine( rDC.m_vRclPaint.xLeft + 1
-                 ,rDC.m_vRclPaint.yBottom + 1
-                 ,rDC.m_vRclPaint.xRight - 1
-                 ,rDC.m_vRclPaint.yBottom + 1
+    // bottom
+    rDC.DrawLine( impl->m_vRclPaint.xLeft + 1
+                 ,impl->m_vRclPaint.yTop - 1
+                 ,impl->m_vRclPaint.xRight - 1
+                 ,impl->m_vRclPaint.yTop - 1
                 );
-    rDC.DrawLine( rDC.m_vRclPaint.xRight - 1
-                 ,rDC.m_vRclPaint.yTop - 1
-                 ,rDC.m_vRclPaint.xRight - 1
-                 ,rDC.m_vRclPaint.yBottom + 1
+    // right
+    rDC.DrawLine( impl->m_vRclPaint.xRight - 1
+                 ,impl->m_vRclPaint.yBottom + 1
+                 ,impl->m_vRclPaint.xRight - 1
+                 ,impl->m_vRclPaint.yTop - 1
                 );
 
 } // end of wxBitmapButton::DrawFace
@@ -226,27 +229,33 @@ void wxBitmapButton::DrawButtonFocus (
 
     //
     // Draw a thick black line around the outside of the button
+    // Note: DrawLine expects wxWidgets coordinate system so swap
     //
     rDC.SetPen(vBlackPen);
-    rDC.DrawLine( rDC.m_vRclPaint.xLeft
-                 ,rDC.m_vRclPaint.yTop
-                 ,rDC.m_vRclPaint.xRight
-                 ,rDC.m_vRclPaint.yTop
+    wxPMDCImpl                      *impl = (wxPMDCImpl*) rDC.GetImpl();
+    // top
+    rDC.DrawLine( impl->m_vRclPaint.xLeft
+                 ,impl->m_vRclPaint.yBottom
+                 ,impl->m_vRclPaint.xRight
+                 ,impl->m_vRclPaint.yBottom
                 );
-    rDC.DrawLine( rDC.m_vRclPaint.xRight
-                 ,rDC.m_vRclPaint.yTop
-                 ,rDC.m_vRclPaint.xRight
-                 ,rDC.m_vRclPaint.yBottom
+    // right
+    rDC.DrawLine( impl->m_vRclPaint.xRight
+                 ,impl->m_vRclPaint.yBottom
+                 ,impl->m_vRclPaint.xRight
+                 ,impl->m_vRclPaint.yTop
                 );
-    rDC.DrawLine( rDC.m_vRclPaint.xRight
-                 ,rDC.m_vRclPaint.yBottom
-                 ,rDC.m_vRclPaint.xLeft
-                 ,rDC.m_vRclPaint.yBottom
+    // bottom
+    rDC.DrawLine( impl->m_vRclPaint.xRight
+                 ,impl->m_vRclPaint.yTop
+                 ,impl->m_vRclPaint.xLeft
+                 ,impl->m_vRclPaint.yTop
                 );
-    rDC.DrawLine( rDC.m_vRclPaint.xLeft
-                 ,rDC.m_vRclPaint.yBottom
-                 ,rDC.m_vRclPaint.xLeft
-                 ,rDC.m_vRclPaint.yTop
+    // left
+    rDC.DrawLine( impl->m_vRclPaint.xLeft
+                 ,impl->m_vRclPaint.yTop
+                 ,impl->m_vRclPaint.xLeft
+                 ,impl->m_vRclPaint.yBottom
                 );
 } // end of wxBitmapButton::DrawButtonFocus
 
@@ -257,34 +266,35 @@ void wxBitmapButton::DrawButtonDisable( wxClientDC& rDC,
 
     //
     // Draw a thick black line around the outside of the button
+    // Note: DrawLine expects wxWidgets coordinate system so swap
     //
     rDC.SetPen(vGreyPen);
-    rDC.DrawLine( rDC.m_vRclPaint.xLeft
-                 ,rDC.m_vRclPaint.yTop
-                 ,rDC.m_vRclPaint.xRight
-                 ,rDC.m_vRclPaint.yTop
+    wxPMDCImpl                      *impl = (wxPMDCImpl*) rDC.GetImpl();
+    // top
+    rDC.DrawLine( impl->m_vRclPaint.xLeft
+                 ,impl->m_vRclPaint.yBottom
+                 ,impl->m_vRclPaint.xRight
+                 ,impl->m_vRclPaint.yBottom
                 );
-    rDC.DrawLine( rDC.m_vRclPaint.xRight
-                 ,rDC.m_vRclPaint.yTop
-                 ,rDC.m_vRclPaint.xRight
-                 ,rDC.m_vRclPaint.yBottom
+    // right
+    rDC.DrawLine( impl->m_vRclPaint.xRight
+                 ,impl->m_vRclPaint.yBottom
+                 ,impl->m_vRclPaint.xRight
+                 ,impl->m_vRclPaint.yTop
                 );
-    rDC.DrawLine( rDC.m_vRclPaint.xRight
-                 ,rDC.m_vRclPaint.yBottom
-                 ,rDC.m_vRclPaint.xLeft
-                 ,rDC.m_vRclPaint.yBottom
+    // bottom
+    rDC.DrawLine( impl->m_vRclPaint.xRight
+                 ,impl->m_vRclPaint.yTop
+                 ,impl->m_vRclPaint.xLeft
+                 ,impl->m_vRclPaint.yTop
                 );
-    rDC.DrawLine( rDC.m_vRclPaint.xLeft
-                 ,rDC.m_vRclPaint.yBottom
-                 ,rDC.m_vRclPaint.xLeft
-                 ,rDC.m_vRclPaint.yTop
+    // left
+    rDC.DrawLine( impl->m_vRclPaint.xLeft
+                 ,impl->m_vRclPaint.yTop
+                 ,impl->m_vRclPaint.xLeft
+                 ,impl->m_vRclPaint.yBottom
                 );
     wxDisableBitmap(rBmp, vGreyPen.GetColour().GetPixel());
 } // end of wxBitmapButton::DrawButtonDisable
 
-void wxBitmapButton::SetDefault()
-{
-    wxButton::SetDefault();
-}
-
 #endif // ndef for wxUSE_BMPBUTTON