]> git.saurik.com Git - wxWidgets.git/commitdiff
* Implemented BestSize cache
authorRobin Dunn <robin@alldunn.com>
Thu, 24 Jun 2004 20:09:45 +0000 (20:09 +0000)
committerRobin Dunn <robin@alldunn.com>
Thu, 24 Jun 2004 20:09:45 +0000 (20:09 +0000)
* Added calls to InvalidateBestSize where things affecting BestSize
  are modified.  There are probably several other places where this
  still needs to be done...

* Added wxWindowBase::GetBestFittingSize that will merge the BestSize
  into the MinSize, (if any) and return the result.

* SetBestFittingSize will now only set the MinSize to the value that
  was passed to it, without merging in the BestSize

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@28010 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

55 files changed:
docs/latex/wx/window.tex
include/wx/bmpbuttn.h
include/wx/control.h
include/wx/window.h
src/common/bookctrl.cpp
src/common/ctrlcmn.cpp
src/common/sizer.cpp
src/common/tbarbase.cpp
src/common/wincmn.cpp
src/gtk/bmpbuttn.cpp
src/gtk/button.cpp
src/gtk/choice.cpp
src/gtk/combobox.cpp
src/gtk/control.cpp
src/gtk/gauge.cpp
src/gtk/listbox.cpp
src/gtk/radiobox.cpp
src/gtk/spinbutt.cpp
src/gtk/spinctrl.cpp
src/gtk/statbmp.cpp
src/gtk/stattext.cpp
src/gtk/tbargtk.cpp
src/gtk/textctrl.cpp
src/gtk/tglbtn.cpp
src/gtk1/bmpbuttn.cpp
src/gtk1/button.cpp
src/gtk1/choice.cpp
src/gtk1/combobox.cpp
src/gtk1/control.cpp
src/gtk1/gauge.cpp
src/gtk1/listbox.cpp
src/gtk1/radiobox.cpp
src/gtk1/spinbutt.cpp
src/gtk1/spinctrl.cpp
src/gtk1/statbmp.cpp
src/gtk1/stattext.cpp
src/gtk1/tbargtk.cpp
src/gtk1/textctrl.cpp
src/gtk1/tglbtn.cpp
src/mac/carbon/bmpbuttn.cpp
src/mac/carbon/listbox.cpp
src/mac/carbon/statbmp.cpp
src/mac/carbon/stattext.cpp
src/mac/carbon/toolbar.cpp
src/mac/classic/bmpbuttn.cpp
src/mac/classic/listbox.cpp
src/mac/classic/statbmp.cpp
src/mac/classic/stattext.cpp
src/mac/classic/toolbar.cpp
src/msw/bmpbuttn.cpp
src/msw/listbox.cpp
src/msw/statbmp.cpp
src/msw/stattext.cpp
src/msw/tbar95.cpp
wxPython/src/_window.i

index 4386be9e9ba4634b931abf0e00c6201f29371b3d..e69f4930249896bb1b06abe3fecd45b6f628016e 100644 (file)
@@ -701,6 +701,19 @@ Returns the background colour of the window.
 \helpref{wxWindow::GetForegroundColour}{wxwindowgetforegroundcolour}
 
 
+\membersection{wxWindow::GetBestFittingSize}\label{wxwindowgetbestfittingsize}
+
+\constfunc{wxSize}{GetBestFittingSize}{\void}
+
+Merges the window's best size into the min size and returns the result.
+
+\wxheading{See also}
+
+\helpref{wxWindow::GetBestSize}{wxwindowgetbestsize},\rtfsp
+\helpref{wxWindow::SetBestFittingSize}{wxwindowsetbestfittingsize},\rtfsp
+\helpref{wxWindow::SetSizeHints}{wxwindowsetsizehints}
+
+
 \membersection{wxWindow::GetBestSize}\label{wxwindowgetbestsize}
 
 \constfunc{wxSize}{GetBestSize}{\void}
@@ -2390,18 +2403,23 @@ applications on the system.
 \helpref{wxWindow::Refresh}{wxwindowrefresh},\rtfsp
 \helpref{wxEraseEvent}{wxeraseevent}
 
+
 \membersection{wxWindow::SetBestFittingSize}\label{wxwindowsetbestfittingsize}
 
 \func{void}{SetBestFittingSize}{\param{const wxSize& }{size = wxDefaultSize}}
 
 A {\it smart} SetSize that will fill in default size components with the
-window's {\it best} size values.  Also set's the minsize for use with
-sizers.
+window's {\it best} size values.  Also sets the window's minsize to
+the value passed in for use with sizers.  This means that if a full or
+partial size is passed to this function then the sizers will use that
+size instead of the results of GetBestSize to determine the minimum
+needs of the window for layout.
 
 \wxheading{See also}
 
-\helpref{wxWindow::SetSize}{wxwindowsetsize}
-\helpref{wxWindow::GetBestSize}{wxwindowgetbestsize}
+\helpref{wxWindow::SetSize}{wxwindowsetsize},\rtfsp
+\helpref{wxWindow::GetBestSize}{wxwindowgetbestsize},\rtfsp
+\helpref{wxWindow::GetBestFittingSize}{wxwindowgetbestfittingsize},\rtfsp
 \helpref{wxWindow::SetSizeHints}{wxwindowsetsizehints}
 
 
index c874c9d9dabed5ef9b775c8b66b00d5e78099cc6..54a38c432248daccb7db01d3e98db7b11a94d8e6 100644 (file)
@@ -67,7 +67,7 @@ public:
 
 protected:
     // function called when any of the bitmaps changes
-    virtual void OnSetBitmap() { }
+    virtual void OnSetBitmap() { InvalidateBestSize(); }
 
     // the bitmaps for various states
     wxBitmap m_bmpNormal,
index 6552443ecdedfa08aa515d78e6686feb16555483..b6136bd44950d80aac5c12d601cf5f37a5025140 100644 (file)
@@ -63,6 +63,9 @@ public:
     // if the button was clicked)
     virtual void Command(wxCommandEvent &event);
 
