* Implemented BestSize cache

* 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
This commit is contained in:
Robin Dunn 2004-06-24 20:09:45 +00:00
parent cf82b73a0a
commit 9f88452895
55 changed files with 260 additions and 105 deletions

View File

@ -701,6 +701,19 @@ Returns the background colour of the window.
\helpref{wxWindow::GetForegroundColour}{wxwindowgetforegroundcolour} \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} \membersection{wxWindow::GetBestSize}\label{wxwindowgetbestsize}
\constfunc{wxSize}{GetBestSize}{\void} \constfunc{wxSize}{GetBestSize}{\void}
@ -2390,18 +2403,23 @@ applications on the system.
\helpref{wxWindow::Refresh}{wxwindowrefresh},\rtfsp \helpref{wxWindow::Refresh}{wxwindowrefresh},\rtfsp
\helpref{wxEraseEvent}{wxeraseevent} \helpref{wxEraseEvent}{wxeraseevent}
\membersection{wxWindow::SetBestFittingSize}\label{wxwindowsetbestfittingsize} \membersection{wxWindow::SetBestFittingSize}\label{wxwindowsetbestfittingsize}
\func{void}{SetBestFittingSize}{\param{const wxSize& }{size = wxDefaultSize}} \func{void}{SetBestFittingSize}{\param{const wxSize& }{size = wxDefaultSize}}
A {\it smart} SetSize that will fill in default size components with the 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 window's {\it best} size values. Also sets the window's minsize to
sizers. 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} \wxheading{See also}
\helpref{wxWindow::SetSize}{wxwindowsetsize} \helpref{wxWindow::SetSize}{wxwindowsetsize},\rtfsp
\helpref{wxWindow::GetBestSize}{wxwindowgetbestsize} \helpref{wxWindow::GetBestSize}{wxwindowgetbestsize},\rtfsp
\helpref{wxWindow::GetBestFittingSize}{wxwindowgetbestfittingsize},\rtfsp
\helpref{wxWindow::SetSizeHints}{wxwindowsetsizehints} \helpref{wxWindow::SetSizeHints}{wxwindowsetsizehints}

View File

@ -67,7 +67,7 @@ public:
protected: protected:
// function called when any of the bitmaps changes // function called when any of the bitmaps changes
virtual void OnSetBitmap() { } virtual void OnSetBitmap() { InvalidateBestSize(); }
// the bitmaps for various states // the bitmaps for various states
wxBitmap m_bmpNormal, wxBitmap m_bmpNormal,

View File

@ -63,6 +63,9 @@ public:
// if the button was clicked) // if the button was clicked)
virtual void Command(wxCommandEvent &event); virtual void Command(wxCommandEvent &event);
virtual void SetLabel( const wxString &label );
virtual bool SetFont(const wxFont& font);
protected: protected:
// creates the control (calls wxWindowBase::CreateBase inside) and adds it // creates the control (calls wxWindowBase::CreateBase inside) and adds it
// to the list of parents children // to the list of parents children

View File

