]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/wincmn.cpp
Commited latest SciTech changes into CVS. This includes updates to the
[wxWidgets.git] / src / common / wincmn.cpp
index c419076210298caa6bc7f76489373f115e987691..26eb1fb52532c97aa59e011937dc8ee2e33153d4 100644 (file)
@@ -127,14 +127,16 @@ void wxWindowBase::InitBase()
 #endif // wxUSE_VALIDATORS
 
     // use the system default colours
-    wxSystemSettings settings;
-
-    m_backgroundColour = settings.GetSystemColour(wxSYS_COLOUR_BTNFACE);
-    // m_foregroundColour = *wxBLACK;  // TODO take this from sys settings too?
+    m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_BTNFACE);
     m_foregroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOWTEXT);
 
-    // GRG, changed Mar/2000
-    m_font = settings.GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
+    // don't set the font here for wxMSW as we don't call WM_SETFONT here and
+    // so the font is *not* really set - but calls to SetFont() later won't do
+    // anything because m_font appears to be already set!
+#ifndef __WXMSW__
+    m_font = wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
+#endif // __WXMSW__
+
     // no style bits
     m_exStyle =
     m_windowStyle = 0;
@@ -162,6 +164,9 @@ void wxWindowBase::InitBase()
 #if wxUSE_CARET
     m_caret = (wxCaret *)NULL;
 #endif // wxUSE_CARET
+
+    // Whether we're using the current theme for this window (wxGTK only for now)
+    m_themeEnabled = FALSE;
 }
 
 // common part of window creation process
@@ -220,16 +225,6 @@ wxWindowBase::~wxWindowBase()
 
     wxASSERT_MSG( GetChildren().GetCount() == 0, wxT("children not destroyed") );
 
-    // make sure that there are no dangling pointers left pointing to us
-    wxPanel *panel = wxDynamicCast(GetParent(), wxPanel);
-    if ( panel )
-    {
-        if ( panel->GetLastFocus() == this )
-        {
-            panel->SetLastFocus((wxWindow *)NULL);
-        }
-    }
-
 #if wxUSE_CARET
     if ( m_caret )
         delete m_caret;
@@ -390,8 +385,33 @@ void wxWindowBase::Centre(int direction)
     xNew += posParent.x;
     yNew += posParent.y;
 
-    // move the centre of this window to this position
-    Move(xNew, yNew);
+    // Base size of the visible dimensions of the display
+    // to take into account the taskbar
+    wxRect rect = wxGetClientDisplayRect();
+    wxSize size (rect.width,rect.height);
+
+    if (posParent.x >= 0)  // if parent is on the main display
+    {
+        if (xNew < 0)
+            xNew = 0;
+        else if (xNew+width > size.x)
+            xNew = size.x-width-1;
+    }
+    if (posParent.y >= 0)  // if parent is on the main display
+    {
+        if (yNew+height > size.y)
+            yNew = size.y-height-1;
+
+        // Make certain that the title bar is initially visible
+        // always, even if this would push the bottom of the
+        // dialog of the visible area of the display
+        if (yNew < 0)
+            yNew = 0;
+    }
+
+    // move the window to this position (keeping the old size but using
+    // SetSize() and not Move() to allow xNew and/or yNew to be -1)
+    SetSize(xNew, yNew, width, height, wxSIZE_ALLOW_MINUS_ONE);
 }
 
 // fits the window around the children
@@ -399,7 +419,14 @@ void wxWindowBase::Fit()
 {
     if ( GetChildren().GetCount() > 0 )
     {
-        SetClientSize(DoGetBestSize());
+        wxSize size = DoGetBestSize();
+
+        // for compatibility with the old versions and because it really looks
+        // slightly more pretty like this, add a pad
+        size.x += 7;
+        size.y += 14;
+
+        SetClientSize(size);
     }
     //else: do nothing if we have no children
 }
@@ -418,7 +445,7 @@ wxSize wxWindowBase::DoGetBestSize() const
               node = node->GetNext() )
         {
             wxWindow *win = node->GetData();
-            if ( win->IsTopLevel() || wxDynamicCast(win, wxStatusBar) )
+            if ( win->IsTopLevel() || wxDynamicCast(win, wxStatusBar) || !win->IsShown())
             {
                 // dialogs and frames lie in different top level windows -
                 // don't deal with them here; as for the status bars, they
@@ -443,8 +470,7 @@ wxSize wxWindowBase::DoGetBestSize() const
                 maxY = wy + wh;
         }
 
-        // leave a margin
-        return wxSize(maxX + 7, maxY + 14);
+        return wxSize(maxX, maxY);
     }
     else
     {
@@ -634,7 +660,7 @@ bool wxWindowBase::SetFont(const wxFont& font)
     // don't try to set invalid font, always fall back to the default
     const wxFont& fontOk = font.Ok() ? font : *wxSWISS_FONT;
 
-    if ( (wxFont&)fontOk == m_font )
+    if ( fontOk == m_font )
     {
         // no change
         return FALSE;
@@ -1333,7 +1359,7 @@ void wxWindowBase::UpdateWindowUI()
 
         if ( event.GetSetText() )
         {
-            wxControl *control = wxDynamicCast(this, wxControl);
+            wxControl *control = wxDynamicThisCast(this, wxControl);
             if ( control )
             {
                 wxTextCtrl *text = wxDynamicCast(control, wxTextCtrl);
@@ -1345,7 +1371,7 @@ void wxWindowBase::UpdateWindowUI()
         }
 
 #if wxUSE_CHECKBOX
-        wxCheckBox *checkbox = wxDynamicCast(this, wxCheckBox);
+        wxCheckBox *checkbox = wxDynamicThisCast(this, wxCheckBox);
         if ( checkbox )
         {
             if ( event.GetSetChecked() )
@@ -1354,7 +1380,7 @@ void wxWindowBase::UpdateWindowUI()
 #endif // wxUSE_CHECKBOX
 
 #if wxUSE_RADIOBTN
-        wxRadioButton *radiobtn = wxDynamicCast(this, wxRadioButton);
+        wxRadioButton *radiobtn = wxDynamicThisCast(this, wxRadioButton);
         if ( radiobtn )
         {
             if ( event.GetSetChecked() )