]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/renderer.cpp
fixed incorrectly inversed test for parent [not] being deleted (patch 1624472)
[wxWidgets.git] / src / msw / renderer.cpp
index bba35b0154993da8f3e7b6e7d17b4fd9a09bdd7a..27c7cb7e6cc1571abac9047aa28b3c72b9cac423 100644 (file)
@@ -33,8 +33,8 @@
 
 #include "wx/splitter.h"
 #include "wx/renderer.h"
 
 #include "wx/splitter.h"
 #include "wx/renderer.h"
-#include "wx/msw/uxtheme.h"
 #include "wx/msw/private.h"
 #include "wx/msw/private.h"
+#include "wx/msw/uxtheme.h"
 
 // tmschema.h is in Win32 Platform SDK and might not be available with earlier
 // compilers
 
 // tmschema.h is in Win32 Platform SDK and might not be available with earlier
 // compilers
@@ -118,7 +118,7 @@ public:
 
     static wxRendererNative& Get();
 
 
     static wxRendererNative& Get();
 
-    virtual void DrawHeaderButton(wxWindow *win,
+    virtual int DrawHeaderButton(wxWindow *win,
                                   wxDC& dc,
                                   const wxRect& rect,
                                   int flags = 0,
                                   wxDC& dc,
                                   const wxRect& rect,
                                   int flags = 0,
@@ -209,22 +209,30 @@ wxRendererMSW::DrawComboBoxDropButton(wxWindow * WXUNUSED(win),
 void
 wxRendererMSW::DrawPushButton(wxWindow * WXUNUSED(win),
                               wxDC& dc,
 void
 wxRendererMSW::DrawPushButton(wxWindow * WXUNUSED(win),
                               wxDC& dc,
-                              const wxRect& rect,
+                              const wxRect& rectOrig,
                               int flags)
 {
                               int flags)
 {
-    RECT r;
-    r.left = rect.GetLeft();
-    r.top = rect.GetTop();
-    r.bottom = rect.y + rect.height;
-    r.right = rect.x + rect.width;
+    wxRect rect(rectOrig);
 
     int style = DFCS_BUTTONPUSH;
     if ( flags & wxCONTROL_DISABLED )
         style |= DFCS_INACTIVE;
     if ( flags & wxCONTROL_PRESSED )
         style |= DFCS_PUSHED | DFCS_FLAT;
 
     int style = DFCS_BUTTONPUSH;
     if ( flags & wxCONTROL_DISABLED )
         style |= DFCS_INACTIVE;
     if ( flags & wxCONTROL_PRESSED )
         style |= DFCS_PUSHED | DFCS_FLAT;
+    if ( flags & wxCONTROL_ISDEFAULT )
+    {
+        // DrawFrameControl() doesn't seem to support default buttons so we
+        // have to draw the border ourselves
+        wxDCPenChanger pen(dc, *wxBLACK_PEN);
+        wxDCBrushChanger brush(dc, *wxTRANSPARENT_BRUSH);
+        dc.DrawRectangle(rect);
+        rect.Deflate(1);
+    }
+
+    RECT rc;
+    wxCopyRectToRECT(rect, rc);
 
 
-    ::DrawFrameControl(GetHdcOf(dc), &r, DFC_BUTTON, style);
+    ::DrawFrameControl(GetHdcOf(dc), &rc, DFC_BUTTON, style);
 }
 
 // ============================================================================
 }
 
 // ============================================================================
@@ -282,7 +290,7 @@ wxRendererXP::DrawComboBoxDropButton(wxWindow * win,
 
 }
 
 
 }
 
-void
+int
 wxRendererXP::DrawHeaderButton(wxWindow *win,
                                wxDC& dc,
                                const wxRect& rect,
 wxRendererXP::DrawHeaderButton(wxWindow *win,
                                wxDC& dc,
                                const wxRect& rect,
@@ -293,8 +301,7 @@ wxRendererXP::DrawHeaderButton(wxWindow *win,
     wxUxThemeHandle hTheme(win, L"HEADER");
     if ( !hTheme )
     {
     wxUxThemeHandle hTheme(win, L"HEADER");
     if ( !hTheme )
     {
-        m_rendererNative.DrawHeaderButton(win, dc, rect, flags, sortArrow, params);
-        return;
+        return m_rendererNative.DrawHeaderButton(win, dc, rect, flags, sortArrow, params);
     }
 
     RECT r;
     }
 
     RECT r;
@@ -322,7 +329,7 @@ wxRendererXP::DrawHeaderButton(wxWindow *win,
     // and then clear those flags before calling DrawHeaderButtonContents.
     
     // Add any extras that are specified in flags and params
     // and then clear those flags before calling DrawHeaderButtonContents.
     
     // Add any extras that are specified in flags and params
-    DrawHeaderButtonContents(win, dc, rect, flags, sortArrow, params);
+    return DrawHeaderButtonContents(win, dc, rect, flags, sortArrow, params);
 }
 
 
 }