@ -230,9 +230,6 @@ public:
void Move(const wxPoint& pt, int flags = wxSIZE_USE_EXISTING) void Move(const wxPoint& pt, int flags = wxSIZE_USE_EXISTING)
{ Move(pt.x, pt.y, flags); } { 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 // Z-order
virtual void Raise() = 0; virtual void Raise() = 0;
virtual void Lower() = 0; virtual void Lower() = 0;
@ -297,17 +294,29 @@ public:
} }
// get the size best suited for the window (in fact, minimal // get the size best suited for the window (in fact, minimal
// acceptable size using which it will still look "nice") // acceptable size using which it will still look "nice" in
wxSize GetBestSize() const { return DoGetBestSize(); } // most situations)
wxSize GetBestSize() const
{
if (m_bestSizeCache.IsFullySpecified())
return m_bestSizeCache;
return DoGetBestSize();
}
void GetBestSize(int *w, int *h) const void GetBestSize(int *w, int *h) const
{ {
wxSize s = DoGetBestSize(); wxSize s = GetBestSize();
if ( w ) if ( w )
*w = s.x; *w = s.x;
if ( h ) if ( h )
*h = s.y; *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 // There are times (and windows) where 'Best' size and 'Min' size
// are vastly out of sync. This should be remedied somehow, but in // are vastly out of sync. This should be remedied somehow, but in
// the meantime, this method will return the larger of BestSize // the meantime, this method will return the larger of BestSize
@ -315,10 +324,19 @@ public:
// MinSize hint. // MinSize hint.
wxSize GetAdjustedBestSize() const wxSize GetAdjustedBestSize() const
{ {
wxSize s( DoGetBestSize() ); wxSize s( GetBestSize() );
return wxSize( wxMax( s.x, GetMinWidth() ), wxMax( s.y, GetMinHeight() ) ); 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` // the generic centre function - centers the window on parent by`
// default or on screen if it doesn't have parent or // default or on screen if it doesn't have parent or
// wxCENTER_ON_SCREEN flag is given // wxCENTER_ON_SCREEN flag is given
@ -1137,11 +1155,15 @@ protected:
static int WidthDefault(int w) { return w == -1 ? 20 : w; } static int WidthDefault(int w) { return w == -1 ? 20 : w; }
static int HeightDefault(int h) { return h == -1 ? 20 : h; } 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 // keep the old name for compatibility, at least until all the internal
// usages of it are changed to SetBestFittingSize // usages of it are changed to SetBestFittingSize
void SetBestSize(const wxSize& size) { SetBestFittingSize(size); } void SetBestSize(const wxSize& size) { SetBestFittingSize(size); }
// set the initial window size if none is given (i.e. at least one of the // 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) // components of the size passed to ctor/Create() is -1)
// //
@ -1151,6 +1173,7 @@ protected:
// can be accurately calculated // can be accurately calculated
virtual void SetInitialBestSize(const wxSize& WXUNUSED(size)) {} virtual void SetInitialBestSize(const wxSize& WXUNUSED(size)) {}
// more pure virtual functions // more pure virtual functions
// --------------------------- // ---------------------------

View File

@ -130,7 +130,9 @@ wxSize wxBookCtrl::DoGetBestSize() const
// convert display area to window area, adding the size neccessary for the // convert display area to window area, adding the size neccessary for the
// tabs // tabs
return CalcSizeFromPage(bestSize); wxSize best = CalcSizeFromPage(bestSize);
CacheBestSize(best);
return best;
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View 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 // wxStaticBitmap
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -129,12 +142,15 @@ wxStaticBitmapBase::~wxStaticBitmapBase()
wxSize wxStaticBitmapBase::DoGetBestSize() const wxSize wxStaticBitmapBase::DoGetBestSize() const
{ {
wxSize best;
wxBitmap bmp = GetBitmap(); wxBitmap bmp = GetBitmap();
if ( bmp.Ok() ) if ( bmp.Ok() )
return wxSize(bmp.GetWidth(), bmp.GetHeight()); best = wxSize(bmp.GetWidth(), bmp.GetHeight());
else
// this is completely arbitrary // this is completely arbitrary
return wxSize(16, 16); best = wxSize(16, 16);
CacheBestSize(best);
return best;
} }
#endif // wxUSE_STATBMP #endif // wxUSE_STATBMP

View File

@ -192,18 +192,9 @@ wxSize wxSizerItem::CalcMin()
if ( IsWindow() && !(m_flag & wxFIXED_MINSIZE) ) if ( IsWindow() && !(m_flag & wxFIXED_MINSIZE) )
{ {
// Since the size of the window may change during runtime, we // Since the size of the window may change during runtime, we
// should use the current minimal size. If there is a MinSize, // should use the current minimal/best size.
// use it, otherwise use the BestSize. m_minSize = m_window->GetBestFittingSize();
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;
} }
ret = m_minSize; ret = m_minSize;
} }

View File

@ -141,6 +141,7 @@ wxToolBarToolBase *wxToolBarBase::DoAddTool(int id,
wxCoord WXUNUSED(xPos), wxCoord WXUNUSED(xPos),
wxCoord WXUNUSED(yPos)) wxCoord WXUNUSED(yPos))
{ {
InvalidateBestSize();
return InsertTool(GetToolsCount(), id, label, bitmap, bmpDisabled, return InsertTool(GetToolsCount(), id, label, bitmap, bmpDisabled,
kind, shortHelp, longHelp, clientData); kind, shortHelp, longHelp, clientData);
} }

View File

@ -125,6 +125,9 @@ wxWindowBase::wxWindowBase()
m_minHeight = m_minHeight =
m_maxHeight = wxDefaultSize.y; m_maxHeight = wxDefaultSize.y;
// invalidiated cache value
m_bestSizeCache = wxDefaultSize;
// window are created enabled and visible by default // window are created enabled and visible by default
m_isShown = m_isShown =
m_isEnabled = true; m_isEnabled = true;
@ -482,7 +485,7 @@ void wxWindowBase::Fit()
{ {
if ( GetChildren().GetCount() > 0 ) if ( GetChildren().GetCount() > 0 )
{ {
SetClientSize(DoGetBestSize()); SetClientSize(GetBestSize());
} }
//else: do nothing if we have no children //else: do nothing if we have no children
} }
@ -620,32 +623,36 @@ wxSize wxWindowBase::DoGetBestSize() const
} }
} }
wxSize wxWindowBase::GetBestFittingSize() const
{
// merge the best size with the min size, giving priority to the min size
wxSize min = GetMinSize();
if (min.x == wxDefaultCoord || min.y == wxDefaultCoord)
{
wxSize best = GetBestSize();
if (min.x == wxDefaultCoord) min.x = best.x;
if (min.y == wxDefaultCoord) min.y = best.y;
}
return min;
}
void wxWindowBase::SetBestFittingSize(const wxSize& size) void wxWindowBase::SetBestFittingSize(const wxSize& size)
{ {
// If the given size is incomplete then merge with the best size. // Set the min size to the size passed in. This will usually either be
wxSize sizeBest; // wxDefaultSize or the size passed to this window's ctor/Create function.
if ( size.x == wxDefaultSize.x || size.y == wxDefaultSize.y ) SetMinSize(size);
{
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;
}
// Change the size if needed // Merge the size with the best size if needed
if (GetSize() != sizeBest) wxSize best = GetBestFittingSize();
SetSize(sizeBest);
// If the current size doesn't match then change it
// don't shrink the control below its best size if (GetSize() != best)
m_minWidth = sizeBest.x; SetSize(best);
m_minHeight = sizeBest.y;
} }
// by default the origin is not shifted // by default the origin is not shifted
wxPoint wxWindowBase::GetClientAreaOrigin() const wxPoint wxWindowBase::GetClientAreaOrigin() const
{ {

View File

@ -205,6 +205,8 @@ void wxBitmapButton::OnSetBitmap()
{ {
wxCHECK_RET( m_widget != NULL, wxT("invalid bitmap button") ); wxCHECK_RET( m_widget != NULL, wxT("invalid bitmap button") );
InvalidateBestSize();
wxBitmap the_one; wxBitmap the_one;
if (!m_isEnabled) if (!m_isEnabled)
the_one = m_bmpDisabled; the_one = m_bmpDisabled;
@ -258,6 +260,7 @@ wxSize wxBitmapButton::DoGetBestSize() const
best.x = m_bmpNormal.GetWidth()+border; best.x = m_bmpNormal.GetWidth()+border;
best.y = m_bmpNormal.GetHeight()+border; best.y = m_bmpNormal.GetHeight()+border;
} }
CacheBestSize(best);
return best; return best;
} }