+    virtual void SetLabel( const wxString &label );
+    virtual bool SetFont(const wxFont& font);
+
 protected:
     // creates the control (calls wxWindowBase::CreateBase inside) and adds it
     // to the list of parents children
index 97b35334c0b8cbd4035b0b1e7d87dc03a519ea16..566ba6c19d06aa55e6712a7a9bd051278e7babef 100644 (file)
@@ -230,9 +230,6 @@ public:
     void Move(const wxPoint& pt, int flags = wxSIZE_USE_EXISTING)
         { Move(pt.x, pt.y, flags); }
 
-    // A 'Smart' SetSize that will fill in default size values with 'best' size
-    void SetBestFittingSize(const wxSize& size=wxDefaultSize);
-
         // Z-order
     virtual void Raise() = 0;
     virtual void Lower() = 0;
@@ -297,17 +294,29 @@ public:
     }
 
         // get the size best suited for the window (in fact, minimal
-        // acceptable size using which it will still look "nice")
-    wxSize GetBestSize() const { return DoGetBestSize(); }
+        // acceptable size using which it will still look "nice" in
+        // most situations)
+    wxSize GetBestSize() const
+    {
+        if (m_bestSizeCache.IsFullySpecified())
+            return m_bestSizeCache;
+        return DoGetBestSize();
+    }
     void GetBestSize(int *w, int *h) const
     {
-        wxSize s = DoGetBestSize();
+        wxSize s = GetBestSize();
         if ( w )
             *w = s.x;
         if ( h )
             *h = s.y;
     }
 
+        // reset the cached best size value so it will be recalculated the
+        // next time it is needed.
+    void InvalidateBestSize() { m_bestSizeCache = wxDefaultSize; }
+    void CacheBestSize(const wxSize& size) const
+        { wxConstCast(this, wxWindowBase)->m_bestSizeCache = size; }
+    
         // There are times (and windows) where 'Best' size and 'Min' size
         // are vastly out of sync.  This should be remedied somehow, but in
         // the meantime, this method will return the larger of BestSize
@@ -315,10 +324,19 @@ public:
         // MinSize hint.
     wxSize GetAdjustedBestSize() const
     {
-        wxSize  s( DoGetBestSize() );
+        wxSize  s( GetBestSize() );
         return wxSize( wxMax( s.x, GetMinWidth() ), wxMax( s.y, GetMinHeight() ) );
     }
 
+        // This function will merge the window's best size into the window's
+        // minimum size, giving priority to the min size components, and
+        // returns the results.
+    wxSize GetBestFittingSize() const;
+    
+        // A 'Smart' SetSize that will fill in default size values with 'best'
+        // size.  Sets the minsize to what was passed in.
+    void SetBestFittingSize(const wxSize& size=wxDefaultSize);
+
         // the generic centre function - centers the window on parent by`
         // default or on screen if it doesn't have parent or
         // wxCENTER_ON_SCREEN flag is given
@@ -1137,11 +1155,15 @@ protected:
     static int WidthDefault(int w) { return w == -1 ? 20 : w; }
     static int HeightDefault(int h) { return h == -1 ? 20 : h; }
 
+
+    // Used to save the results of DoGetBestSize so it doesn't need to be
+    // recalculated each time the value is needed.
+    wxSize m_bestSizeCache;
+
     // keep the old name for compatibility, at least until all the internal
     // usages of it are changed to SetBestFittingSize
     void SetBestSize(const wxSize& size) { SetBestFittingSize(size); }
         
-
     // set the initial window size if none is given (i.e. at least one of the
     // components of the size passed to ctor/Create() is -1)
     //
@@ -1151,6 +1173,7 @@ protected:
     // can be accurately calculated
     virtual void SetInitialBestSize(const wxSize& WXUNUSED(size)) {}
 
+    
 
     // more pure virtual functions
     // ---------------------------
index b04136183e26f69943df4b3cc2a638dd66e55c05..bf8a83343440d814fcd28e01348a0eb7a880554d 100644 (file)
@@ -130,7 +130,9 @@ wxSize wxBookCtrl::DoGetBestSize() const
 
     // convert display area to window area, adding the size neccessary for the
     // tabs
-    return CalcSizeFromPage(bestSize);
+    wxSize best = CalcSizeFromPage(bestSize);
+    CacheBestSize(best);
+    return best;
 }
 
 // ----------------------------------------------------------------------------
index 242efdca1f1c05ec55bcd4904cf0cc9bfe1bb29e..437aea4a0a1efd7ae712d1ea8d0a6d6e49d5bf82 100644 (file)
@@ -116,6 +116,19 @@ void wxControlBase::InitCommandEvent(wxCommandEvent& event) const
     }
 }
 
+
+void wxControlBase::SetLabel( const wxString &label )
+{
+    InvalidateBestSize();
+    wxWindow::SetLabel(label);   
+}
+
+bool wxControlBase::SetFont(const wxFont& font)
+{
+    InvalidateBestSize();
+    return wxWindow::SetFont(font);
+}
+
 // ----------------------------------------------------------------------------
 // wxStaticBitmap
 // ----------------------------------------------------------------------------
@@ -129,12 +142,15 @@ wxStaticBitmapBase::~wxStaticBitmapBase()
 
 wxSize wxStaticBitmapBase::DoGetBestSize() const
 {
+    wxSize best;
     wxBitmap bmp = GetBitmap();
     if ( bmp.Ok() )
-        return wxSize(bmp.GetWidth(), bmp.GetHeight());
-
-    // this is completely arbitrary
-    return wxSize(16, 16);
+        best = wxSize(bmp.GetWidth(), bmp.GetHeight());
+    else
+        // this is completely arbitrary
+        best = wxSize(16, 16);
+    CacheBestSize(best);
+    return best;
 }
 
 #endif // wxUSE_STATBMP
