]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/button.cpp
fixed huge memory leak in wxFileDialog (closes patch 544060)
[wxWidgets.git] / src / os2 / button.cpp
index 3c1331876b77c6abaa1acbe248ab7c7cddc7e8ba..133a6f6cd57ecfa6657873d00742e8547c1bb654 100644 (file)
@@ -19,6 +19,7 @@
     #include "wx/bmpbuttn.h"
     #include "wx/settings.h"
     #include "wx/dcscreen.h"
     #include "wx/bmpbuttn.h"
     #include "wx/settings.h"
     #include "wx/dcscreen.h"
+    #include "wx/scrolwin.h"
 #endif
 
 #include "wx/os2/private.h"
 #endif
 
 #include "wx/os2/private.h"
@@ -70,6 +71,7 @@ bool wxButton::Create(
     //
     if (m_windowStyle & wxCLIP_SIBLINGS )
         lStyle |= WS_CLIPSIBLINGS;
     //
     if (m_windowStyle & wxCLIP_SIBLINGS )
         lStyle |= WS_CLIPSIBLINGS;
+
     m_hWnd = (WXHWND)::WinCreateWindow( GetHwndOf(pParent)   // Parent handle
                                        ,WC_BUTTON            // A Button class window
                                        ,(PSZ)rsLabel.c_str() // Button text
     m_hWnd = (WXHWND)::WinCreateWindow( GetHwndOf(pParent)   // Parent handle
                                        ,WC_BUTTON            // A Button class window
                                        ,(PSZ)rsLabel.c_str() // Button text
@@ -90,12 +92,20 @@ bool wxButton::Create(
     // Subclass again for purposes of dialog editing mode
     //
     SubclassWin(m_hWnd);
     // Subclass again for purposes of dialog editing mode
     //
     SubclassWin(m_hWnd);
-    SetFont(pParent->GetFont());
+    wxFont*                          pButtonFont = new wxFont( 8
+                                                              ,wxSWISS
+                                                              ,wxNORMAL
+                                                              ,wxNORMAL
+                                                             );
+    SetFont(*pButtonFont);
+    SetXComp(0);
+    SetYComp(0);
     SetSize( rPos.x
             ,rPos.y
             ,rSize.x
             ,rSize.y
            );
     SetSize( rPos.x
             ,rPos.y
             ,rSize.x
             ,rSize.y
            );
+    delete pButtonFont;
     return TRUE;
 } // end of wxButton::Create
 
     return TRUE;
 } // end of wxButton::Create
 
@@ -170,7 +180,7 @@ wxSize wxButton::GetDefaultSize()
     {
         wxScreenDC                  vDc;
 
     {
         wxScreenDC                  vDc;
 
-        vDc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
+        vDc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
 
         //
         // The size of a standard button in the dialog units is 50x14,
 
         //
         // The size of a standard button in the dialog units is 50x14,
@@ -308,7 +318,28 @@ void wxButton::MakeOwnerDrawn()
         lStyle |= BS_USERBUTTON;
         ::WinSetWindowULong(GetHwnd(), QWL_STYLE, lStyle);
     }
         lStyle |= BS_USERBUTTON;
         ::WinSetWindowULong(GetHwnd(), QWL_STYLE, lStyle);
     }
-} // end of wxCButton::MakeOwnerDrawn
+} // end of wxButton::MakeOwnerDrawn
+
+WXDWORD wxButton::OS2GetStyle(
+  long                              lStyle
+, WXDWORD*                          pdwExstyle
+) const
+{
+    //
+    // Buttons never have an external border, they draw their own one
+    //
+    WXDWORD                         dwStyle = wxControl::OS2GetStyle( (lStyle & ~wxBORDER_MASK) | wxBORDER_NONE
+                                                                     ,pdwExstyle
+                                                                    );
+
+    //
+    // We must use WS_CLIPSIBLINGS with the buttons or they would draw over
+    // each other in any resizeable dialog which has more than one button in
+    // the bottom
+    //
+    dwStyle |= WS_CLIPSIBLINGS;
+    return dwStyle;
+} // end of wxButton::OS2GetStyle
 
 MRESULT wxButton::WindowProc(
   WXUINT                            uMsg
 
 MRESULT wxButton::WindowProc(
   WXUINT                            uMsg
@@ -352,5 +383,5 @@ MRESULT wxButton::WindowProc(
                                      ,wParam
                                      ,lParam
                                     ));
                                      ,wParam
                                      ,lParam
                                     ));
-} // end of wxW indowProc
+} // end of wxWindowProc