View File

@ -232,6 +232,7 @@ wxSize wxButton::DoGetBestSize() const
if (ret.x < 80) ret.x = 80; if (ret.x < 80) ret.x = 80;
} }
CacheBestSize(ret);
return ret; return ret;
} }

View File

@ -564,6 +564,7 @@ wxSize wxChoice::DoGetBestSize() const
if (ret.y <= 18) if (ret.y <= 18)
ret.y = 8 + GetCharHeight(); ret.y = 8 + GetCharHeight();
CacheBestSize(ret);
return ret; return ret;
} }

View File

@ -773,6 +773,8 @@ wxSize wxComboBox::DoGetBestSize() const
// empty combobox should have some reasonable default size too // empty combobox should have some reasonable default size too
if ( ret.x < 100 ) if ( ret.x < 100 )
ret.x = 100; ret.x = 100;
CacheBestSize(ret);
return ret; return ret;
} }

View File

@ -66,6 +66,7 @@ void wxControl::SetLabel( const wxString &label )
} }
m_label << *pc; m_label << *pc;
} }
InvalidateBestSize();
} }
wxString wxControl::GetLabel() const wxString wxControl::GetLabel() const
@ -85,7 +86,9 @@ wxSize wxControl::DoGetBestSize() const
(* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_widget) )->size_request ) (* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_widget) )->size_request )
(m_widget, &req ); (m_widget, &req );
return wxSize(req.width, req.height); wxSize best(req.width, req.height);
CacheBestSize(best);
return best;
} }

View File

@ -72,10 +72,13 @@ void wxGauge::DoSetGauge()
wxSize wxGauge::DoGetBestSize() const wxSize wxGauge::DoGetBestSize() const
{ {
wxSize best;
if (HasFlag(wxGA_VERTICAL)) if (HasFlag(wxGA_VERTICAL))
return wxSize(28, 100); best = wxSize(28, 100);
else else
return wxSize(100, 28); best = wxSize(100, 28);
CacheBestSize(best);
return best;
} }
void wxGauge::SetRange( int range ) void wxGauge::SetRange( int range )

View File

@ -439,6 +439,8 @@ void wxListBox::DoInsertItems(const wxArrayString& items, int pos)
wxASSERT_MSG( m_clientList.GetCount() == (size_t)GetCount(), wxASSERT_MSG( m_clientList.GetCount() == (size_t)GetCount(),
wxT("bug in client data management") ); wxT("bug in client data management") );
InvalidateBestSize();
GList *children = m_list->children; GList *children = m_list->children;
int length = g_list_length(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 ) int wxListBox::DoAppend( const wxString& item )
{ {
InvalidateBestSize();
if (m_strings) if (m_strings)
{ {
// need to determine the index // need to determine the index
@ -1076,7 +1080,9 @@ wxSize wxListBox::DoGetBestSize() const
// make it too small neither // make it too small neither
lbHeight = (cy+4) * wxMin(wxMax(GetCount(), 3), 10); 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) void wxListBox::FixUpMouseEvent(GtkWidget *widget, wxCoord& x, wxCoord& y)

View File

@ -286,6 +286,7 @@ wxSize wxRadioBox::DoGetBestSize() const
if (req.width > size.x) if (req.width > size.x)
size.x = req.width; size.x = req.width;
CacheBestSize(size);
return size; return size;
} }

View File

@ -227,7 +227,9 @@ bool wxSpinButton::IsOwnGtkWindow( GdkWindow *window )
wxSize wxSpinButton::DoGetBestSize() const wxSize wxSpinButton::DoGetBestSize() const
{ {
return wxSize(15, 26); // FIXME wxSize best(15, 26); // FIXME
CacheBestSize(best);
return best;
} }
// static // static

View File

@ -301,7 +301,9 @@ bool wxSpinCtrl::IsOwnGtkWindow( GdkWindow *window )
wxSize wxSpinCtrl::DoGetBestSize() const wxSize wxSpinCtrl::DoGetBestSize() const
{ {
wxSize ret( wxControl::DoGetBestSize() ); wxSize ret( wxControl::DoGetBestSize() );
return wxSize(95, ret.y); wxSize best(95, ret.y);
CacheBestSize(best);
return best;
} }
// static // static

View File

@ -113,7 +113,8 @@ void wxStaticBitmap::SetBitmap( const wxBitmap &bitmap )
gtk_pixmap_set( GTK_PIXMAP(m_widget), m_bitmap.GetPixmap(), mask ); gtk_pixmap_set( GTK_PIXMAP(m_widget), m_bitmap.GetPixmap(), mask );
} }
SetBestSize(wxSize(bitmap.GetWidth(), bitmap.GetHeight())); InvalidateBestSize();
SetSize(GetBestSize());
} }
} }