index de1f1c21641b40c352e84ed8d7f9c0b97145ce55..fb81a60dafa5d53bfb093a425ddde285eec8cbff 100644 (file)
@@ -192,18 +192,9 @@ wxSize wxSizerItem::CalcMin()
         if ( IsWindow() && !(m_flag & wxFIXED_MINSIZE) )
         {
             // Since the size of the window may change during runtime, we
-            // should use the current minimal size.  If there is a MinSize,
-            // use it, otherwise use the BestSize.
-            wxSize min  = m_window->GetMinSize();
-            if (min.x == -1 || min.y == -1)
-            {
-                wxSize best = m_window->GetBestSize();
-                if (min.x == -1) min.x =  best.x;
-                if (min.y == -1) min.y =  best.y;
-            }
-            m_minSize = min;
+            // should use the current minimal/best size.
+            m_minSize = m_window->GetBestFittingSize();
         }
-
         ret = m_minSize;
     }
 
index a2045d0f0cb83100c94b0eb4df98921deeb40bf9..2496b8a9749f95617a530d51c375fd42025ffa78 100644 (file)
@@ -141,6 +141,7 @@ wxToolBarToolBase *wxToolBarBase::DoAddTool(int id,
                                             wxCoord WXUNUSED(xPos),
                                             wxCoord WXUNUSED(yPos))
 {
+    InvalidateBestSize();
     return InsertTool(GetToolsCount(), id, label, bitmap, bmpDisabled,
                       kind, shortHelp, longHelp, clientData);
 }
index b62896002ce2ec7ee779de97615613db93d68bc2..7c4c0ce62c6c2917c6ef8718c6819f27efe16a7d 100644 (file)
@@ -125,6 +125,9 @@ wxWindowBase::wxWindowBase()
     m_minHeight =
     m_maxHeight = wxDefaultSize.y;
 
+    // invalidiated cache value
+    m_bestSizeCache = wxDefaultSize;
+
     // window are created enabled and visible by default
     m_isShown =
     m_isEnabled = true;
@@ -482,7 +485,7 @@ void wxWindowBase::Fit()
 {
     if ( GetChildren().GetCount() > 0 )
     {
-        SetClientSize(DoGetBestSize());
+        SetClientSize(GetBestSize());
     }
     //else: do nothing if we have no children
 }
@@ -620,32 +623,36 @@ wxSize wxWindowBase::DoGetBestSize() const
     }
 }
 
-void wxWindowBase::SetBestFittingSize(const wxSize& size)
+
+wxSize wxWindowBase::GetBestFittingSize() const
 {
-    // If the given size is incomplete then merge with the best size.
-    wxSize sizeBest;
-    if ( size.x == wxDefaultSize.x || size.y == wxDefaultSize.y )
+    // merge the best size with the min size, giving priority to the min size
+    wxSize min = GetMinSize();
+    if (min.x == wxDefaultCoord || min.y == wxDefaultCoord)
     {
-        sizeBest = DoGetBestSize();
-        if ( size.x != wxDefaultSize.x )
-            sizeBest.x = size.x;
-        if ( size.y != wxDefaultSize.y )
-            sizeBest.y = size.y;
-    }
-    else // have complete explicit size
-    {
-        sizeBest = size;
+        wxSize best = GetBestSize();
+        if (min.x == wxDefaultCoord) min.x =  best.x;
+        if (min.y == wxDefaultCoord) min.y =  best.y;
     }
+    return min;
+}
 
-    // Change the size if needed
-    if (GetSize() != sizeBest)
-        SetSize(sizeBest);
 
-    // don't shrink the control below its best size
-    m_minWidth = sizeBest.x;
-    m_minHeight = sizeBest.y;
+void wxWindowBase::SetBestFittingSize(const wxSize& size)
+{
+    // Set the min size to the size passed in.  This will usually either be
+    // wxDefaultSize or the size passed to this window's ctor/Create function.
+    SetMinSize(size);
+
+    // Merge the size with the best size if needed
+    wxSize best = GetBestFittingSize();
+    
+    // If the current size doesn't match then change it
+    if (GetSize() != best)
+        SetSize(best);
 }
 
+
 // by default the origin is not shifted
 wxPoint wxWindowBase::GetClientAreaOrigin() const
 {
index db117650134db117c4d6c76b80e2058b8df09813..34f5bab8900580bc87501f81f22cb9232176b5b7 100644 (file)
@@ -205,6 +205,8 @@ void wxBitmapButton::OnSetBitmap()
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid bitmap button") );
 
+    InvalidateBestSize();
+    
     wxBitmap the_one;
     if (!m_isEnabled)
         the_one = m_bmpDisabled;
@@ -258,6 +260,7 @@ wxSize wxBitmapButton::DoGetBestSize() const
         best.x = m_bmpNormal.GetWidth()+border;
         best.y = m_bmpNormal.GetHeight()+border;
     }
+    CacheBestSize(best);
     return best;
 }
 
index d64273b78006e960f02070aa9024b0b13a1ada40..d42f359e199c257ffdf74300ed11dc15099802d4 100644 (file)
@@ -232,6 +232,7 @@ wxSize wxButton::DoGetBestSize() const
         if (ret.x < 80) ret.x = 80;
     }
 
+    CacheBestSize(ret);
     return ret;
 }
 
index 28d895dd2e1dc9b27b7836c66f01909e1260926b..4bef419b40e38abd9a46a89faf4c5eca00fed345 100644 (file)
@@ -564,6 +564,7 @@ wxSize wxChoice::DoGetBestSize() const
     if (ret.y <= 18)
         ret.y = 8 + GetCharHeight();
 
+    CacheBestSize(ret);
     return ret;
 }
 
index 2ddf6fcf952de835d301dc5fd95f43bcaf2678d0..acf403570b26e2d311fe1b1a4032098750122294 100644 (file)
@@ -773,6 +773,8 @@ wxSize wxComboBox::DoGetBestSize() const
     // empty combobox should have some reasonable default size too
     if ( ret.x < 100 )
         ret.x = 100;
+
+    CacheBestSize(ret);
     return ret;
 }
 
index 41f5cc4ea1737f5e7794e4ab4a323be70585be2f..f8ea0c9dc335709e6d3f88b020528f65b7eb248b 100644 (file)
@@ -66,6 +66,7 @@ void wxControl::SetLabel( const wxString &label )
         }
         m_label << *pc;
     }
+    InvalidateBestSize();    
 }
 
 wxString wxControl::GetLabel() const
