]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/bmpbuttn.cpp
move generic part of AdjustSize() and status bar methods to the base class
[wxWidgets.git] / src / os2 / bmpbuttn.cpp
index 40ebab45f216f910aa51ea6d907e6f796e8b8f43..9b7d91cebeb866e7848fb48559d9fb710719168a 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        bmpbuttn.cpp
+// Name:        src/os2/bmpbuttn.cpp
 // Purpose:     wxBitmapButton
 // Author:      David Webster
 // Modified by:
@@ -14,8 +14,9 @@
 
 #if wxUSE_BMPBUTTON
 
-#ifndef WX_PRECOMP
 #include "wx/bmpbuttn.h"
+
+#ifndef WX_PRECOMP
 #endif
 
 #include "wx/os2/private.h"
@@ -25,26 +26,14 @@ IMPLEMENT_DYNAMIC_CLASS(wxBitmapButton, wxButton)
 
 #define BUTTON_HEIGHT_FACTOR (EDIT_CONTROL_FACTOR * 1.1)
 
-wxBitmapButtonBase::wxBitmapButtonBase()
-                                      : m_bmpNormal(), 
-                                        m_bmpSelected(), 
-                                        m_bmpFocus(), 
-                                        m_bmpDisabled(), 
-                                        m_marginX(0), 
-                                        m_marginY(0)
-{
-}
-
-bool wxBitmapButton::Create(
-  wxWindow*                         pParent
-, wxWindowID                        vId
-, const wxBitmap&                   rBitmap
-, const wxPoint&                    rPos
-, const wxSize&                     rSize
-, long                              lStyle
-, const wxValidator&                rValidator
-, const wxString&                   rsName
-)
+bool wxBitmapButton::Create( wxWindow*          pParent,
+                             wxWindowID         vId,
+                             const wxBitmap&    rBitmap,
+                             const wxPoint&     rPos,
+                             const wxSize&      rSize,
+                             long               lStyle,
+                             const wxValidator& rValidator,
+                             const wxString&    rsName )
 {
     m_bmpNormal = rBitmap;
     SetName(rsName);
@@ -64,20 +53,20 @@ bool wxBitmapButton::Create(
         m_marginY = wxDEFAULT_BUTTON_MARGIN;
     }
 
-    int                             nX      = rPos.x;
-    int                             nY      = rPos.y;
-    int                             nWidth  = rSize.x;
-    int                             nHeight = rSize.y;
+    int nX      = rPos.x;
+    int nY      = rPos.y;
+    int nWidth  = rSize.x;
+    int nHeight = rSize.y;
 
-    if (vId == -1)
+    if (vId == wxID_ANY)
         m_windowId = NewControlId();
     else
         m_windowId = vId;
 
-    if (nWidth == -1 && rBitmap.Ok())
+    if (nWidth == wxDefaultCoord && rBitmap.Ok())
         nWidth = rBitmap.GetWidth() + 4 * m_marginX;
 
-    if (nHeight == -1 && rBitmap.Ok())
+    if (nHeight == wxDefaultCoord && rBitmap.Ok())
         nHeight = rBitmap.GetHeight() + 4 * m_marginY;
 
     ULONG                           ulOS2Style = WS_VISIBLE | WS_TABSTOP | BS_USERBUTTON;
@@ -87,7 +76,7 @@ bool wxBitmapButton::Create(
 
     m_hWnd = (WXHWND)::WinCreateWindow( GetHwndOf(pParent)
                                        ,WC_BUTTON
-                                       ,wxT("")
+                                       ,(PSZ)wxEmptyString
                                        ,ulOS2Style
                                        ,0, 0, 0, 0
                                        ,GetHwndOf(pParent)
@@ -107,23 +96,20 @@ bool wxBitmapButton::Create(
             ,nWidth
             ,nHeight
            );
-    return TRUE;
+    return true;
 } // end of wxBitmapButton::Create
 
-bool wxBitmapButton::OS2OnDraw(
-  WXDRAWITEMSTRUCT*                 pItem
-)
+bool wxBitmapButton::OS2OnDraw( WXDRAWITEMSTRUCT* pItem)
 {
-    PUSERBUTTON                     pUser     = (PUSERBUTTON)pItem;
-    bool                            bAutoDraw = (GetWindowStyleFlag() & wxBU_AUTODRAW) != 0;
+    PUSERBUTTON  pUser     = (PUSERBUTTON)pItem;
+    bool         bAutoDraw = (GetWindowStyleFlag() & wxBU_AUTODRAW) != 0;
 
     if (!pUser)
-        return FALSE;
+        return false;
 
-    wxBitmap*                       pBitmap;
-    RECTL                           vRect;
-    bool                            bIsSelected = pUser->fsState & BDS_HILITED;
-    wxClientDC                      vDc(this);
+    wxBitmap*  pBitmap;
+    bool       bIsSelected = pUser->fsState & BDS_HILITED;
+    wxClientDC vDc(this);
 
     if (bIsSelected && m_bmpSelected.Ok())
         pBitmap = &m_bmpSelected;
@@ -135,23 +121,21 @@ bool wxBitmapButton::OS2OnDraw(
         pBitmap = &m_bmpNormal;
 
     if (!pBitmap->Ok() )
-        return FALSE;
+        return false;
 
 
     //
     // Centre the bitmap in the control area
     //
-    int                             nX         = 0;
-    int                             nY         = 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;
+    int                             nHeight    = vDc.m_vRclPaint.yTop - vDc.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)
     {
@@ -162,79 +146,74 @@ bool wxBitmapButton::OS2OnDraw(
     //
     // Draw the button face
     //
-    {
-        DrawFace( vDc
-                 ,bIsSelected
-                );
-    }
+    DrawFace( vDc, bIsSelected );
 
     //
     // Draw the bitmap
     //
-    vDc.DrawBitmap( *pBitmap
-                   ,nX1
-                   ,nY1
-                   ,TRUE
-                  );
+    vDc.DrawBitmap( *pBitmap, nX1, nY1, true );
 
     //
     // Draw focus / disabled state, if auto-drawing
     //
     if ((pUser->fsState == BDS_DISABLED) && bAutoDraw)
     {
-        DrawButtonDisable( vDc
-                          ,*pBitmap
-                         );
+        DrawButtonDisable( vDc, *pBitmap );
     }
     else if ((pUser->fsState == BDS_DEFAULT) && bAutoDraw)
     {
         DrawButtonFocus(vDc);
     }
-    return TRUE;
+    return true;
 } // end of wxBitmapButton::OS2OnDraw
 
-void wxBitmapButton::DrawFace (
-  wxClientDC&                       rDC
-, bool                              bSel
-)
+void wxBitmapButton::DrawFace (wxClientDC& rDC, bool bSel)
 {
     //
     // Set up drawing colors
     //
-    wxPen                           vHiLitePen(wxColour(255, 255, 255), 2, wxSOLID); // White
-    wxPen                           vDarkShadowPen(wxColour(85, 85, 85), 2, wxSOLID);
-    wxColour                        vFaceColor(wxColour(204, 204, 204)); // Light Grey
+    wxPen vHiLitePen(*wxWHITE, 2, wxSOLID); // White
+    wxColour gray85(85, 85, 85);
+    wxPen vDarkShadowPen(gray85, 2, wxSOLID);
+    wxColour vFaceColor(204, 204, 204); // Light Grey
 
     //
     // 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);
+    // top
     rDC.DrawLine( rDC.m_vRclPaint.xLeft + 1
-                 ,rDC.m_vRclPaint.yTop - 1
+                 ,rDC.m_vRclPaint.yBottom + 1
                  ,rDC.m_vRclPaint.xRight - 1
-                 ,rDC.m_vRclPaint.yTop - 1
+                 ,rDC.m_vRclPaint.yBottom + 1
                 );
+    // left
     rDC.DrawLine( rDC.m_vRclPaint.xLeft + 1
-                 ,rDC.m_vRclPaint.yTop - 1
-                 ,rDC.m_vRclPaint.xLeft + 1
                  ,rDC.m_vRclPaint.yBottom + 1
+                 ,rDC.m_vRclPaint.xLeft + 1
+                 ,rDC.m_vRclPaint.yTop - 1
                 );
 
     rDC.SetPen(bSel ? vHiLitePen : vDarkShadowPen);
+    // bottom
     rDC.DrawLine( rDC.m_vRclPaint.xLeft + 1
-                 ,rDC.m_vRclPaint.yBottom + 1
+                 ,rDC.m_vRclPaint.yTop - 1
                  ,rDC.m_vRclPaint.xRight - 1
-                 ,rDC.m_vRclPaint.yBottom + 1
+                 ,rDC.m_vRclPaint.yTop - 1
                 );
+    // right
     rDC.DrawLine( rDC.m_vRclPaint.xRight - 1
-                 ,rDC.m_vRclPaint.yTop - 1
-                 ,rDC.m_vRclPaint.xRight - 1
                  ,rDC.m_vRclPaint.yBottom + 1
+                 ,rDC.m_vRclPaint.xRight - 1
+                 ,rDC.m_vRclPaint.yTop - 1
                 );
 
 } // end of wxBitmapButton::DrawFace
@@ -243,64 +222,72 @@ void wxBitmapButton::DrawButtonFocus (
   wxClientDC&                       rDC
 )
 {
-    wxPen                           vBlackPen(wxColour(0, 0, 0), 2, wxSOLID);
+    wxPen vBlackPen(*wxBLACK, 2, wxSOLID);
 
     //
     // Draw a thick black line around the outside of the button
+    // Note: DrawLine expects wxWidgets coordinate system so swap
     //
     rDC.SetPen(vBlackPen);
+    // top
     rDC.DrawLine( rDC.m_vRclPaint.xLeft
-                 ,rDC.m_vRclPaint.yTop
+                 ,rDC.m_vRclPaint.yBottom
                  ,rDC.m_vRclPaint.xRight
-                 ,rDC.m_vRclPaint.yTop
+                 ,rDC.m_vRclPaint.yBottom
                 );
+    // right
     rDC.DrawLine( rDC.m_vRclPaint.xRight
-                 ,rDC.m_vRclPaint.yTop
-                 ,rDC.m_vRclPaint.xRight
                  ,rDC.m_vRclPaint.yBottom
+                 ,rDC.m_vRclPaint.xRight
+                 ,rDC.m_vRclPaint.yTop
                 );
+    // bottom
     rDC.DrawLine( rDC.m_vRclPaint.xRight
-                 ,rDC.m_vRclPaint.yBottom
+                 ,rDC.m_vRclPaint.yTop
                  ,rDC.m_vRclPaint.xLeft
-                 ,rDC.m_vRclPaint.yBottom
+                 ,rDC.m_vRclPaint.yTop
                 );
+    // left
     rDC.DrawLine( rDC.m_vRclPaint.xLeft
-                 ,rDC.m_vRclPaint.yBottom
-                 ,rDC.m_vRclPaint.xLeft
                  ,rDC.m_vRclPaint.yTop
+                 ,rDC.m_vRclPaint.xLeft
+                 ,rDC.m_vRclPaint.yBottom
                 );
 } // end of wxBitmapButton::DrawButtonFocus
 
-void wxBitmapButton::DrawButtonDisable(
-  wxClientDC&                       rDC
-, wxBitmap&                         rBmp
-)
+void wxBitmapButton::DrawButtonDisable( wxClientDC& rDC,
+                                        wxBitmap& rBmp )
 {
-    wxPen                           vGreyPen(wxColour(128, 128, 128), 2, wxSOLID);
+    wxPen vGreyPen(wxT("GREY"), 2, wxSOLID);
 
     //
     // Draw a thick black line around the outside of the button
+    // Note: DrawLine expects wxWidgets coordinate system so swap
     //
     rDC.SetPen(vGreyPen);
+    // top
     rDC.DrawLine( rDC.m_vRclPaint.xLeft
-                 ,rDC.m_vRclPaint.yTop
+                 ,rDC.m_vRclPaint.yBottom
                  ,rDC.m_vRclPaint.xRight
-                 ,rDC.m_vRclPaint.yTop
+                 ,rDC.m_vRclPaint.yBottom
                 );
+    // right
     rDC.DrawLine( rDC.m_vRclPaint.xRight
-                 ,rDC.m_vRclPaint.yTop
-                 ,rDC.m_vRclPaint.xRight
                  ,rDC.m_vRclPaint.yBottom
+                 ,rDC.m_vRclPaint.xRight
+                 ,rDC.m_vRclPaint.yTop
                 );
+    // bottom
     rDC.DrawLine( rDC.m_vRclPaint.xRight
-                 ,rDC.m_vRclPaint.yBottom
+                 ,rDC.m_vRclPaint.yTop
                  ,rDC.m_vRclPaint.xLeft
-                 ,rDC.m_vRclPaint.yBottom
+                 ,rDC.m_vRclPaint.yTop
                 );
+    // left
     rDC.DrawLine( rDC.m_vRclPaint.xLeft
-                 ,rDC.m_vRclPaint.yBottom
-                 ,rDC.m_vRclPaint.xLeft
                  ,rDC.m_vRclPaint.yTop
+                 ,rDC.m_vRclPaint.xLeft
+                 ,rDC.m_vRclPaint.yBottom
                 );
     wxDisableBitmap(rBmp, vGreyPen.GetColour().GetPixel());
 } // end of wxBitmapButton::DrawButtonDisable
@@ -311,4 +298,3 @@ void wxBitmapButton::SetDefault()
 }
 
 #endif // ndef for wxUSE_BMPBUTTON
-