View File

@ -150,8 +150,8 @@ void wxStaticText::SetLabel( const wxString &label )
// adjust the label size to the new label unless disabled // adjust the label size to the new label unless disabled
if (!HasFlag(wxST_NO_AUTORESIZE)) if (!HasFlag(wxST_NO_AUTORESIZE))
{ {
InvalidateBestSize();
SetSize( GetBestSize() ); SetSize( GetBestSize() );
SetSizeHints(GetSize());
} }
} }
@ -162,8 +162,8 @@ bool wxStaticText::SetFont( const wxFont &font )
// adjust the label size to the new label unless disabled // adjust the label size to the new label unless disabled
if (!HasFlag(wxST_NO_AUTORESIZE)) if (!HasFlag(wxST_NO_AUTORESIZE))
{ {
InvalidateBestSize();
SetSize( GetBestSize() ); SetSize( GetBestSize() );
SetSizeHints(GetSize());
} }
return ret; return ret;
} }
@ -183,7 +183,9 @@ wxSize wxStaticText::DoGetBestSize() const
(* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_widget) )->size_request ) (* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_widget) )->size_request )
(m_widget, &req ); (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) bool wxStaticText::SetForegroundColour(const wxColour& colour)

View File

@ -501,6 +501,7 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase)
(m_widget, &req ); (m_widget, &req );
m_width = req.width + m_xMargin; m_width = req.width + m_xMargin;
m_height = req.height + 2*m_yMargin; m_height = req.height + 2*m_yMargin;
InvalidateBestSize();
return TRUE; return TRUE;
} }
@ -522,6 +523,7 @@ bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase)
//case wxTOOL_STYLE_SEPARATOR: -- nothing to do //case wxTOOL_STYLE_SEPARATOR: -- nothing to do
} }
InvalidateBestSize();
return TRUE; return TRUE;
} }

View File

@ -1633,7 +1633,9 @@ wxSize wxTextCtrl::DoGetBestSize() const
{ {
// FIXME should be different for multi-line controls... // FIXME should be different for multi-line controls...
wxSize ret( wxControl::DoGetBestSize() ); wxSize ret( wxControl::DoGetBestSize() );
return wxSize(80, ret.y); wxSize best(80, ret.y);
CacheBestSize(best);
return best;
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@ -123,6 +123,7 @@ void wxToggleBitmapButton::SetLabel(const wxBitmap& label)
wxCHECK_RET(m_widget != NULL, wxT("invalid toggle button")); wxCHECK_RET(m_widget != NULL, wxT("invalid toggle button"));
m_bitmap = label; m_bitmap = label;
InvalidateBestSize();
OnSetBitmap(); OnSetBitmap();
} }
@ -192,7 +193,7 @@ void wxToggleBitmapButton::OnInternalIdle()
UpdateWindowUI(wxUPDATE_UI_FROMIDLE); UpdateWindowUI(wxUPDATE_UI_FROMIDLE);
} }
// wxSize DoGetBestSize() const
// Get the "best" size for this control. // Get the "best" size for this control.
wxSize wxToggleBitmapButton::DoGetBestSize() const wxSize wxToggleBitmapButton::DoGetBestSize() const
{ {
@ -204,6 +205,7 @@ wxSize wxToggleBitmapButton::DoGetBestSize() const
best.x = m_bitmap.GetWidth()+border; best.x = m_bitmap.GetWidth()+border;
best.y = m_bitmap.GetHeight()+border; best.y = m_bitmap.GetHeight()+border;
} }
CacheBestSize(best);
return best; return best;
} }
@ -332,7 +334,7 @@ void wxToggleButton::OnInternalIdle()
UpdateWindowUI(wxUPDATE_UI_FROMIDLE); UpdateWindowUI(wxUPDATE_UI_FROMIDLE);
} }
// wxSize DoGetBestSize() const
// Get the "best" size for this control. // Get the "best" size for this control.
wxSize wxToggleButton::DoGetBestSize() const wxSize wxToggleButton::DoGetBestSize() const
{ {
@ -343,8 +345,8 @@ wxSize wxToggleButton::DoGetBestSize() const
if (ret.x < 80) ret.x = 80; if (ret.x < 80) ret.x = 80;
} }
CacheBestSize(ret);
return ret; return ret;
} }
// static // static

View File

