From: Robin Dunn Date: Thu, 10 Jun 1999 22:44:50 +0000 (+0000) Subject: Added wxWindowBase::CentreOnParent to allow top level windows to be X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/7631a29204a5a6a14c3ab6697455c48928ba6600 Added wxWindowBase::CentreOnParent to allow top level windows to be centered over their parent (if they have one) instead of the entire screen. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2754 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/latex/wx/window.tex b/docs/latex/wx/window.tex index 32d23e45ec..46b27b976b 100644 --- a/docs/latex/wx/window.tex +++ b/docs/latex/wx/window.tex @@ -122,9 +122,15 @@ release the capture. A synonym for \helpref{Centre}{wxwindowcentre}. +\membersection{wxWindow::CenterOnParent}\label{wxwindowcenteronparent} + +\func{void}{CenterOnParent}{\param{int}{ direction}} + +A synonym for \helpref{CentreOnParent}{wxwindowcentreonparent}. + \membersection{wxWindow::Centre}\label{wxwindowcentre} -\func{virtual void}{Centre}{\param{int}{ direction = wxHORIZONTAL}} +\func{void}{Centre}{\param{int}{ direction = wxHORIZONTAL}} Centres the window. @@ -143,6 +149,28 @@ relative to the panel. \helpref{wxWindow::Center}{wxwindowcenter} +\membersection{wxWindow::CentreOnParent}\label{wxwindowcentreonparent} + +\func{void}{CentreOnParent}{\param{int}{ direction = wxHORIZONTAL}} + +Centres the window. + +\wxheading{Parameters} + +\docparam{direction}{Specifies the direction for the centering. May be {\tt wxHORIZONTAL}, {\tt wxVERTICAL}\rtfsp +or {\tt wxBOTH}.} + +\wxheading{Remarks} + +This methods provides for a way to center top level windows over their +parents instead of the entire screen. If there is no parent or if the +window is not a top level window, then behaviour is the same as +\helpref{wxWindow::Centre}{wxwindowcentre}. + +\wxheading{See also} + +\helpref{wxWindow::CenterOnParent}{wxwindowcenteronparent} + \membersection{wxWindow::Clear}\label{wxwindowclear} \func{void}{Clear}{\void} @@ -717,7 +745,7 @@ Returns a pointer to the current validator for the window, or NULL if there is n \constfunc{long}{GetWindowStyleFlag}{\void} -Gets the window style that was passed to the consructor or {\bf Create} member. +Gets the window style that was passed to the consructor or {\bf Create} member. {\bf GetWindowStyle} is synonymous. \membersection{wxWindow::InitDialog}\label{wxwindowinitdialog} @@ -769,7 +797,7 @@ window). \func{void}{Layout}{\void} -Invokes the constraint-based layout algorithm for this window. +Invokes the constraint-based layout algorithm for this window. See \helpref{wxWindow::SetAutoLayout}{wxwindowsetautolayout} on when this function gets called automatically using auto layout. diff --git a/include/wx/window.h b/include/wx/window.h index 3fdcd5acf0..6edbb62524 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -259,6 +259,8 @@ public: // centre with respect to the the parent window void Centre( int direction = wxHORIZONTAL ); void Center( int direction = wxHORIZONTAL ) { Centre(direction); } + void CentreOnParent(int direction = wxHORIZONTAL ); + void CenterOnParent(int direction = wxHORIZONTAL ) { CentreOnParent(direction); } // set window size to wrap around its children virtual void Fit(); diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index a877e35486..582ea1e9bb 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -316,6 +316,34 @@ void wxWindowBase::Centre(int direction) Move(new_x, new_y); } +// Center TopLevel windows over thier parent instead of the whole screen +void wxWindowBase::CentreOnParent(int direction) +{ + wxPoint ppos; + wxSize psze; + wxSize wsze; + wxWindow* parent = GetParent(); + int x, y; + + if (!parent || !IsTopLevel()) { + Centre(direction); + return; + } + + psze = parent->GetSize(); + ppos = parent->ClientToScreen(wxPoint(0,0)); + wsze = GetSize(); + + x = y = -1; + + if (direction == wxBOTH || direction == wxHORIZONTAL) + x = ppos.x + (psze.x - wsze.x)/2; + if (direction == wxBOTH || direction == wxVERTICAL) + y = ppos.y + (psze.y - wsze.y)/2; + + Move(x, y); +} + // fits the window around the children void wxWindowBase::Fit() {