* 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:
parent
cf82b73a0a
commit
9f88452895
@ -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}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
// ---------------------------
|
// ---------------------------
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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 )
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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 )
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@ -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
|
||||||
|
@ -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 ) ;
|
||||||
|
@ -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++ )
|
||||||
|
@ -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() ;
|
||||||
}
|
}
|
||||||
|
@ -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());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 ) ;
|
||||||
|
@ -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++ )
|
||||||
|
@ -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() ;
|
||||||
}
|
}
|
||||||
|
@ -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() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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++ )
|
||||||
{
|
{
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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.", "");
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user