@ -205,6 +205,8 @@ void wxBitmapButton::OnSetBitmap()
{ {
wxCHECK_RET( m_widget != NULL, wxT("invalid bitmap button") ); wxCHECK_RET( m_widget != NULL, wxT("invalid bitmap button") );
InvalidateBestSize();
wxBitmap the_one; wxBitmap the_one;
if (!m_isEnabled) if (!m_isEnabled)
the_one = m_bmpDisabled; the_one = m_bmpDisabled;
@ -258,6 +260,7 @@ wxSize wxBitmapButton::DoGetBestSize() const
best.x = m_bmpNormal.GetWidth()+border; best.x = m_bmpNormal.GetWidth()+border;
best.y = m_bmpNormal.GetHeight()+border; best.y = m_bmpNormal.GetHeight()+border;
} }
CacheBestSize(best);
return best; return best;
} }

View File

@ -232,6 +232,7 @@ wxSize wxButton::DoGetBestSize() const
if (ret.x < 80) ret.x = 80; if (ret.x < 80) ret.x = 80;
} }
CacheBestSize(ret);
return ret; return ret;
} }

View File

@ -564,6 +564,7 @@ wxSize wxChoice::DoGetBestSize() const
if (ret.y <= 18) if (ret.y <= 18)
ret.y = 8 + GetCharHeight(); ret.y = 8 + GetCharHeight();
CacheBestSize(ret);
return ret; return ret;
} }

View File

@ -773,6 +773,8 @@ wxSize wxComboBox::DoGetBestSize() const
// empty combobox should have some reasonable default size too // empty combobox should have some reasonable default size too
if ( ret.x < 100 ) if ( ret.x < 100 )
ret.x = 100; ret.x = 100;
CacheBestSize(ret);
return ret; return ret;
} }

View File

@ -66,6 +66,7 @@ void wxControl::SetLabel( const wxString &label )
} }
m_label << *pc; m_label << *pc;
} }
InvalidateBestSize();
} }
wxString wxControl::GetLabel() const wxString wxControl::GetLabel() const
@ -85,7 +86,9 @@ wxSize wxControl::DoGetBestSize() const
(* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_widget) )->size_request ) (* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_widget) )->size_request )
(m_widget, &req ); (m_widget, &req );
return wxSize(req.width, req.height); wxSize best(req.width, req.height);
CacheBestSize(best);
return best;
} }

View File

@ -72,10 +72,13 @@ void wxGauge::DoSetGauge()
wxSize wxGauge::DoGetBestSize() const wxSize wxGauge::DoGetBestSize() const
{ {
wxSize best;
if (HasFlag(wxGA_VERTICAL)) if (HasFlag(wxGA_VERTICAL))
return wxSize(28, 100); best = wxSize(28, 100);
else else
return wxSize(100, 28); best = wxSize(100, 28);
CacheBestSize(best);
return best;
} }
void wxGauge::SetRange( int range ) void wxGauge::SetRange( int range )

View File

@ -439,6 +439,8 @@ void wxListBox::DoInsertItems(const wxArrayString& items, int pos)
wxASSERT_MSG( m_clientList.GetCount() == (size_t)GetCount(), wxASSERT_MSG( m_clientList.GetCount() == (size_t)GetCount(),
wxT("bug in client data management") ); wxT("bug in client data management") );
InvalidateBestSize();
GList *children = m_list->children; GList *children = m_list->children;
int length = g_list_length(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 ) int wxListBox::DoAppend( const wxString& item )
{ {
InvalidateBestSize();
if (m_strings) if (m_strings)
{ {
// need to determine the index // need to determine the index
@ -1076,7 +1080,9 @@ wxSize wxListBox::DoGetBestSize() const
// make it too small neither // make it too small neither
lbHeight = (cy+4) * wxMin(wxMax(GetCount(), 3), 10); 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) void wxListBox::FixUpMouseEvent(GtkWidget *widget, wxCoord& x, wxCoord& y)

View File

@ -286,6 +286,7 @@ wxSize wxRadioBox::DoGetBestSize() const
if (req.width > size.x) if (req.width > size.x)
size.x = req.width; size.x = req.width;
CacheBestSize(size);
return size; return size;
} }

View File

@ -227,7 +227,9 @@ bool wxSpinButton::IsOwnGtkWindow( GdkWindow *window )
wxSize wxSpinButton::DoGetBestSize() const wxSize wxSpinButton::DoGetBestSize() const
{ {
return wxSize(15, 26); // FIXME wxSize best(15, 26); // FIXME
CacheBestSize(best);
return best;
} }
// static // static

View File

@ -301,7 +301,9 @@ bool wxSpinCtrl::IsOwnGtkWindow( GdkWindow *window )
wxSize wxSpinCtrl::DoGetBestSize() const wxSize wxSpinCtrl::DoGetBestSize() const
{ {
wxSize ret( wxControl::DoGetBestSize() ); wxSize ret( wxControl::DoGetBestSize() );
return wxSize(95, ret.y); wxSize best(95, ret.y);
CacheBestSize(best);
return best;
} }
// static // static

View File

@ -113,7 +113,8 @@ void wxStaticBitmap::SetBitmap( const wxBitmap &bitmap )
gtk_pixmap_set( GTK_PIXMAP(m_widget), m_bitmap.GetPixmap(), mask ); gtk_pixmap_set( GTK_PIXMAP(m_widget), m_bitmap.GetPixmap(), mask );
} }
SetBestSize(wxSize(bitmap.GetWidth(), bitmap.GetHeight())); InvalidateBestSize();
SetSize(GetBestSize());
} }
} }

