X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/14421681253f09f119dad82364f5ada40f58f2fc..66c2bf7b1d9326fb650acfaae22ec50528cfbf7c:/include/wx/window.h diff --git a/include/wx/window.h b/include/wx/window.h index c4442b2141..199c4b7ef3 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -4,7 +4,6 @@ // Author: Vadim Zeitlin // Modified by: Ron Lee // Created: 01/02/97 -// RCS-ID: $Id$ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -379,6 +378,13 @@ public: *h = s.y; } + // Determine the best size in the other direction if one of them is + // fixed. This is used with windows that can wrap their contents and + // returns input-independent best size for the others. + int GetBestHeight(int width) const; + int GetBestWidth(int height) const; + + void SetScrollHelper( wxScrollHelper *sh ) { m_scrollHelper = sh; } wxScrollHelper *GetScrollHelper() { return m_scrollHelper; } @@ -514,6 +520,11 @@ public: return wxSize( wxMax( client.x, best.x ), wxMax( client.y, best.y ) ); } + // returns the magnification of the content of this window + // eg 2.0 for a window on a retina screen + virtual double GetContentScaleFactor() const + { return 1.0; } + // return the size of the left/right and top/bottom borders in x and y // components of the result respectively virtual wxSize GetWindowBorderSize() const; @@ -548,6 +559,43 @@ public: // this is the same as SendSizeEventToParent() but using PostSizeEvent() void PostSizeEventToParent() { SendSizeEventToParent(wxSEND_EVENT_POST); } + // These functions should be used before repositioning the children of + // this window to reduce flicker or, in MSW case, even avoid display + // corruption in some situations (so they're more than just optimization). + // + // EndRepositioningChildren() should be called if and only if + // BeginRepositioningChildren() returns true. To ensure that this is always + // done automatically, use ChildrenRepositioningGuard class below. + virtual bool BeginRepositioningChildren() { return false; } + virtual void EndRepositioningChildren() { } + + // A simple helper which ensures that EndRepositioningChildren() is called + // from its dtor if and only if calling BeginRepositioningChildren() from + // the ctor returned true. + class ChildrenRepositioningGuard + { + public: + // Notice that window can be NULL here, for convenience. In this case + // this class simply doesn't do anything. + wxEXPLICIT ChildrenRepositioningGuard(wxWindowBase* win) + : m_win(win), + m_callEnd(win && win->BeginRepositioningChildren()) + { + } + + ~ChildrenRepositioningGuard() + { + if ( m_callEnd ) + m_win->EndRepositioningChildren(); + } + + private: + wxWindowBase* const m_win; + const bool m_callEnd; + + wxDECLARE_NO_COPY_CLASS(ChildrenRepositioningGuard); + }; + // window state // ------------ @@ -623,9 +671,10 @@ public: bool HasExtraStyle(int exFlag) const { return (m_exStyle & exFlag) != 0; } +#if WXWIN_COMPATIBILITY_2_8 // make the window modal (all other windows unresponsive) - virtual void MakeModal(bool modal = true); - + wxDEPRECATED( virtual void MakeModal(bool modal = true) ); +#endif // (primitive) theming support // --------------------------- @@ -674,8 +723,13 @@ public: virtual bool AcceptsFocusFromKeyboard() const { return AcceptsFocus(); } - // this is mostly a helper for the various functions using it below - bool CanBeFocused() const { return IsShown() && IsEnabled(); } + // Can this window be focused right now, in its current state? This + // shouldn't be called at all if AcceptsFocus() returns false. + // + // It is a convenient helper for the various functions using it below + // but also a hook allowing to override the default logic for some rare + // cases (currently just wxRadioBox in wxMSW) when it's inappropriate. + virtual bool CanBeFocused() const { return IsShown() && IsEnabled(); } // can this window itself have focus? bool IsFocusable() const { return AcceptsFocus() && CanBeFocused(); } @@ -739,8 +793,12 @@ public: // is this window a top level one? virtual bool IsTopLevel() const; + // is this window a child or grand child of this one (inside the same + // TLW)? + bool IsDescendant(wxWindowBase* win) const; + // it doesn't really change parent, use Reparent() instead - void SetParent( wxWindowBase *parent ) { m_parent = (wxWindow *)parent; } + void SetParent( wxWindowBase *parent ); // change the real parent of this window, return true if the parent // was changed, false otherwise (error or newParent == oldParent) virtual bool Reparent( wxWindowBase *newParent ); @@ -1163,11 +1221,7 @@ public: // ---------- // can the window have the scrollbar in this orientation? - bool CanScroll(int orient) const - { - return (m_windowStyle & - (orient == wxHORIZONTAL ? wxHSCROLL : wxVSCROLL)) != 0; - } + virtual bool CanScroll(int orient) const; // does the window have the scrollbar in this orientation? bool HasScrollbar(int orient) const; @@ -1499,11 +1553,6 @@ protected: // widgets state are necessary virtual void DoEnable(bool WXUNUSED(enable)) { } - // called when the on-screen widget state changes and provides an - // an opportunity for the widget to update its visual state (colours, - // fonts, anything else) as necessary - virtual void OnEnabled(bool WXUNUSED(enabled)) { } - // the window id - a number which uniquely identifies a window among // its siblings unless it is wxID_ANY @@ -1682,6 +1731,14 @@ protected: // (GetBorderSize() will be used to add them) virtual wxSize DoGetBestClientSize() const { return wxDefaultSize; } + // These two methods can be overridden to implement intelligent + // width-for-height and/or height-for-width best size determination for the + // window. By default the fixed best size is used. + virtual int DoGetBestClientHeight(int WXUNUSED(width)) const + { return wxDefaultCoord; } + virtual int DoGetBestClientWidth(int WXUNUSED(height)) const + { return wxDefaultCoord; } + // this is the virtual function to be overridden in any derived class which // wants to change how SetSize() or Move() works - it is called by all // versions of these functions in the base class @@ -1748,7 +1805,7 @@ protected: static void NotifyCaptureLost(); private: - // recursively call our own and our children OnEnabled() when the + // recursively call our own and our children DoEnable() when the // enabled/disabled status changed because a parent window had been // enabled/disabled void NotifyWindowOnEnableChange(bool enabled); @@ -1769,15 +1826,6 @@ private: // base for dialog unit conversion, i.e. average character size wxSize GetDlgUnitBase() const; - // the stack of windows which have captured the mouse - static struct WXDLLIMPEXP_FWD_CORE wxWindowNext *ms_winCaptureNext; - - // the window that currently has mouse capture - static wxWindow *ms_winCaptureCurrent; - - // indicates if execution is inside CaptureMouse/ReleaseMouse - static bool ms_winCaptureChanging; - // number of Freeze() calls minus the number of Thaw() calls: we're frozen // (i.e. not being updated) if it is positive