X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/422d0ff0bec79832494fe4605ffdcf8e87ba6c03..8482e4bdb9928fe9982ac214aee345b19894b39b:/src/common/wincmn.cpp diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index afcb8f9670..06e6e6f274 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -77,6 +77,10 @@ #include "wx/caret.h" #endif // wxUSE_CARET +#if wxUSE_SYSTEM_OPTIONS + #include "wx/sysopt.h" +#endif + // ---------------------------------------------------------------------------- // static data // ---------------------------------------------------------------------------- @@ -153,6 +157,8 @@ wxWindowBase::wxWindowBase() m_exStyle = m_windowStyle = 0; + m_backgroundStyle = wxBG_STYLE_SYSTEM; + #if wxUSE_CONSTRAINTS // no constraints whatsoever m_constraints = (wxLayoutConstraints *) NULL; @@ -191,6 +197,12 @@ wxWindowBase::wxWindowBase() m_maxVirtualHeight = wxDefaultCoord; m_windowVariant = wxWINDOW_VARIANT_NORMAL; +#if wxUSE_SYSTEM_OPTIONS + if ( wxSystemOptions::HasOption(wxWINDOW_DEFAULT_VARIANT) ) + { + m_windowVariant = (wxWindowVariant) wxSystemOptions::GetOptionInt( wxWINDOW_DEFAULT_VARIANT ) ; + } +#endif // Whether we're using the current theme for this window (wxGTK only for now) m_themeEnabled = false; @@ -451,9 +463,8 @@ void wxWindowBase::Centre(int direction) yNew += posParent.y; // Base size of the visible dimensions of the display - // to take into account the taskbar - wxRect rect = wxGetClientDisplayRect(); - wxSize size (rect.width,rect.height); + // to take into account the taskbar. And the Mac menu bar at top. + wxRect clientrect = wxGetClientDisplayRect(); // NB: in wxMSW, negative position may not neccessary mean "out of screen", // but it may mean that the window is placed on other than the main @@ -461,25 +472,25 @@ void wxWindowBase::Centre(int direction) // if the parent is at least partially present here. if (posParent.x + widthParent >= 0) // if parent is (partially) on the main display { - if (xNew < 0) - xNew = 0; - else if (xNew+width > size.x) - xNew = size.x-width-1; + if (xNew < clientrect.GetLeft()) + xNew = clientrect.GetLeft(); + else if (xNew + width > clientrect.GetRight()) + xNew = clientrect.GetRight() - width; } if (posParent.y + heightParent >= 0) // if parent is (partially) on the main display { - if (yNew+height > size.y) - yNew = size.y-height-1; + if (yNew + height > clientrect.GetBottom()) + yNew = clientrect.GetBottom() - height; // Make certain that the title bar is initially visible // always, even if this would push the bottom of the - // dialog of the visible area of the display - if (yNew < 0) - yNew = 0; + // dialog off the visible area of the display + if (yNew < clientrect.GetTop()) + yNew = clientrect.GetTop(); } // move the window to this position (keeping the old size but using - // SetSize() and not Move() to allow xNew and/or yNew to be -1) + // SetSize() and not Move() to allow xNew and/or yNew to be wxDefaultCoord) SetSize(xNew, yNew, width, height, wxSIZE_ALLOW_MINUS_ONE); } @@ -507,7 +518,7 @@ void wxWindowBase::FitInside() static bool wxHasRealChildren(const wxWindowBase* win) { int realChildCount = 0; - + for ( wxWindowList::compatibility_iterator node = win->GetChildren().GetFirst(); node; node = node->GetNext() ) @@ -649,7 +660,7 @@ void wxWindowBase::SetBestFittingSize(const wxSize& size) // Merge the size with the best size if needed wxSize best = GetBestFittingSize(); - + // If the current size doesn't match then change it if (GetSize() != best) SetSize(best); @@ -663,9 +674,9 @@ wxPoint wxWindowBase::GetClientAreaOrigin() const } // set the min/max size of the window -void wxWindowBase::SetSizeHints(int minW, int minH, - int maxW, int maxH, - int WXUNUSED(incW), int WXUNUSED(incH)) +void wxWindowBase::DoSetSizeHints(int minW, int minH, + int maxW, int maxH, + int WXUNUSED(incW), int WXUNUSED(incH)) { // setting min width greater than max width leads to infinite loops under // X11 and generally doesn't make any sense, so don't allow it @@ -1016,7 +1027,7 @@ wxColour wxWindowBase::GetForegroundColour() const bool wxWindowBase::SetBackgroundColour( const wxColour &colour ) { - if ( colour == m_backgroundColour ) + if ( colour == m_backgroundColour ) return false; m_hasBgCol = colour.Ok(); @@ -1082,6 +1093,8 @@ bool wxWindowBase::SetFont(const wxFont& font) m_hasFont = font.Ok(); m_inheritFont = m_hasFont; + InvalidateBestSize(); + return true; } @@ -2076,10 +2089,10 @@ wxPoint wxWindowBase::ConvertPixelsToDialog(const wxPoint& pt) { int charWidth = GetCharWidth(); int charHeight = GetCharHeight(); - wxPoint pt2(-1, -1); - if (pt.x != -1) + wxPoint pt2 = wxDefaultPosition; + if (pt.x != wxDefaultCoord) pt2.x = (int) ((pt.x * 4) / charWidth); - if (pt.y != -1) + if (pt.y != wxDefaultCoord) pt2.y = (int) ((pt.y * 8) / charHeight); return pt2; @@ -2089,10 +2102,10 @@ wxPoint wxWindowBase::ConvertDialogToPixels(const wxPoint& pt) { int charWidth = GetCharWidth(); int charHeight = GetCharHeight(); - wxPoint pt2(-1, -1); - if (pt.x != -1) + wxPoint pt2 = wxDefaultPosition; + if (pt.x != wxDefaultCoord) pt2.x = (int) ((pt.x * charWidth) / 4); - if (pt.y != -1) + if (pt.y != wxDefaultCoord) pt2.y = (int) ((pt.y * charHeight) / 8); return pt2; @@ -2454,6 +2467,16 @@ void wxWindowBase::DoMoveInTabOrder(wxWindow *win, MoveKind move) } } +// ---------------------------------------------------------------------------- +// focus handling +// ---------------------------------------------------------------------------- + +/*static*/ wxWindow* wxWindowBase::FindFocus() +{ + wxWindowBase *win = DoFindFocus(); + return win ? win->GetMainWindowOfCompositeControl() : NULL; +} + // ---------------------------------------------------------------------------- // global functions // ---------------------------------------------------------------------------- @@ -2873,7 +2896,7 @@ wxAccStatus wxWindowAccessible::GetFocus(int* WXUNUSED(childId), wxAccessible** // Gets a variant representing the selected children // of this object. // Acceptable values: -// - a null variant (IsNull() returns TRUE) +// - a null variant (IsNull() returns true) // - a list variant (GetType() == wxT("list") // - an integer representing the selected child element, // or 0 if this object is selected (GetType() == wxT("long")