@@ -85,7 +86,9 @@ wxSize wxControl::DoGetBestSize() const
     (* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_widget) )->size_request )
         (m_widget, &req );
 
-    return wxSize(req.width, req.height);
+    wxSize best(req.width, req.height);
+    CacheBestSize(best);
+    return best;
 }
 
 
index 90aad2ca5b65d2f46491baef58f2bf65d6da0986..985c42bcc3dcd148f6cb3ca79fd30fcf38773eea 100644 (file)
@@ -72,10 +72,13 @@ void wxGauge::DoSetGauge()
 
 wxSize wxGauge::DoGetBestSize() const
 {
+    wxSize best;
     if (HasFlag(wxGA_VERTICAL))
-        return wxSize(28, 100);
+        best = wxSize(28, 100);
     else
-        return wxSize(100, 28);
+        best = wxSize(100, 28);
+    CacheBestSize(best);
+    return best;
 }
 
 void wxGauge::SetRange( int range )
index 15c355869d815c2143e9df1f74a0cbd0825ca56e..b2d8307151c4dde0c80eca86ad50dc16b46ea0b8 100644 (file)
@@ -439,6 +439,8 @@ void wxListBox::DoInsertItems(const wxArrayString& items, int pos)
     wxASSERT_MSG( m_clientList.GetCount() == (size_t)GetCount(),
                   wxT("bug in client data management") );
 
+    InvalidateBestSize();
+
     GList *children = m_list->children;
     int length = g_list_length(children);
 
@@ -495,6 +497,8 @@ void wxListBox::DoInsertItems(const wxArrayString& items, int pos)
 
 int wxListBox::DoAppend( const wxString& item )
 {
+    InvalidateBestSize();
+
     if (m_strings)
     {
         // need to determine the index
@@ -1076,7 +1080,9 @@ wxSize wxListBox::DoGetBestSize() const
     // make it too small neither
     lbHeight = (cy+4) * wxMin(wxMax(GetCount(), 3), 10);
 
-    return wxSize(lbWidth, lbHeight);
+    wxSize best(lbWidth, lbHeight);
+    CacheBestSize(best);        
+    return best;
 }
 
 void wxListBox::FixUpMouseEvent(GtkWidget *widget, wxCoord& x, wxCoord& y)
index ea1eee523009f2267e4b1d760e14cecc3b71a6bd..a2f712302d7c6bd9b1b82a17423db52f151a94f8 100644 (file)
@@ -286,6 +286,7 @@ wxSize wxRadioBox::DoGetBestSize() const
     if (req.width > size.x)
         size.x = req.width;
 
+    CacheBestSize(size);
     return size;
 }
 
index a62d2c121e62f90a8f2dbb0dc9338421d3a54fb3..4ac29c9c25293162939e072286cef309c8dc3e65 100644 (file)
@@ -227,7 +227,9 @@ bool wxSpinButton::IsOwnGtkWindow( GdkWindow *window )
 
 wxSize wxSpinButton::DoGetBestSize() const
 {
-    return wxSize(15, 26); // FIXME
+    wxSize best(15, 26); // FIXME
+    CacheBestSize(best);
+    return best;
 }
 
 // static
index 9390128cf0e2cd611e2c34472949b6765f1720bc..18e8e0dff21043ba40bf6b1bd96044244fd19225 100644 (file)
@@ -301,7 +301,9 @@ bool wxSpinCtrl::IsOwnGtkWindow( GdkWindow *window )
 wxSize wxSpinCtrl::DoGetBestSize() const
 {
     wxSize ret( wxControl::DoGetBestSize() );
-    return wxSize(95, ret.y);
+    wxSize best(95, ret.y);
+    CacheBestSize(best);
+    return best;
 }
 
 // static
index 48a8dafe73e7241e5735e3dacecd62cb3755b5d3..6ec5169750287457e07e8433c6b49035c6150010 100644 (file)
@@ -113,7 +113,8 @@ void wxStaticBitmap::SetBitmap( const wxBitmap &bitmap )
             gtk_pixmap_set( GTK_PIXMAP(m_widget), m_bitmap.GetPixmap(), mask );
         }
 
-        SetBestSize(wxSize(bitmap.GetWidth(), bitmap.GetHeight()));
+        InvalidateBestSize();
+        SetSize(GetBestSize());
     }
 }
 
index d659e8cc167cbb7ab1acc629beabdbe2226d5a48..c245fd315c96c06415602ad9195a9dd8d63754fc 100644 (file)
@@ -150,8 +150,8 @@ void wxStaticText::SetLabel( const wxString &label )
     // adjust the label size to the new label unless disabled
     if (!HasFlag(wxST_NO_AUTORESIZE))
     {
+        InvalidateBestSize();
         SetSize( GetBestSize() );
-        SetSizeHints(GetSize());
     }
 }
 
@@ -162,8 +162,8 @@ bool wxStaticText::SetFont( const wxFont &font )
     // adjust the label size to the new label unless disabled
     if (!HasFlag(wxST_NO_AUTORESIZE))
     {
+        InvalidateBestSize();
         SetSize( GetBestSize() );
-        SetSizeHints(GetSize());
     }
     return ret;
 }
@@ -183,7 +183,9 @@ wxSize wxStaticText::DoGetBestSize() const
     (* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_widget) )->size_request )
         (m_widget, &req );
 
-    return wxSize(req.width, req.height);
+    wxSize best(req.width, req.height);
+    CacheBestSize(best);
+    return best;
 }
 
 bool wxStaticText::SetForegroundColour(const wxColour& colour)
index f94361eaa4a0b016c56316835de1784af1cb73ae..16ead462ace489c7df4caedfb592608390d6fd65 100644 (file)
@@ -501,6 +501,7 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase)
         (m_widget, &req );
     m_width = req.width + m_xMargin;
     m_height = req.height + 2*m_yMargin;
+    InvalidateBestSize();
 
     return TRUE;
 }
@@ -522,6 +523,7 @@ bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase)
         //case wxTOOL_STYLE_SEPARATOR: -- nothing to do
     }
 
+    InvalidateBestSize();
     return TRUE;
 }
 
