X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/878ddad57a352a5609fd7bfd63406ed5f2aac564..8f9d20d16f54a088aea5fb5e826bf1690efac2ff:/src/common/wincmn.cpp diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index bf4d550a20..9ac1028a50 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -77,6 +77,10 @@ #include "wx/caret.h" #endif // wxUSE_CARET +#if wxUSE_DISPLAY + #include "wx/display.h" +#endif + #if wxUSE_SYSTEM_OPTIONS #include "wx/sysopt.h" #endif @@ -211,6 +215,9 @@ wxWindowBase::wxWindowBase() // VZ: this one shouldn't exist... m_isBeingDeleted = false; + + // Reserved for future use + m_windowReserved = NULL; } // common part of window creation process @@ -431,6 +438,21 @@ void wxWindowBase::Centre(int direction) if ( direction & wxCENTRE_ON_SCREEN ) { + //RN: If we are using wxDisplay we get + //the dimensions of the monitor the window is on, + //otherwise we get the dimensions of the primary monitor + //FIXME: wxDisplay::GetFromWindow only implemented on MSW +#if wxUSE_DISPLAY && defined(__WXMSW__) + int nDisplay = wxDisplay::GetFromWindow((wxWindow*)this); + if(nDisplay != wxNOT_FOUND) + { + wxDisplay windowDisplay(nDisplay); + wxRect displayRect = windowDisplay.GetGeometry(); + widthParent = displayRect.width; + heightParent = displayRect.height; + } + else +#endif // centre with respect to the whole screen wxDisplaySize(&widthParent, &heightParent); } @@ -471,6 +493,9 @@ void wxWindowBase::Centre(int direction) xNew += posParent.x; yNew += posParent.y; + // FIXME: This needs to get the client display rect of the display + // the window is (via wxDisplay::GetFromWindow). + // Base size of the visible dimensions of the display // to take into account the taskbar. And the Mac menu bar at top. wxRect clientrect = wxGetClientDisplayRect(); @@ -649,13 +674,19 @@ wxSize wxWindowBase::DoGetBestSize() const } else // ! has children { - // For a generic window there is no natural best size - just use - // either the minimum size if there is one, or the current size. - // These are returned as-is, unadjusted by the client size difference. - if ( GetMinSize().IsFullySpecified() ) - return GetMinSize(); - else - return GetSize(); + // for a generic window there is no natural best size so, if the + // minimal size is not set, use the current size but take care to + // remember it as minimal size for the next time because our best size + // should be constant: otherwise we could get into a situation when the + // window is initially at some size, then expanded to a larger size and + // then, when the containing window is shrunk back (because our initial + // best size had been used for computing the parent min size), we can't + // be shrunk back any more because our best size is now bigger + if ( !GetMinSize().IsFullySpecified() ) + wxConstCast(this, wxWindowBase)->SetMinSize(GetSize()); + + // return as-is, unadjusted by the client size difference. + return GetMinSize(); } // Add any difference between size and client size @@ -699,7 +730,7 @@ void wxWindowBase::SetBestFittingSize(const wxSize& size) // by default the origin is not shifted wxPoint wxWindowBase::GetClientAreaOrigin() const { - return wxPoint(); + return wxPoint(0,0); } // set the min/max size of the window @@ -789,10 +820,17 @@ void wxWindowBase::DoSetVirtualSize( int x, int y ) wxSize wxWindowBase::DoGetVirtualSize() const { - if (m_virtualSize == wxDefaultSize) - return GetClientSize(); + if ( m_virtualSize.IsFullySpecified() ) + return m_virtualSize; + + wxSize size = GetClientSize(); + if ( m_virtualSize.x != wxDefaultCoord ) + size.x = m_virtualSize.x; + + if ( m_virtualSize.y != wxDefaultCoord ) + size.y = m_virtualSize.y; - return m_virtualSize; + return size; } // ---------------------------------------------------------------------------- @@ -1015,8 +1053,17 @@ wxWindowBase::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) wxVisualAttributes attrs; attrs.font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); attrs.colFg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); - attrs.colBg = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE); + // On Smartphone/PocketPC, wxSYS_COLOUR_WINDOW is a better reflection of + // the usual background colour than wxSYS_COLOUR_BTNFACE. + // It's a pity that wxSYS_COLOUR_WINDOW isn't always a suitable background + // colour on other platforms. + +#if defined(__WXWINCE__) && (defined(__SMARTPHONE__) || defined(__POCKETPC__)) + attrs.colBg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); +#else + attrs.colBg = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE); +#endif return attrs; } @@ -2228,7 +2275,7 @@ void wxWindowBase::OnMiddleClick( wxMouseEvent& event ) wxMessageBox(wxString::Format( _T( - " wxWidgets Library (%s port)\nVersion %u.%u.%u%s%s, compiled at %s %s\n Copyright (c) 1995-2004 wxWidgets team" + " wxWidgets Library (%s port)\nVersion %u.%u.%u%s%s, compiled at %s %s\n Copyright (c) 1995-2005 wxWidgets team" ), port.c_str(), wxMAJOR_VERSION, @@ -2288,15 +2335,22 @@ wxAccessible* wxWindowBase::CreateAccessible() #endif -#if !wxUSE_STL // ---------------------------------------------------------------------------- // list classes implementation // ---------------------------------------------------------------------------- +#if wxUSE_STL + +#include +WX_DEFINE_LIST(wxWindowList); + +#else + void wxWindowListNode::DeleteData() { delete (wxWindow *)GetData(); } + #endif // ----------------------------------------------------------------------------