View File

@ -150,8 +150,8 @@ void wxStaticText::SetLabel( const wxString &label )
// adjust the label size to the new label unless disabled // adjust the label size to the new label unless disabled
if (!HasFlag(wxST_NO_AUTORESIZE)) if (!HasFlag(wxST_NO_AUTORESIZE))
{ {
InvalidateBestSize();
SetSize( GetBestSize() ); SetSize( GetBestSize() );
SetSizeHints(GetSize());
} }
} }
@ -162,8 +162,8 @@ bool wxStaticText::SetFont( const wxFont &font )
// adjust the label size to the new label unless disabled // adjust the label size to the new label unless disabled
if (!HasFlag(wxST_NO_AUTORESIZE)) if (!HasFlag(wxST_NO_AUTORESIZE))
{ {
InvalidateBestSize();
SetSize( GetBestSize() ); SetSize( GetBestSize() );
SetSizeHints(GetSize());
} }
return ret; return ret;
} }
@ -183,7 +183,9 @@ wxSize wxStaticText::DoGetBestSize() const
(* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_widget) )->size_request ) (* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_widget) )->size_request )
(m_widget, &req ); (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) bool wxStaticText::SetForegroundColour(const wxColour& colour)

View File

@ -501,6 +501,7 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase)
(m_widget, &req ); (m_widget, &req );
m_width = req.width + m_xMargin; m_width = req.width + m_xMargin;
m_height = req.height + 2*m_yMargin; m_height = req.height + 2*m_yMargin;
InvalidateBestSize();
return TRUE; return TRUE;
} }
@ -522,6 +523,7 @@ bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase)
//case wxTOOL_STYLE_SEPARATOR: -- nothing to do //case wxTOOL_STYLE_SEPARATOR: -- nothing to do
} }
InvalidateBestSize();
return TRUE; return TRUE;
} }

View File

@ -1633,7 +1633,9 @@ wxSize wxTextCtrl::DoGetBestSize() const
{ {
// FIXME should be different for multi-line controls... // FIXME should be different for multi-line controls...
wxSize ret( wxControl::DoGetBestSize() ); wxSize ret( wxControl::DoGetBestSize() );
return wxSize(80, ret.y); wxSize best(80, ret.y);
CacheBestSize(best);
return best;
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@ -123,6 +123,7 @@ void wxToggleBitmapButton::SetLabel(const wxBitmap& label)
wxCHECK_RET(m_widget != NULL, wxT("invalid toggle button")); wxCHECK_RET(m_widget != NULL, wxT("invalid toggle button"));
m_bitmap = label; m_bitmap = label;
InvalidateBestSize();
OnSetBitmap(); OnSetBitmap();
} }
@ -192,7 +193,7 @@ void wxToggleBitmapButton::OnInternalIdle()
UpdateWindowUI(wxUPDATE_UI_FROMIDLE); UpdateWindowUI(wxUPDATE_UI_FROMIDLE);
} }
// wxSize DoGetBestSize() const
// Get the "best" size for this control. // Get the "best" size for this control.
wxSize wxToggleBitmapButton::DoGetBestSize() const wxSize wxToggleBitmapButton::DoGetBestSize() const
{ {
@ -204,6 +205,7 @@ wxSize wxToggleBitmapButton::DoGetBestSize() const
best.x = m_bitmap.GetWidth()+border; best.x = m_bitmap.GetWidth()+border;
best.y = m_bitmap.GetHeight()+border; best.y = m_bitmap.GetHeight()+border;
} }
CacheBestSize(best);
return best; return best;
} }
@ -332,7 +334,7 @@ void wxToggleButton::OnInternalIdle()
UpdateWindowUI(wxUPDATE_UI_FROMIDLE); UpdateWindowUI(wxUPDATE_UI_FROMIDLE);
} }
// wxSize DoGetBestSize() const
// Get the "best" size for this control. // Get the "best" size for this control.
wxSize wxToggleButton::DoGetBestSize() const wxSize wxToggleButton::DoGetBestSize() const
{ {
@ -343,8 +345,8 @@ wxSize wxToggleButton::DoGetBestSize() const
if (ret.x < 80) ret.x = 80; if (ret.x < 80) ret.x = 80;
} }
CacheBestSize(ret);
return ret; return ret;
} }
// static // static

View File