index 2d5b6460a5d7a1c651250556fe875bbbecb90585..5f80c5d19bb7279e9281e85feefec6c1894c028f 100644 (file)
@@ -1633,7 +1633,9 @@ wxSize wxTextCtrl::DoGetBestSize() const
 {
     // FIXME should be different for multi-line controls...
     wxSize ret( wxControl::DoGetBestSize() );
-    return wxSize(80, ret.y);
+    wxSize best(80, ret.y);
+    CacheBestSize(best);
+    return best;
 }
 
 // ----------------------------------------------------------------------------
index 8ac7ec5a3c6364728ce0f8ed57194b0976e3f193..cb4db530d77f58353ebe700b0b29a56f0c4bd5f3 100644 (file)
@@ -123,6 +123,7 @@ void wxToggleBitmapButton::SetLabel(const wxBitmap& label)
     wxCHECK_RET(m_widget != NULL, wxT("invalid toggle button"));
 
     m_bitmap = label;
+    InvalidateBestSize();
     
     OnSetBitmap();
 }
@@ -192,7 +193,7 @@ void wxToggleBitmapButton::OnInternalIdle()
         UpdateWindowUI(wxUPDATE_UI_FROMIDLE);
 }
 
-// wxSize DoGetBestSize() const
+
 // Get the "best" size for this control.
 wxSize wxToggleBitmapButton::DoGetBestSize() const
 {
@@ -204,6 +205,7 @@ wxSize wxToggleBitmapButton::DoGetBestSize() const
         best.x = m_bitmap.GetWidth()+border;
         best.y = m_bitmap.GetHeight()+border;
     }
+    CacheBestSize(best);
     return best;
 }
 
@@ -332,7 +334,7 @@ void wxToggleButton::OnInternalIdle()
         UpdateWindowUI(wxUPDATE_UI_FROMIDLE);
 }
 
-// wxSize DoGetBestSize() const
+
 // Get the "best" size for this control.
 wxSize wxToggleButton::DoGetBestSize() const
 {
@@ -343,8 +345,8 @@ wxSize wxToggleButton::DoGetBestSize() const
         if (ret.x < 80) ret.x = 80;
     }
     
-
-   return ret;
+    CacheBestSize(ret);
+    return ret;
 }
 
 // static
index db117650134db117c4d6c76b80e2058b8df09813..34f5bab8900580bc87501f81f22cb9232176b5b7 100644 (file)
@@ -205,6 +205,8 @@ void wxBitmapButton::OnSetBitmap()
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid bitmap button") );
 
+    InvalidateBestSize();
+    
     wxBitmap the_one;
     if (!m_isEnabled)
         the_one = m_bmpDisabled;
@@ -258,6 +260,7 @@ wxSize wxBitmapButton::DoGetBestSize() const
         best.x = m_bmpNormal.GetWidth()+border;
         best.y = m_bmpNormal.GetHeight()+border;
     }
+    CacheBestSize(best);
     return best;
 }
 
index d64273b78006e960f02070aa9024b0b13a1ada40..d42f359e199c257ffdf74300ed11dc15099802d4 100644 (file)
@@ -232,6 +232,7 @@ wxSize wxButton::DoGetBestSize() const
         if (ret.x < 80) ret.x = 80;
     }
 
+    CacheBestSize(ret);
     return ret;
 }
 
index 28d895dd2e1dc9b27b7836c66f01909e1260926b..4bef419b40e38abd9a46a89faf4c5eca00fed345 100644 (file)
@@ -564,6 +564,7 @@ wxSize wxChoice::DoGetBestSize() const
     if (ret.y <= 18)
         ret.y = 8 + GetCharHeight();
 
+    CacheBestSize(ret);
     return ret;
 }
 
index 2ddf6fcf952de835d301dc5fd95f43bcaf2678d0..acf403570b26e2d311fe1b1a4032098750122294 100644 (file)
@@ -773,6 +773,8 @@ wxSize wxComboBox::DoGetBestSize() const
     // empty combobox should have some reasonable default size too
     if ( ret.x < 100 )
         ret.x = 100;
+
+    CacheBestSize(ret);
     return ret;
 }
 
index 41f5cc4ea1737f5e7794e4ab4a323be70585be2f..f8ea0c9dc335709e6d3f88b020528f65b7eb248b 100644 (file)
@@ -66,6 +66,7 @@ void wxControl::SetLabel( const wxString &label )
         }
         m_label << *pc;
     }
+    InvalidateBestSize();    
 }
 
 wxString wxControl::GetLabel() const
@@ -85,7 +86,9 @@ wxSize wxControl::DoGetBestSize() const
     (* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_widget) )->size_request )
         (m_widget, &req );
 
-    return wxSize(req.width, req.height);
+    wxSize best(req.width, req.height);
+    CacheBestSize(best);
+    return best;
 }
 
 
index 90aad2ca5b65d2f46491baef58f2bf65d6da0986..985c42bcc3dcd148f6cb3ca79fd30fcf38773eea 100644 (file)
@@ -72,10 +72,13 @@ void wxGauge::DoSetGauge()
 
 wxSize wxGauge::DoGetBestSize() const
 {
+    wxSize best;
     if (HasFlag(wxGA_VERTICAL))
-        return wxSize(28, 100);
+        best = wxSize(28, 100);
     else
-        return wxSize(100, 28);
+        best = wxSize(100, 28);
+    CacheBestSize(best);
+    return best;
 }
 
 void wxGauge::SetRange( int range )
index 15c355869d815c2143e9df1f74a0cbd0825ca56e..b2d8307151c4dde0c80eca86ad50dc16b46ea0b8 100644 (file)
@@ -439,6 +439,8 @@ void wxListBox::DoInsertItems(const wxArrayString& items, int pos)
     wxASSERT_MSG( m_clientList.GetCount() == (size_t)GetCount(),
                   wxT("bug in client data management") );
 
+    InvalidateBestSize();
+
     GList *children = m_list->children;
     int length = g_list_length(children);
 
