]> git.saurik.com Git - wxWidgets.git/blobdiff - src/ribbon/panel.cpp
Fix wxMSW rendering artifacts with modal dialogs.
[wxWidgets.git] / src / ribbon / panel.cpp
index 68a8d216e8acd3aac6b1a28909799dc68685460f..a590c9b8f0785c79c4b10e285107b6ffebaf13d3 100644 (file)
@@ -8,22 +8,24 @@
 // Copyright:   (C) Peter Cawley
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 // Copyright:   (C) Peter Cawley
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
+
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
     #pragma hdrstop
 #endif
 
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
     #pragma hdrstop
 #endif
 
+#if wxUSE_RIBBON
+
+#include "wx/ribbon/panel.h"
 #include "wx/ribbon/art.h"
 #include "wx/ribbon/bar.h"
 #include "wx/ribbon/art.h"
 #include "wx/ribbon/bar.h"
-#include "wx/ribbon/panel.h"
 #include "wx/dcbuffer.h"
 #include "wx/display.h"
 #include "wx/dcbuffer.h"
 #include "wx/display.h"
-#include "wx/frame.h"
-
-#if wxUSE_RIBBON
+#include "wx/sizer.h"
 
 #ifndef WX_PRECOMP
 
 #ifndef WX_PRECOMP
+#include "wx/frame.h"
 #endif
 
 #ifdef __WXMSW__
 #endif
 
 #ifdef __WXMSW__
@@ -42,7 +44,7 @@ BEGIN_EVENT_TABLE(wxRibbonPanel, wxRibbonControl)
     EVT_SIZE(wxRibbonPanel::OnSize)
 END_EVENT_TABLE()
 
     EVT_SIZE(wxRibbonPanel::OnSize)
 END_EVENT_TABLE()
 
-wxRibbonPanel::wxRibbonPanel()
+wxRibbonPanel::wxRibbonPanel() : m_expanded_dummy(NULL), m_expanded_panel(NULL)
 {
 }
 
 {
 }
 
@@ -576,15 +578,20 @@ bool wxRibbonPanel::Layout()
         return true;
     }
 
         return true;
     }
 
-    // TODO: Delegate to a sizer
+    // Get wxRibbonPanel client size
+    wxPoint position;
+    wxClientDC dc(this);
+    wxSize size = m_art->GetPanelClientSize(dc, this, GetSize(), &position);
 
 
-    // Common case of no sizer and single child taking up the entire panel
-    if(GetChildren().GetCount() == 1)
+    // If there is a sizer, use it instead
+    if ( GetSizer() )
+    {
+        GetSizer()->SetDimension(position.x, position.y, size.GetWidth(), size.GetHeight());
+    }
+    else if(GetChildren().GetCount() == 1)
     {
     {
+        // Common case of no sizer and single child taking up the entire panel
         wxWindow* child = GetChildren().Item(0)->GetData();
         wxWindow* child = GetChildren().Item(0)->GetData();
-        wxPoint position;
-        wxClientDC dc(this);
-        wxSize size = m_art->GetPanelClientSize(dc, this, GetSize(), &position);
         child->SetSize(position.x, position.y, size.GetWidth(), size.GetHeight());
     }
     return true;
         child->SetSize(position.x, position.y, size.GetWidth(), size.GetHeight());
     }
     return true;