@ -89,6 +89,7 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit
void wxBitmapButton::SetBitmapLabel(const wxBitmap& bitmap) void wxBitmapButton::SetBitmapLabel(const wxBitmap& bitmap)
{ {
m_bmpNormal = bitmap; m_bmpNormal = bitmap;
InvalidateBestSize();
ControlButtonContentInfo info ; ControlButtonContentInfo info ;
wxMacCreateBitmapButton( &info , m_bmpNormal ) ; wxMacCreateBitmapButton( &info , m_bmpNormal ) ;

View File

@ -324,6 +324,8 @@ void wxListBox::Delete(int N)
int wxListBox::DoAppend(const wxString& item) int wxListBox::DoAppend(const wxString& item)
{ {
InvalidateBestSize();
int index = m_noItems ; int index = m_noItems ;
m_stringArray.Add( item ) ; m_stringArray.Add( item ) ;
m_dataArray.Add( NULL ); m_dataArray.Add( NULL );
@ -511,6 +513,8 @@ void wxListBox::DoInsertItems(const wxArrayString& items, int pos)
wxCHECK_RET( pos >= 0 && pos <= m_noItems, wxCHECK_RET( pos >= 0 && pos <= m_noItems,
wxT("invalid index in wxListBox::InsertItems") ); wxT("invalid index in wxListBox::InsertItems") );
InvalidateBestSize();
int nItems = items.GetCount(); int nItems = items.GetCount();
for ( int i = 0 ; i < nItems ; i++ ) for ( int i = 0 ; i < nItems ; i++ )

View File

@ -59,6 +59,7 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id,
void wxStaticBitmap::SetBitmap(const wxBitmap& bitmap) void wxStaticBitmap::SetBitmap(const wxBitmap& bitmap)
{ {
m_bitmap = bitmap; m_bitmap = bitmap;
InvalidateBestSize();
SetSize(GetBestSize()); SetSize(GetBestSize());
Refresh() ; Refresh() ;
} }

View File

@ -94,8 +94,8 @@ void wxStaticText::SetLabel(const wxString& st )
if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) ) if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
{ {
InvalidateBestSize();
SetSize( GetBestSize() ) ; SetSize( GetBestSize() ) ;
SetSizeHints(GetSize());
} }
Update() ; Update() ;
@ -109,8 +109,8 @@ bool wxStaticText::SetFont(const wxFont& font)
{ {
if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) ) if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
{ {
InvalidateBestSize();
SetSize( GetBestSize() ); SetSize( GetBestSize() );
SetSizeHints(GetSize());
} }
} }

View File

@ -377,6 +377,7 @@ bool wxToolBar::Realize()
} }
SetSize( maxWidth, maxHeight ); SetSize( maxWidth, maxHeight );
InvalidateBestSize();
return TRUE; return TRUE;
} }
@ -473,6 +474,7 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos),
{ {
// nothing special to do here - we relayout in Realize() later // nothing special to do here - we relayout in Realize() later
tool->Attach(this); tool->Attach(this);
InvalidateBestSize();
return TRUE; return TRUE;
} }
@ -519,6 +521,7 @@ bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *tool)
tool2->SetPosition( pt ) ; tool2->SetPosition( pt ) ;
} }
InvalidateBestSize();
return TRUE ; return TRUE ;
} }

View File

@ -91,6 +91,7 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit
void wxBitmapButton::SetBitmapLabel(const wxBitmap& bitmap) void wxBitmapButton::SetBitmapLabel(const wxBitmap& bitmap)
{ {
m_bmpNormal = bitmap; m_bmpNormal = bitmap;
InvalidateBestSize();
ControlButtonContentInfo info ; ControlButtonContentInfo info ;
wxMacCreateBitmapButton( &info , m_bmpNormal ) ; wxMacCreateBitmapButton( &info , m_bmpNormal ) ;

View File

@ -401,6 +401,8 @@ void wxListBox::Delete(int N)
int wxListBox::DoAppend(const wxString& item) int wxListBox::DoAppend(const wxString& item)
{ {
InvalidateBestSize();
int index = m_noItems ; int index = m_noItems ;
m_stringArray.Add( item ) ; m_stringArray.Add( item ) ;
m_dataArray.Add( NULL ); m_dataArray.Add( NULL );
@ -595,6 +597,8 @@ void wxListBox::DoInsertItems(const wxArrayString& items, int pos)
wxCHECK_RET( pos >= 0 && pos <= m_noItems, wxCHECK_RET( pos >= 0 && pos <= m_noItems,
wxT("invalid index in wxListBox::InsertItems") ); wxT("invalid index in wxListBox::InsertItems") );
InvalidateBestSize();
int nItems = items.GetCount(); int nItems = items.GetCount();
for ( int i = 0 ; i < nItems ; i++ ) for ( int i = 0 ; i < nItems ; i++ )

View File

@ -67,6 +67,7 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id,
void wxStaticBitmap::SetBitmap(const wxBitmap& bitmap) void wxStaticBitmap::SetBitmap(const wxBitmap& bitmap)
{ {
m_bitmap = bitmap; m_bitmap = bitmap;
InvalidateBestSize();
SetSize(wxSize(bitmap.GetWidth(), bitmap.GetHeight())); SetSize(wxSize(bitmap.GetWidth(), bitmap.GetHeight()));
Refresh() ; Refresh() ;
} }

View File

@ -236,6 +236,7 @@ void wxStaticText::SetLabel(const wxString& st )
{ {
// temporary fix until layout measurement and drawing are in synch again // temporary fix until layout measurement and drawing are in synch again
Refresh() ; Refresh() ;
InvalidateBestSize();
SetSize( GetBestSize() ) ; SetSize( GetBestSize() ) ;
} }
Refresh() ; Refresh() ;
@ -253,7 +254,8 @@ bool wxStaticText::SetFont(const wxFont& font)
if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) ) if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
{ {
// temporary fix until layout measurement and drawing are in synch again // temporary fix until layout measurement and drawing are in synch again
Refresh() ; Refresh() ;
InvalidateBestSize();
SetSize( GetBestSize() ); SetSize( GetBestSize() );
} }
} }