@@ -495,6 +497,8 @@ void wxListBox::DoInsertItems(const wxArrayString& items, int pos)
 
 int wxListBox::DoAppend( const wxString& item )
 {
+    InvalidateBestSize();
+
     if (m_strings)
     {
         // need to determine the index
@@ -1076,7 +1080,9 @@ wxSize wxListBox::DoGetBestSize() const
     // make it too small neither
     lbHeight = (cy+4) * wxMin(wxMax(GetCount(), 3), 10);
 
-    return wxSize(lbWidth, lbHeight);
+    wxSize best(lbWidth, lbHeight);
+    CacheBestSize(best);        
+    return best;
 }
 
 void wxListBox::FixUpMouseEvent(GtkWidget *widget, wxCoord& x, wxCoord& y)
index ea1eee523009f2267e4b1d760e14cecc3b71a6bd..a2f712302d7c6bd9b1b82a17423db52f151a94f8 100644 (file)
@@ -286,6 +286,7 @@ wxSize wxRadioBox::DoGetBestSize() const
     if (req.width > size.x)
         size.x = req.width;
 
+    CacheBestSize(size);
     return size;
 }
 
index a62d2c121e62f90a8f2dbb0dc9338421d3a54fb3..4ac29c9c25293162939e072286cef309c8dc3e65 100644 (file)
@@ -227,7 +227,9 @@ bool wxSpinButton::IsOwnGtkWindow( GdkWindow *window )
 
 wxSize wxSpinButton::DoGetBestSize() const
 {
-    return wxSize(15, 26); // FIXME
+    wxSize best(15, 26); // FIXME
+    CacheBestSize(best);
+    return best;
 }
 
 // static
index 9390128cf0e2cd611e2c34472949b6765f1720bc..18e8e0dff21043ba40bf6b1bd96044244fd19225 100644 (file)
@@ -301,7 +301,9 @@ bool wxSpinCtrl::IsOwnGtkWindow( GdkWindow *window )
 wxSize wxSpinCtrl::DoGetBestSize() const
 {
     wxSize ret( wxControl::DoGetBestSize() );
-    return wxSize(95, ret.y);
+    wxSize best(95, ret.y);
+    CacheBestSize(best);
+    return best;
 }
 
 // static
index 48a8dafe73e7241e5735e3dacecd62cb3755b5d3..6ec5169750287457e07e8433c6b49035c6150010 100644 (file)
@@ -113,7 +113,8 @@ void wxStaticBitmap::SetBitmap( const wxBitmap &bitmap )
             gtk_pixmap_set( GTK_PIXMAP(m_widget), m_bitmap.GetPixmap(), mask );
         }
 
-        SetBestSize(wxSize(bitmap.GetWidth(), bitmap.GetHeight()));
+        InvalidateBestSize();
+        SetSize(GetBestSize());
     }
 }
 
index d659e8cc167cbb7ab1acc629beabdbe2226d5a48..c245fd315c96c06415602ad9195a9dd8d63754fc 100644 (file)
@@ -150,8 +150,8 @@ void wxStaticText::SetLabel( const wxString &label )
     // adjust the label size to the new label unless disabled
     if (!HasFlag(wxST_NO_AUTORESIZE))
     {
+        InvalidateBestSize();
         SetSize( GetBestSize() );
-        SetSizeHints(GetSize());
     }
 }
 
@@ -162,8 +162,8 @@ bool wxStaticText::SetFont( const wxFont &font )
     // adjust the label size to the new label unless disabled
     if (!HasFlag(wxST_NO_AUTORESIZE))
     {
+        InvalidateBestSize();
         SetSize( GetBestSize() );
-        SetSizeHints(GetSize());
     }
     return ret;
 }
@@ -183,7 +183,9 @@ wxSize wxStaticText::DoGetBestSize() const
     (* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_widget) )->size_request )
         (m_widget, &req );
 
-    return wxSize(req.width, req.height);
+    wxSize best(req.width, req.height);
+    CacheBestSize(best);
+    return best;
 }
 
 bool wxStaticText::SetForegroundColour(const wxColour& colour)
index f94361eaa4a0b016c56316835de1784af1cb73ae..16ead462ace489c7df4caedfb592608390d6fd65 100644 (file)
@@ -501,6 +501,7 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase)
         (m_widget, &req );
     m_width = req.width + m_xMargin;
     m_height = req.height + 2*m_yMargin;
+    InvalidateBestSize();
 
     return TRUE;
 }
@@ -522,6 +523,7 @@ bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase)
         //case wxTOOL_STYLE_SEPARATOR: -- nothing to do
     }
 
+    InvalidateBestSize();
     return TRUE;
 }
 
index 2d5b6460a5d7a1c651250556fe875bbbecb90585..5f80c5d19bb7279e9281e85feefec6c1894c028f 100644 (file)
@@ -1633,7 +1633,9 @@ wxSize wxTextCtrl::DoGetBestSize() const
 {
     // FIXME should be different for multi-line controls...
     wxSize ret( wxControl::DoGetBestSize() );
-    return wxSize(80, ret.y);
+    wxSize best(80, ret.y);
+    CacheBestSize(best);
+    return best;
 }
 
 // ----------------------------------------------------------------------------
index 8ac7ec5a3c6364728ce0f8ed57194b0976e3f193..cb4db530d77f58353ebe700b0b29a56f0c4bd5f3 100644 (file)
@@ -123,6 +123,7 @@ void wxToggleBitmapButton::SetLabel(const wxBitmap& label)
     wxCHECK_RET(m_widget != NULL, wxT("invalid toggle button"));
 
     m_bitmap = label;
+    InvalidateBestSize();
     
     OnSetBitmap();
 }
@@ -192,7 +193,7 @@ void wxToggleBitmapButton::OnInternalIdle()
         UpdateWindowUI(wxUPDATE_UI_FROMIDLE);
 }
 
-// wxSize DoGetBestSize() const
+
 // Get the "best" size for this control.
 wxSize wxToggleBitmapButton::DoGetBestSize() const
 {
@@ -204,6 +205,7 @@ wxSize wxToggleBitmapButton::DoGetBestSize() const
         best.x = m_bitmap.GetWidth()+border;
         best.y = m_bitmap.GetHeight()+border;
     }
+    CacheBestSize(best);
     return best;
 }
 
