split wxSizer::Fit() into ComputeFittingWindow/ClientSize() that only does computations and Fit() that applies the result to the window

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51767 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2008-02-13 21:32:11 +00:00
parent 7be6187f19
commit 32013b47d6
3 changed files with 79 additions and 7 deletions

View File

@@ -197,6 +197,44 @@ Here, the sizer will do the actual calculation of its children's minimal sizes.
Detaches all children from the sizer. If \arg{delete\_windows} is \true then child windows will also be deleted. Detaches all children from the sizer. If \arg{delete\_windows} is \true then child windows will also be deleted.
\membersection{wxSizer::ComputeFittingClientSize}\label{wxsizercomputefittingclientsize}
\func{wxSize}{ComputeFittingClientSize}{\param{wxWindow* }{window}}
Computes client area size for \arg{window} so that it matches the
sizer's minimal size. Unlike \helpref{GetMinSize}{wxsizergetminsize}, this
method accounts for other constraints imposed on \arg{window}, namely display's
size (returned size will never be too large for the display) and maximum
window size if previously set by
\helpref{wxWindow::SetMaxSize}{wxwindowsetmaxsize}.
The returned value is suitable for passing to
\helpref{wxWindow::SetClientSize}{wxwindowsetclientsize} or
\helpref{wxWindow::SetMinClientSize}{wxwindowsetminclientsize}.
\wxheading{See also}
\helpref{ComputeFittingWindowSize}{wxsizercomputefittingwindowsize},
\helpref{Fit}{wxsizerfit}
\membersection{wxSizer::ComputeFittintWindowSize}\label{wxsizercomputefittingwindowsize}
\func{wxSize}{ComputeFittingWindowSize}{\param{wxWindow* }{window}}
Like \helpref{ComputeFittingClientSize}{wxsizercomputefittingclientsize},
but converts the result into \emph{window} size.
The returned value is suitable for passing to
\helpref{wxWindow::SetSize}{wxwindowsetsize} or
\helpref{wxWindow::SetMinSize}{wxwindowsetminsize}.
\wxheading{See also}
\helpref{ComputeFittingClientSize}{wxsizercomputefittingclientsize},
\helpref{Fit}{wxsizerfit}
\membersection{wxSizer::Detach}\label{wxsizerdetach} \membersection{wxSizer::Detach}\label{wxsizerdetach}
\func{bool}{Detach}{\param{wxWindow* }{window}} \func{bool}{Detach}{\param{wxWindow* }{window}}
@@ -222,10 +260,19 @@ Returns true if the child item was found and detached, false otherwise.
\func{wxSize}{Fit}{\param{wxWindow* }{window}} \func{wxSize}{Fit}{\param{wxWindow* }{window}}
Tell the sizer to resize the \arg{window} so that its client area matchesthe Tell the sizer to resize the \arg{window} so that its client area matches the
sizer's minimal size. This is commonly done in the constructor of the window sizer's minimal size
(\helpref{ComputeFittingClientSize}{wxsizercomputefittingclientsize} is called
to determine it).
This is commonly done in the constructor of the window
itself, see sample in the description itself, see sample in the description
of \helpref{wxBoxSizer}{wxboxsizer}. Returns the new size. of \helpref{wxBoxSizer}{wxboxsizer}. Returns the new \emph{window} size.
\wxheading{See also}
\helpref{ComputeFittingClientSize}{wxsizercomputefittingclientsize},
\helpref{ComputeFittingWindowSize}{wxsizercomputefittingwindowsize}
\membersection{wxSizer::FitInside}\label{wxsizerfitinside} \membersection{wxSizer::FitInside}\label{wxsizerfitinside}
@@ -309,6 +356,13 @@ Returns the minimal size of the sizer. This is either the combined minimal
size of all the children and their borders or the minimal size set by size of all the children and their borders or the minimal size set by
\helpref{SetMinSize}{wxsizersetminsize}, depending on which is bigger. \helpref{SetMinSize}{wxsizersetminsize}, depending on which is bigger.
Note that the returned value is \emph{client} size, not window size.
In particular, if you use the value to set toplevel window's minimal or
actual size, use \helpref{wxWindow::SetMinClientSize}{wxwindowsetminclientsize}
or \helpref{wxWindow::SetClientSize}{wxwindowsetclientsize}, \emph{not}
\helpref{wxWindow::SetMinSize}{wxwindowsetminsize}
or \helpref{wxWindow::SetSize}{wxwindowsetsize}.
\membersection{wxSizer::Hide}\label{wxsizerhide} \membersection{wxSizer::Hide}\label{wxsizerhide}

View File

@@ -601,6 +601,9 @@ public:
virtual void Layout(); virtual void Layout();
wxSize ComputeFittingClientSize(wxWindow *window);
wxSize ComputeFittingWindowSize(wxWindow *window);
wxSize Fit( wxWindow *window ); wxSize Fit( wxWindow *window );
void FitInside( wxWindow *window ); void FitInside( wxWindow *window );
void SetSizeHints( wxWindow *window ); void SetSizeHints( wxWindow *window );

View File

@@ -834,8 +834,10 @@ void wxSizer::DeleteWindows()
} }
} }
wxSize wxSizer::Fit( wxWindow *window ) wxSize wxSizer::ComputeFittingClientSize(wxWindow *window)
{ {
wxCHECK_MSG( window, wxDefaultSize, "window can't be NULL" );
// take the min size by default and limit it by max size // take the min size by default and limit it by max size
wxSize size = GetMinClientSize(window); wxSize size = GetMinClientSize(window);
wxSize sizeMax; wxSize sizeMax;
@@ -846,8 +848,7 @@ wxSize wxSizer::Fit( wxWindow *window )
// hack for small screen devices where TLWs are always full screen // hack for small screen devices where TLWs are always full screen
if ( tlw->IsAlwaysMaximized() ) if ( tlw->IsAlwaysMaximized() )
{ {
// do nothing return tlw->GetClientSize();
return tlw->GetSize();
} }
// limit the window to the size of the display it is on // limit the window to the size of the display it is on
@@ -873,8 +874,22 @@ wxSize wxSizer::Fit( wxWindow *window )
if ( sizeMax.y != wxDefaultCoord && size.y > sizeMax.y ) if ( sizeMax.y != wxDefaultCoord && size.y > sizeMax.y )
size.y = sizeMax.y; size.y = sizeMax.y;
return size;
}
wxSize wxSizer::ComputeFittingWindowSize(wxWindow *window)
{
wxCHECK_MSG( window, wxDefaultSize, "window can't be NULL" );
return window->ClientToWindowSize(ComputeFittingClientSize(window));
}
wxSize wxSizer::Fit( wxWindow *window )
{
wxCHECK_MSG( window, wxDefaultSize, "window can't be NULL" );
// set client size // set client size
window->SetClientSize( size ); window->SetClientSize(ComputeFittingClientSize(window));
// return entire size // return entire size
return window->GetSize(); return window->GetSize();