]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/frame.cpp
use facename in wxFontRefData::Init() in Unicode build (part of patch 1671684)
[wxWidgets.git] / src / msw / frame.cpp
index 7cc30151f4b36184d26c658dcf7297eada3208ab..19a148224f910b3bc8e527aaa3999097cf38cb2c 100644 (file)
@@ -232,20 +232,22 @@ void wxFrame::DoSetClientSize(int width, int height)
     wxPoint pt = GetClientAreaOrigin();
     width += pt.x;
     height += pt.y;
+
 #if wxUSE_TOOLBAR
-    if ( width )
+    wxToolBar * const toolbar = GetToolBar();
+    if ( toolbar )
     {
-        wxToolBar *toolbar = GetToolBar();
-        if ( toolbar && toolbar->HasFlag(wxTB_RIGHT) )
-        {
-            width -= toolbar->GetClientSize().x;
-        }
-        if ( toolbar && toolbar->HasFlag( wxTB_BOTTOM ) )
+        if ( toolbar->HasFlag(wxTB_RIGHT | wxTB_BOTTOM) )
         {
-            height -= toolbar->GetClientSize().y;
+            const wxSize sizeTB = toolbar->GetSize();
+            if ( toolbar->HasFlag(wxTB_RIGHT) )
+                width -= sizeTB.x;
+            else // wxTB_BOTTOM
+                height -= sizeTB.y;
         }
+        //else: toolbar already taken into account by GetClientAreaOrigin()
     }
-#endif
+#endif // wxUSE_TOOLBAR
 
     wxTopLevelWindow::DoSetClientSize(width, height);
 }
@@ -262,24 +264,29 @@ 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;
-        }
-    }
-    if ( x )
+    wxToolBar * const toolbar = GetToolBar();
+    if ( toolbar )
     {
-        wxToolBar *toolbar = GetToolBar();
-        if ( toolbar && toolbar->HasFlag(wxTB_RIGHT) )
+        if ( toolbar->HasFlag(wxTB_RIGHT | wxTB_BOTTOM) )
         {
-            *x -= toolbar->GetClientSize().x;
+            const wxSize sizeTB = toolbar->GetSize();
+            if ( toolbar->HasFlag(wxTB_RIGHT) )
+            {
+                if ( x )
+                    *x -= sizeTB.x;
+            }
+            else // wxTB_BOTTOM
+            {
+                if ( y )
+                    *y -= sizeTB.y;
+            }
         }
+        //else: toolbar already taken into account by GetClientAreaOrigin()
     }
-#endif
+#endif // wxUSE_TOOLBAR
+
 #if wxUSE_STATUSBAR
     // adjust client area height to take the status bar into account
     if ( y )
@@ -346,20 +353,38 @@ 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;
-    if( toolbar && toolbar->HasFlag( wxTB_RIGHT ) )
-        w += toolbar->GetClientRect().width;
-#endif
+
     int sw, sh;
     m_frameStatusBar->GetSize(&sw, &sh);
 
+    int x = 0;
+#if wxUSE_TOOLBAR
+    wxToolBar * const toolbar = GetToolBar();
+    if ( toolbar && !toolbar->HasFlag(wxTB_TOP) )
+    {
+        const wxSize sizeTB = toolbar->GetSize();
+
+        if ( toolbar->HasFlag(wxTB_LEFT | wxTB_RIGHT) )
+        {
+            if ( toolbar->HasFlag(wxTB_LEFT) )
+                x -= sizeTB.x;
+
+            w += sizeTB.x;
+        }
+        else // wxTB_BOTTOM
+        {
+            // we need to position the status bar below the toolbar
+            h += sizeTB.y;
+        }
+    }
+    //else: no adjustments necessary for the toolbar on top
+#endif // wxUSE_TOOLBAR
+
     // Since we wish the status bar to be directly under the client area,
     // we use the adjusted sizes without using wxSIZE_NO_ADJUSTMENTS.
-    m_frameStatusBar->SetSize(0, h, w, sh);
+    m_frameStatusBar->SetSize(x, h, w, sh);
 }
+
 #endif // wxUSE_STATUSBAR
 
 #if wxUSE_MENUS_NATIVE