@@ -332,7 +334,7 @@ void wxToggleButton::OnInternalIdle()
         UpdateWindowUI(wxUPDATE_UI_FROMIDLE);
 }
 
-// wxSize DoGetBestSize() const
+
 // Get the "best" size for this control.
 wxSize wxToggleButton::DoGetBestSize() const
 {
@@ -343,8 +345,8 @@ wxSize wxToggleButton::DoGetBestSize() const
         if (ret.x < 80) ret.x = 80;
     }
     
-
-   return ret;
+    CacheBestSize(ret);
+    return ret;
 }
 
 // static
index 704b1728bafad74e5c550da3e92f43649b50f8bd..a8dc4295c4b45c8244da2aebde550e11320139ef 100644 (file)
@@ -89,6 +89,7 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit
 void wxBitmapButton::SetBitmapLabel(const wxBitmap& bitmap)
 {
     m_bmpNormal = bitmap;
+    InvalidateBestSize();
 
     ControlButtonContentInfo info ;
     wxMacCreateBitmapButton( &info , m_bmpNormal ) ;
index 361bc4def7de3a2a6ff0e01fefb9be50f5f31807..4fe7f3e81573a1db6208229cd0e37800ac4e7dd5 100644 (file)
@@ -324,6 +324,8 @@ void wxListBox::Delete(int N)
 
 int wxListBox::DoAppend(const wxString& item)
 {
+    InvalidateBestSize();
+
     int index = m_noItems ;
     m_stringArray.Add( item ) ;
     m_dataArray.Add( NULL );
@@ -511,6 +513,8 @@ void wxListBox::DoInsertItems(const wxArrayString& items, int pos)
     wxCHECK_RET( pos >= 0 && pos <= m_noItems,
         wxT("invalid index in wxListBox::InsertItems") );
     
+    InvalidateBestSize();
+
     int nItems = items.GetCount();
     
     for ( int i = 0 ; i < nItems ; i++ )
index f8fb079fd450d273395aa4c5765e33a516854ba3..69b6f8b448c28a098485690e60044baa2372c065 100644 (file)
@@ -59,6 +59,7 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id,
 void wxStaticBitmap::SetBitmap(const wxBitmap& bitmap)
 {
     m_bitmap = bitmap;
+    InvalidateBestSize();
     SetSize(GetBestSize());
     Refresh() ;
 }
index f4757d19d7c223c2b853c4ac0779efdf3f3f55f1..024cc6eed7034085b34d5bac6fb7093c7235cbc0 100644 (file)
@@ -94,8 +94,8 @@ void wxStaticText::SetLabel(const wxString& st )
 
     if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
     {
+        InvalidateBestSize();
         SetSize( GetBestSize() ) ;
-        SetSizeHints(GetSize());
     }
 
     Update() ;
@@ -109,8 +109,8 @@ bool wxStaticText::SetFont(const wxFont& font)
        {
            if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
             {
+                InvalidateBestSize();
                SetSize( GetBestSize() );
-                SetSizeHints(GetSize());
             }
        }
 
index 8014c6311953fe36c535fe5895851161f6fe32cc..b240fa221b803a43dc0e2367f2d76d560fa68680 100644 (file)
@@ -377,6 +377,7 @@ bool wxToolBar::Realize()
     }
     
     SetSize( maxWidth, maxHeight );
+    InvalidateBestSize();
     
     return TRUE;
 }
@@ -473,6 +474,7 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos),
 {
     // nothing special to do here - we relayout in Realize() later
     tool->Attach(this);
+    InvalidateBestSize();
 
     return TRUE;
 }
@@ -519,6 +521,7 @@ bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *tool)
         tool2->SetPosition( pt ) ;
     }
     
+    InvalidateBestSize();
     return TRUE ;
 }
 
index f6ce4dd00c3779b42b9493566343856db820a056..d08470d719a5e5f85eb61881755518a793b606d8 100644 (file)
@@ -91,6 +91,7 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit
 void wxBitmapButton::SetBitmapLabel(const wxBitmap& bitmap)
 {
     m_bmpNormal = bitmap;
+    InvalidateBestSize();
 
     ControlButtonContentInfo info ;
     wxMacCreateBitmapButton( &info , m_bmpNormal ) ;
index 8322a7a2f2e98643b062e46273b914445aa40f4c..a0d3e0548238634d174d503921fe3f9ba8840ba2 100644 (file)
@@ -401,6 +401,8 @@ void wxListBox::Delete(int N)
 
 int wxListBox::DoAppend(const wxString& item)
 {
+    InvalidateBestSize();
+
     int index = m_noItems ;
     m_stringArray.Add( item ) ;
     m_dataArray.Add( NULL );
@@ -595,6 +597,8 @@ void wxListBox::DoInsertItems(const wxArrayString& items, int pos)
     wxCHECK_RET( pos >= 0 && pos <= m_noItems,
         wxT("invalid index in wxListBox::InsertItems") );
     
+    InvalidateBestSize();
+
     int nItems = items.GetCount();
     
     for ( int i = 0 ; i < nItems ; i++ )
index 68bc4efa6ac16f137f7604be33f235dfddf12ae3..9bd84f6aa8c280b023e91665fda6a390add5cb03 100644 (file)
@@ -67,6 +67,7 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id,
 void wxStaticBitmap::SetBitmap(const wxBitmap& bitmap)
 {
     m_bitmap = bitmap;
+    InvalidateBestSize();
     SetSize(wxSize(bitmap.GetWidth(), bitmap.GetHeight()));
     Refresh() ;
 }
index 1c0facdbf70d86610846d12989813d7cef848fd9..38c4b1041b61a11dd688129b59fe2f1e917e4981 100644 (file)
@@ -236,6 +236,7 @@ void wxStaticText::SetLabel(const wxString& st )
     {
         // temporary fix until layout measurement and drawing are in synch again
         Refresh() ;
+        InvalidateBestSize();
         SetSize( GetBestSize() ) ;
     }
     Refresh() ;
@@ -253,7 +254,8 @@ bool wxStaticText::SetFont(const wxFont& font)
            if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
            {
                // temporary fix until layout measurement and drawing are in synch again
-            Refresh() ;
+                Refresh() ;
+                InvalidateBestSize();
                SetSize( GetBestSize() );
            }
        }
index d8bdac1326f60f9cf121423a9a3a12299b82ebf1..1b4b9733d0f172aab6cd7b47bbd3fd37ec9c35a8 100644 (file)
@@ -377,6 +377,7 @@ bool wxToolBar::Realize()
     }
     
     SetSize(maxWidth, maxHeight);
