]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/frame.cpp
setting clipping correctly
[wxWidgets.git] / src / msw / frame.cpp
index 800cd97d862c93fdfd0097c589608b6fdf389e47..9ede74a5ac7799bddc918f98bc76cad48e3be83e 100644 (file)
@@ -27,6 +27,7 @@
 #include "wx/frame.h"
 
 #ifndef WX_PRECOMP
+    #include "wx/msw/wrapcctl.h" // include <commctrl.h> "properly"
     #include "wx/app.h"
     #include "wx/menu.h"
     #include "wx/utils.h"
@@ -43,9 +44,6 @@
 
 #include "wx/msw/private.h"
 
-// include <commctrl.h> "properly"
-#include "wx/msw/wrapcctl.h"
-
 #if defined(__POCKETPC__) || defined(__SMARTPHONE__)
     #include <ole2.h>
     #include <aygshell.h>
@@ -250,7 +248,16 @@ void wxFrame::DoGetClientSize(int *x, int *y) const
 
     if ( y )
         *y -= pt.y;
-
+#if wxUSE_TOOLBAR
+    if( y )
+    {
+        wxToolBar *toolbar = GetToolBar();
+        if( toolbar && toolbar->HasFlag( wxTB_BOTTOM ) )
+        {
+            *y -= toolbar->GetClientSize().y;
+        }
+    }
+#endif
 #if wxUSE_STATUSBAR
     // adjust client area height to take the status bar into account
     if ( y )
@@ -317,6 +324,11 @@ void wxFrame::PositionStatusBar()
 
     int w, h;
     GetClientSize(&w, &h);
+#if wxUSE_TOOLBAR
+    wxToolBar *toolbar = GetToolBar();
+    if( toolbar && toolbar->HasFlag( wxTB_BOTTOM ) )
+        h += toolbar->GetClientRect().height;
+#endif
     int sw, sh;
     m_frameStatusBar->GetSize(&sw, &sh);
 
@@ -562,6 +574,7 @@ wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& nam
 
 void wxFrame::PositionToolBar()
 {
+    int x = 0, y = 0;
     wxToolBar *toolbar = GetToolBar();
     if ( toolbar && toolbar->IsShown() )
     {
@@ -583,9 +596,19 @@ void wxFrame::PositionToolBar()
             height -= statbar->GetClientSize().y;
         }
 #endif // wxUSE_STATUSBAR
-
-        int x = 0;
-        int y = 0;
+    int tx, ty, tw, th;
+    toolbar->GetPosition( &tx, &ty );
+    toolbar->GetSize( &tw, &th );
+    if( ( toolbar->GetWindowStyleFlag() & wxTB_HORIZONTAL ) || ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL ) )
+    {
+        x = 0;
+        y = 0;
+    }
+    else if( toolbar->GetWindowStyleFlag() & wxTB_BOTTOM )
+    {
+        x = 0;
+        y = height - th;
+    }
 #if defined(WINCE_WITH_COMMANDBAR)
         // We're using a commandbar - so we have to allow for it.
         if (GetMenuBar() && GetMenuBar()->GetCommandBar())
@@ -595,17 +618,21 @@ void wxFrame::PositionToolBar()
             y = rect.bottom - rect.top;
         }
 #endif
-
-        int tx, ty;
-        int tw, th;
-        toolbar->GetPosition(&tx, &ty);
-        toolbar->GetSize(&tw, &th);
-
+    if( ( toolbar->GetWindowStyleFlag() & wxTB_HORIZONTAL ) || ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL ) )
+    {
         // Adjust
         if (ty < 0 && (-ty == th))
             ty = 0;
         if (tx < 0 && (-tx == tw))
             tx = 0;
+    }
+    else if( toolbar->GetWindowStyleFlag() & wxTB_BOTTOM )
+    {
+        if( ty < 0 && ( -ty == th ) )
+            ty = height - th;
+        if( tx < 0 && ( -tx == tw ) )
+            tx = 0;
+    }
 
         int desiredW = tw;
         int desiredH = th;
@@ -1057,7 +1084,7 @@ wxPoint wxFrame::GetClientAreaOrigin() const
         {
             pt.x += w;
         }
-        else
+        else if( !( toolbar->GetWindowStyleFlag() & wxTB_BOTTOM ) )
         {
             pt.y += h;
         }