View File

@ -377,6 +377,7 @@ bool wxToolBar::Realize()
} }
SetSize(maxWidth, maxHeight); SetSize(maxWidth, maxHeight);
InvalidateBestSize();
return TRUE; return TRUE;
} }
@ -494,6 +495,7 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos),
{ {
// nothing special to do here - we relayout in Realize() later // nothing special to do here - we relayout in Realize() later
tool->Attach(this); tool->Attach(this);
InvalidateBestSize();
return TRUE; return TRUE;
} }
@ -540,6 +542,7 @@ bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *tool)
tool2->SetPosition( pt ) ; tool2->SetPosition( pt ) ;
} }
InvalidateBestSize();
return TRUE ; return TRUE ;
} }

View File

@ -126,25 +126,11 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id,
m_marginY = wxDEFAULT_BUTTON_MARGIN; m_marginY = wxDEFAULT_BUTTON_MARGIN;
} }
int x = pos.x;
int y = pos.y;
int width = size.x;
int height = size.y;
if (id == -1) if (id == -1)
m_windowId = NewControlId(); m_windowId = NewControlId();
else else
m_windowId = id; 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 ; long msStyle = WS_VISIBLE | WS_TABSTOP | WS_CHILD | BS_OWNERDRAW ;
if ( m_windowStyle & wxCLIP_SIBLINGS ) if ( m_windowStyle & wxCLIP_SIBLINGS )
@ -176,9 +162,8 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id,
// Subclass again for purposes of dialog editing mode // Subclass again for purposes of dialog editing mode
SubclassWin(m_hWnd); SubclassWin(m_hWnd);
SetFont(parent->GetFont()); SetPosition(pos);
SetBestSize(size);
SetSize(x, y, width, height);
return true; return true;
} }

View File

@ -287,6 +287,8 @@ void wxListBox::Delete(int N)
int wxListBox::DoAppend(const wxString& item) int wxListBox::DoAppend(const wxString& item)
{ {
InvalidateBestSize();
int index = ListBox_AddString(GetHwnd(), item); int index = ListBox_AddString(GetHwnd(), item);
m_noItems++; m_noItems++;
@ -522,6 +524,8 @@ wxListBox::DoInsertItems(const wxArrayString& items, int pos)
wxCHECK_RET( pos >= 0 && pos <= m_noItems, wxCHECK_RET( pos >= 0 && pos <= m_noItems,
wxT("invalid index in wxListBox::InsertItems") ); wxT("invalid index in wxListBox::InsertItems") );
InvalidateBestSize();
int nItems = items.GetCount(); int nItems = items.GetCount();
for ( int i = 0; i < nItems; i++ ) for ( int i = 0; i < nItems; i++ )
{ {

View File

@ -217,6 +217,7 @@ void wxStaticBitmap::SetImage( const wxGDIImage* image )
{ {
wxGDIImage* convertedImage = ConvertImage( *image ); wxGDIImage* convertedImage = ConvertImage( *image );
SetImageNoCopy( convertedImage ); SetImageNoCopy( convertedImage );
InvalidateBestSize();
} }
void wxStaticBitmap::SetImageNoCopy( wxGDIImage* image) void wxStaticBitmap::SetImageNoCopy( wxGDIImage* image)

View File

@ -215,8 +215,8 @@ void wxStaticText::SetLabel(const wxString& label)
// disabled // disabled
if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) ) if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
{ {
InvalidateBestSize();
DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT); DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT);
SetSizeHints(GetSize());
} }
} }
@ -229,8 +229,8 @@ bool wxStaticText::SetFont(const wxFont& font)
// disabled // disabled
if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) ) if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
{ {
InvalidateBestSize();
DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT); DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT);
SetSizeHints(GetSize());
} }
return ret; return ret;

View File

@ -388,6 +388,7 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *tool)
// Realize() later // Realize() later
tool->Attach(this); tool->Attach(this);
InvalidateBestSize();
return TRUE; return TRUE;
} }
@ -465,6 +466,7 @@ bool wxToolBar::DoDeleteTool(size_t pos, wxToolBarToolBase *tool)
} }
} }
InvalidateBestSize();
return TRUE; return TRUE;
} }
@ -922,6 +924,7 @@ bool wxToolBar::Realize()
} }
} }
InvalidateBestSize();
return TRUE; return TRUE;
} }

View File

@ -509,6 +509,21 @@ after calling Fit.", "");
GetBestSizeTuple); 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( DocDeclStr(
wxSize , GetAdjustedBestSize() const, wxSize , GetAdjustedBestSize() const,
"This method is similar to GetBestSize, except in one "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.", ""); be reset back to default.", "");
DocDeclStr( DocDeclStr(
wxCursor& , GetCursor(), wxCursor , GetCursor(),
"Return the cursor associated with this window.", ""); "Return the cursor associated with this window.", "");
@ -1341,7 +1356,7 @@ be reset back to default.", "");
DocDeclStr( DocDeclStr(
wxFont& , GetFont(), wxFont , GetFont(),
"Returns the default font used for this window.", ""); "Returns the default font used for this window.", "");