@@ -598,16 +623,13 @@ wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& nam
 
 void wxFrame::PositionToolBar()
 {
-    int x = 0, y = 0;
+    // TODO: we want to do something different in WinCE, because the toolbar
+    //       should be associated with the commandbar, instead of being
+    //       independent window.
+#if !defined(WINCE_WITHOUT_COMMANDBAR)
     wxToolBar *toolbar = GetToolBar();
     if ( toolbar && toolbar->IsShown() )
     {
-#if defined(WINCE_WITHOUT_COMMANDBAR)
-        // We want to do something different in WinCE, because
-        // the toolbar should be associated with the commandbar,
-        // and not an independent window.
-        // TODO
-#else
         // don't call our (or even wxTopLevelWindow) version because we want
         // the real (full) client area size, not excluding the tool/status bar
         int width, height;
@@ -620,24 +642,28 @@ void wxFrame::PositionToolBar()
             height -= statbar->GetClientSize().y;
         }
 #endif // wxUSE_STATUSBAR
-    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;
-    }
-    else if( toolbar->HasFlag(wxTB_RIGHT) )
-    {
-        x = width - tw;
-        y = 0;
-    }
+
+        int tx, ty, tw, th;
+        toolbar->GetPosition( &tx, &ty );
+        toolbar->GetSize( &tw, &th );
+
+        int x = 0, y = 0;
+        if ( toolbar->HasFlag(wxTB_BOTTOM) )
+        {
+            x = 0;
+            y = height - th;
+        }
+        else if ( toolbar->HasFlag(wxTB_RIGHT) )
+        {
+            x = width - tw;
+            y = 0;
+        }
+        else // left or top
+        {
+            x = 0;
+            y = 0;
+        }
+
 #if defined(WINCE_WITH_COMMANDBAR)
         // We're using a commandbar - so we have to allow for it.
         if (GetMenuBar() && GetMenuBar()->GetCommandBar())
@@ -646,29 +672,29 @@ void wxFrame::PositionToolBar()
             ::GetWindowRect((HWND) GetMenuBar()->GetCommandBar(), &rect);
             y = rect.bottom - rect.top;
         }
-#endif
-    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;
-    }
-        else if( toolbar->HasFlag(wxTB_RIGHT) )
+#endif // WINCE_WITH_COMMANDBAR
+
+        if ( toolbar->HasFlag(wxTB_BOTTOM) )
+        {
+            if ( ty < 0 && ( -ty == th ) )
+                ty = height - th;
+            if ( tx < 0 && (-tx == tw ) )
+                tx = 0;
+        }
+        else if ( toolbar->HasFlag(wxTB_RIGHT) )
         {
             if( ty < 0 && ( -ty == th ) )
                 ty = 0;
             if( tx < 0 && ( -tx == tw ) )
                 tx = width - tw;
         }
+        else // left or top
+        {
+            if (ty < 0 && (-ty == th))
+                ty = 0;
+            if (tx < 0 && (-tx == tw))
+                tx = 0;
+        }
 
         int desiredW = tw;
         int desiredH = th;
@@ -680,8 +706,6 @@ void wxFrame::PositionToolBar()
         else
         {
             desiredW = width;
-//            if ( toolbar->GetWindowStyleFlag() & wxTB_FLAT )
-//                desiredW -= 3;
         }
 
         // use the 'real' MSW position here, don't offset relativly to the
@@ -716,8 +740,8 @@ void wxFrame::PositionToolBar()
         if (tx != 0 || ty != 0 || widthChanging || heightChanging)
             toolbar->SetSize(x, y, desiredW, desiredH, wxSIZE_NO_ADJUSTMENTS);
 
-#endif // __WXWINCE__
     }
+#endif // !WINCE_WITH_COMMANDBAR
 }
 
 #endif // wxUSE_TOOLBAR
@@ -1110,19 +1134,18 @@ wxPoint wxFrame::GetClientAreaOrigin() const
 
 #if wxUSE_TOOLBAR && !defined(__WXUNIVERSAL__) && \
   (!defined(__WXWINCE__) || (_WIN32_WCE >= 400 && !defined(__POCKETPC__) && !defined(__SMARTPHONE__)))
-    wxToolBar *toolbar = GetToolBar();
+    wxToolBar * const toolbar = GetToolBar();
     if ( toolbar && toolbar->IsShown() )
     {
-        int w, h;
-        toolbar->GetSize(&w, &h);
+        const wxSize sizeTB = toolbar->GetSize();
 
-        if ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL )
+        if ( toolbar->HasFlag(wxTB_TOP) )
         {
-            pt.x += w;
+            pt.y += sizeTB.y;
         }
-        else if( ( toolbar->GetWindowStyleFlag() & wxTB_TOP ) )
+        else if ( toolbar->HasFlag(wxTB_LEFT) )
         {
-            pt.y += h;
+            pt.x += sizeTB.x;
         }
     }
 #endif // wxUSE_TOOLBAR