+    InvalidateBestSize();
     
     return TRUE;
 }
@@ -494,6 +495,7 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos),
 {
     // nothing special to do here - we relayout in Realize() later
     tool->Attach(this);
+    InvalidateBestSize();
 
     return TRUE;
 }
@@ -540,6 +542,7 @@ bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *tool)
         tool2->SetPosition( pt ) ;
     }
     
+    InvalidateBestSize();
     return TRUE ;
 }
 
index bb2e787838b13b544fb08bb526d9394355f44cb1..7788ce8b2b8601b2384ed15678f36941728aa27e 100644 (file)
@@ -126,25 +126,11 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id,
         m_marginY = wxDEFAULT_BUTTON_MARGIN;
     }
 
-    int x = pos.x;
-    int y = pos.y;
-    int width = size.x;
-    int height = size.y;
-
     if (id == -1)
         m_windowId = NewControlId();
     else
         m_windowId = id;
 
-    if ( bitmap.Ok() )
-    {
-        wxSize newSize = DoGetBestSize();
-        if ( width == -1 )
-            width = newSize.x;
-        if ( height == -1 )
-            height = newSize.y;
-    }
-
     long msStyle = WS_VISIBLE | WS_TABSTOP | WS_CHILD | BS_OWNERDRAW ;
 
     if ( m_windowStyle & wxCLIP_SIBLINGS )
@@ -176,9 +162,8 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id,
     // Subclass again for purposes of dialog editing mode
     SubclassWin(m_hWnd);
 
-    SetFont(parent->GetFont());
-
-    SetSize(x, y, width, height);
+    SetPosition(pos);
+    SetBestSize(size);
 
     return true;
 }
index b3037577bcb79b00323587bf9bfec87f66f7511e..eea13ecbe30bedf649be68ce9ea0f06c4f6aae0f 100644 (file)
@@ -287,6 +287,8 @@ void wxListBox::Delete(int N)
 
 int wxListBox::DoAppend(const wxString& item)
 {
+    InvalidateBestSize();
+
     int index = ListBox_AddString(GetHwnd(), item);
     m_noItems++;
 
@@ -522,6 +524,8 @@ wxListBox::DoInsertItems(const wxArrayString& items, int pos)
     wxCHECK_RET( pos >= 0 && pos <= m_noItems,
                  wxT("invalid index in wxListBox::InsertItems") );
 
+    InvalidateBestSize();
+
     int nItems = items.GetCount();
     for ( int i = 0; i < nItems; i++ )
     {
index b437dcf26aeaca5c57c4372a54854db16e502221..86fda57454ec9392b4ca1e02c1d213757942cdaf 100644 (file)
@@ -217,6 +217,7 @@ void wxStaticBitmap::SetImage( const wxGDIImage* image )
 {
     wxGDIImage* convertedImage = ConvertImage( *image );
     SetImageNoCopy( convertedImage );
+    InvalidateBestSize();
 }
 
 void wxStaticBitmap::SetImageNoCopy( wxGDIImage* image)
index 12b740301880e7a625246ba2184a47363b9bfa0a..0f6faf5e034eeb2f67a095e380d0d189fef392fb 100644 (file)
@@ -215,8 +215,8 @@ void wxStaticText::SetLabel(const wxString& label)
     // disabled
     if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
     {
+        InvalidateBestSize();
         DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT);
-        SetSizeHints(GetSize());
     }
 }
 
@@ -229,8 +229,8 @@ bool wxStaticText::SetFont(const wxFont& font)
     // disabled
     if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
     {
+        InvalidateBestSize();
         DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT);
-        SetSizeHints(GetSize());
     }
 
     return ret;
index 717e5ff7c9216eff89e8d53fa8e6ed9e908b7a63..de0cc3ffaa02dc0f4ca9b7b488edbeb6a4b92b45 100644 (file)
@@ -388,6 +388,7 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *tool)
     // Realize() later
     tool->Attach(this);
 
+    InvalidateBestSize();
     return TRUE;
 }
 
@@ -465,6 +466,7 @@ bool wxToolBar::DoDeleteTool(size_t pos, wxToolBarToolBase *tool)
         }
     }
 
+    InvalidateBestSize();
     return TRUE;
 }
 
@@ -922,6 +924,7 @@ bool wxToolBar::Realize()
         }
     }
 
+    InvalidateBestSize();
     return TRUE;
 }
 
index cb217eea1a0f96a6d3d892280f7942eb8361bb23..7a10cf71c5f436d8b7ec2e90a78ddcd36cce6182 100644 (file)
@@ -509,6 +509,21 @@ after calling Fit.", "");
         GetBestSizeTuple);
     
 
+    DocDeclStr(
+        void , InvalidateBestSize(),
+        "Reset the cached best size value so it will be recalculated the next
+time it is needed.", "");
+
+
+    
+    DocDeclStr(
+        wxSize , GetBestFittingSize() const,
+        "This function will merge the window's best size into the window's
+minimum size, giving priority to the min size components, and returns
+the results.
+", "");
+    
+
     DocDeclStr(
         wxSize , GetAdjustedBestSize() const,
         "This method is similar to GetBestSize, except in one
@@ -1325,7 +1340,7 @@ The cursor may be wx.NullCursor in which case the window cursor will
 be reset back to default.", "");
     
     DocDeclStr(
-        wxCursor& , GetCursor(),
+        wxCursor , GetCursor(),
         "Return the cursor associated with this window.", "");
     
 
@@ -1341,7 +1356,7 @@ be reset back to default.", "");
 
     
     DocDeclStr(
-        wxFont& , GetFont(),
+        wxFont , GetFont(),
         "Returns the default font used for this window.", "");