X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fb5246bead0df931f25bd73c9a03c356b180fcd1..d6906a06a24cf6dd081f1bc955c3255765a0b845:/include/wx/mac/carbon/window.h?ds=sidebyside diff --git a/include/wx/mac/carbon/window.h b/include/wx/mac/carbon/window.h index c067c572fe..76b9f3410f 100644 --- a/include/wx/mac/carbon/window.h +++ b/include/wx/mac/carbon/window.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: wx/mac/carbon/window.h +// Name: include/wx/mac/carbon/window.h // Purpose: wxWindowMac class // Author: Stefan Csomor // Modified by: @@ -15,22 +15,12 @@ #include "wx/brush.h" #include "wx/dc.h" -// --------------------------------------------------------------------------- -// forward declarations -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxButton; -class WXDLLEXPORT wxScrollBar; -class WXDLLEXPORT wxTopLevelWindowMac; - -// internal implementation classes +class WXDLLIMPEXP_FWD_CORE wxButton; +class WXDLLIMPEXP_FWD_CORE wxScrollBar; +class WXDLLIMPEXP_FWD_CORE wxTopLevelWindowMac; class wxMacControl ; -// --------------------------------------------------------------------------- -// constants -// --------------------------------------------------------------------------- - class WXDLLEXPORT wxWindowMac: public wxWindowBase { DECLARE_DYNAMIC_CLASS(wxWindowMac) @@ -39,64 +29,64 @@ class WXDLLEXPORT wxWindowMac: public wxWindowBase friend class wxPaintDC; public: + wxWindowMac(); - wxWindowMac() ; - - wxWindowMac(wxWindowMac *parent, + wxWindowMac( wxWindowMac *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, - const wxString& name = wxPanelNameStr) ; + const wxString& name = wxPanelNameStr ); virtual ~wxWindowMac(); - bool Create(wxWindowMac *parent, + bool Create( wxWindowMac *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, - const wxString& name = wxPanelNameStr); - + const wxString& name = wxPanelNameStr ); // implement base class pure virtuals - virtual void SetLabel( const wxString& label); + virtual void SetLabel( const wxString& label ); virtual wxString GetLabel() const; virtual void Raise(); virtual void Lower(); virtual bool Show( bool show = true ); - virtual bool Enable( bool enable = true ); virtual void SetFocus(); - virtual void WarpPointer(int x, int y); + virtual void WarpPointer( int x, int y ); virtual void Refresh( bool eraseBackground = true, - const wxRect *rect = (const wxRect *) NULL ); - virtual void Freeze() ; - virtual void Thaw() ; + const wxRect *rect = NULL ); + virtual void Freeze(); + virtual void Thaw(); + virtual bool IsFrozen() const; virtual void Update() ; - virtual void ClearBackground() ; + virtual void ClearBackground(); virtual bool SetCursor( const wxCursor &cursor ); - virtual bool SetFont( const wxFont &font ) ; + virtual bool SetFont( const wxFont &font ); virtual bool SetBackgroundColour( const wxColour &colour ); virtual bool SetForegroundColour( const wxColour &colour ); virtual int GetCharHeight() const; virtual int GetCharWidth() const; - virtual void GetTextExtent(const wxString& string, + virtual void GetTextExtent( const wxString& string, int *x, int *y, - int *descent = (int *) NULL, - int *externalLeading = (int *) NULL, - const wxFont *theFont = (const wxFont *) NULL) + int *descent = NULL, + int *externalLeading = NULL, + const wxFont *theFont = NULL ) const; - +protected: + virtual void DoEnable( bool enable ); virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); +public: virtual void SetScrollbar( int orient, int pos, int thumbVisible, int range, bool refresh = true ); virtual void SetScrollPos( int orient, int pos, bool refresh = true ); @@ -105,73 +95,86 @@ public: virtual int GetScrollRange( int orient ) const; virtual void ScrollWindow( int dx, int dy, const wxRect* rect = (wxRect *) NULL ); + virtual void AlwaysShowScrollbars(bool horz = true, bool vert = true); + virtual bool IsScrollbarAlwaysShown(int orient) const + { + return orient == wxHORIZONTAL ? m_hScrollBarAlwaysShown + : m_vScrollBarAlwaysShown; + } + virtual bool Reparent( wxWindowBase *newParent ); #if wxUSE_DRAG_AND_DROP virtual void SetDropTarget( wxDropTarget *dropTarget ); -#endif // wxUSE_DRAG_AND_DROP +#endif // Accept files for dragging - virtual void DragAcceptFiles(bool accept); + virtual void DragAcceptFiles( bool accept ); // implementation from now on // -------------------------- - void MacClientToRootWindow( int *x , int *y ) const ; - void MacRootWindowToClient( int *x , int *y ) const ; + void MacClientToRootWindow( int *x , int *y ) const; + void MacRootWindowToClient( int *x , int *y ) const; - void MacWindowToRootWindow( int *x , int *y ) const ; - void MacWindowToRootWindow( short *x , short *y ) const ; + void MacWindowToRootWindow( int *x , int *y ) const; + void MacWindowToRootWindow( short *x , short *y ) const; - void MacRootWindowToWindow( int *x , int *y ) const ; - void MacRootWindowToWindow( short *x , short *y ) const ; + void MacRootWindowToWindow( int *x , int *y ) const; + void MacRootWindowToWindow( short *x , short *y ) const; - virtual wxString MacGetToolTipString( wxPoint &where ) ; + virtual wxString MacGetToolTipString( wxPoint &where ); // simple accessors // ---------------- - virtual WXWidget GetHandle() const ; + virtual WXWidget GetHandle() const; -#if WXWIN_COMPATIBILITY_2_4 - bool GetTransparentBackground() const { return m_backgroundTransparent; } - void SetTransparent(bool t = true) { m_backgroundTransparent = t; } -#endif + virtual bool SetTransparent(wxByte alpha); + virtual bool CanSetTransparent(); + virtual wxByte GetTransparent() const ; // event handlers // -------------- - void OnSetFocus(wxFocusEvent& event) ; - void OnPaint(wxPaintEvent& event); - void OnNcPaint(wxNcPaintEvent& event); - void OnEraseBackground(wxEraseEvent& event); - void OnMouseEvent( wxMouseEvent &event ) ; + void OnPaint( wxPaintEvent& event ); + void OnNcPaint( wxNcPaintEvent& event ); + void OnEraseBackground(wxEraseEvent& event ); + void OnMouseEvent( wxMouseEvent &event ); - void MacOnScroll(wxScrollEvent&event ) ; + void MacOnScroll( wxScrollEvent&event ); - bool AcceptsFocus() const ; + virtual bool AcceptsFocus() const; + + virtual bool IsDoubleBuffered() const { return true; } + +public: + static long MacRemoveBordersFromStyle( long style ) ; public: void OnInternalIdle(); - // For implementation purposes - sometimes decorations make the client area - // smaller + // For implementation purposes: + // sometimes decorations make the client area smaller virtual wxPoint GetClientAreaOrigin() const; wxWindowMac *FindItem(long id) const; wxWindowMac *FindItemByHWND(WXHWND hWnd, bool controlOnly = false) const; -public: virtual void MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool mouseStillDown ) ; - virtual bool MacDoRedraw( WXHRGN updatergn , long time ) ; + virtual bool MacDoRedraw( void* updatergn , long time ) ; virtual bool MacCanFocus() const ; - // this should not be overriden in classes above wxWindowMac because it is called from its destructor via DeleteChildren + // this should not be overriden in classes above wxWindowMac + // because it is called from its destructor via DeleteChildren virtual void RemoveChild( wxWindowBase *child ); virtual void MacPaintBorders( int left , int top ) ; - // invalidates the borders and focus area around the control + void MacPaintGrowBox(); + + // invalidates the borders and focus area around the control; // must not be virtual as it will be called during destruction void MacInvalidateBorders() ; - WXWindow MacGetTopLevelWindowRef() const ; + + WXWindow MacGetTopLevelWindowRef() const ; wxTopLevelWindowMac* MacGetTopLevelWindow() const ; virtual long MacGetLeftBorderSize() const ; @@ -179,10 +182,9 @@ public: virtual long MacGetTopBorderSize() const ; virtual long MacGetBottomBorderSize() const ; - static long MacRemoveBordersFromStyle( long style ) ; - virtual void MacSuperChangedPosition() ; - // the absolute coortinates of this window's root have changed + + // absolute coordinates of this window's root have changed virtual void MacTopLevelWindowChangedPosition() ; virtual void MacChildAdded() ; @@ -199,74 +201,78 @@ public: virtual bool MacSetupCursor( const wxPoint& pt ) ; - virtual void MacSetBackgroundBrush( const wxBrush &brush ) ; - const wxBrush& MacGetBackgroundBrush() const { return m_macBackgroundBrush ; } - - // return the rectangle that would be visible of this control, regardless whether controls are hidden + // return the rectangle that would be visible of this control, + // regardless whether controls are hidden // only taking into account clipping by parent windows const wxRect& MacGetClippedClientRect() const ; const wxRect& MacGetClippedRect() const ; const wxRect& MacGetClippedRectWithOuterStructure() const ; + // returns the visible region of this control in window ie non-client coordinates const wxRegion& MacGetVisibleRegion( bool includeOuterStructures = false ) ; - // returns true if children have to clipped to the content area (eg scrolled window) + + // returns true if children have to clipped to the content area + // (e.g., scrolled windows) bool MacClipChildren() const { return m_clipChildren ; } void MacSetClipChildren( bool clip ) { m_clipChildren = clip ; } - // returns true if the grandchildren have to be clipped to the children's content area (eg - // splitter window) + + // returns true if the grandchildren need to be clipped to the children's content area + // (e.g., splitter windows) virtual bool MacClipGrandChildren() const { return false ; } - bool MacIsWindowScrollbar( const wxScrollBar* sb ) - { return (m_hScrollBar == sb || m_vScrollBar == sb) ; } + bool MacIsWindowScrollbar( const wxWindow* sb ) const + { return ((wxWindow*)m_hScrollBar == sb || (wxWindow*)m_vScrollBar == sb) ; } + virtual bool IsClientAreaChild(const wxWindow *child) const + { + return !MacIsWindowScrollbar(child) && + wxWindowBase::IsClientAreaChild(child); + } - wxList& GetSubcontrols() { return m_subControls; } virtual void MacInstallEventHandler(WXWidget native) ; - WXEVENTHANDLERREF MacGetControlEventHandler() { return m_macControlEventHandler ; } void MacPostControlCreate(const wxPoint& pos, const wxSize& size) ; -#ifndef __WXMAC_OSX__ - virtual void MacControlUserPaneDrawProc(wxInt16 part) ; - virtual wxInt16 MacControlUserPaneHitTestProc(wxInt16 x, wxInt16 y) ; - virtual wxInt16 MacControlUserPaneTrackingProc(wxInt16 x, wxInt16 y, void* actionProc) ; - virtual void MacControlUserPaneIdleProc() ; - virtual wxInt16 MacControlUserPaneKeyDownProc(wxInt16 keyCode, wxInt16 charCode, wxInt16 modifiers) ; - virtual void MacControlUserPaneActivateProc(bool activating) ; - virtual wxInt16 MacControlUserPaneFocusProc(wxInt16 action) ; - virtual void MacControlUserPaneBackgroundProc(void* info) ; -#endif - // translate wxWidgets coords into ones suitable to be passed to - // the CreateControl calls + wxList& GetSubcontrols() { return m_subControls; } + WXEVENTHANDLERREF MacGetControlEventHandler() { return m_macControlEventHandler ; } + + // translate wxWidgets coords into ones suitable + // to be passed to CreateControl calls // - // returns true if non default coords are returned, false otherwise + // returns true if non-default coords are returned, false otherwise bool MacGetBoundsForControl(const wxPoint& pos, const wxSize& size, int& x, int& y, int& w, int& h , bool adjustForOrigin ) const ; + // calculates the real window position and size from the native control void MacGetPositionAndSizeFromControl(int& x, int& y, int& w, int& h) const ; + // gets the inset from every part virtual void MacGetContentAreaInset( int &left , int &top , int &right , int &bottom ) ; - // flash the current invalid area, useful for debugging in OSX double buffered situation + // visibly flash the current invalid area: + // useful for debugging in OSX composited (double-buffered) situation void MacFlashInvalidAreas() ; // the 'true' OS level control for this wxWindow wxMacControl* GetPeer() const { return m_peer ; } -#if wxMAC_USE_CORE_GRAPHICS + void * MacGetCGContextRef() { return m_cgContextRef ; } void MacSetCGContextRef(void * cg) { m_cgContextRef = cg ; } -#endif + protected: - // For controls like radiobuttons which are really composite + // For controls like radio buttons which are genuinely composite wxList m_subControls; + // number of calls to Freeze() minus number of calls to Thaw() unsigned int m_frozenness; + // the peer object, allowing for cleaner API support - wxMacControl* m_peer ; -#if wxMAC_USE_CORE_GRAPHICS + wxMacControl * m_peer ; + void * m_cgContextRef ; -#endif + // cache the clipped rectangles within the window hierarchy void MacUpdateClippedRects() const ; + mutable bool m_cachedClippedRectValid ; mutable wxRect m_cachedClippedRectWithOuterStructure ; mutable wxRect m_cachedClippedRect ; @@ -274,37 +280,33 @@ protected: mutable wxRegion m_cachedClippedRegionWithOuterStructure ; mutable wxRegion m_cachedClippedRegion ; mutable wxRegion m_cachedClippedClientRegion ; + // true if is is not a native control but a wxWindow control bool m_macIsUserPane ; - wxBrush m_macBackgroundBrush ; - // topleft inset of the mac control from the wx top left corner + + // insets of the mac control from the wx top left corner wxPoint m_macTopLeftInset ; - // bottom right inset of the mac control from the wx bottom right corner wxPoint m_macBottomRightInset ; + wxByte m_macAlpha ; wxScrollBar* m_hScrollBar ; wxScrollBar* m_vScrollBar ; + bool m_hScrollBarAlwaysShown; + bool m_vScrollBarAlwaysShown; wxString m_label ; - // returns true if we do a sharp clip at the content area of this window + + // set to true if we do a sharp clip at the content area of this window // must be dynamic as eg a panel normally is not clipping precisely, but if // it becomes the target window of a scrolled window it has to... bool m_clipChildren ; virtual bool MacIsChildOfClientArea( const wxWindow* child ) const ; + bool MacHasScrollBarCorner() const; void MacCreateScrollBars( long style ) ; void MacRepositionScrollBars() ; void MacUpdateControlFont() ; - void MacPropagateVisibilityChanged() ; - void MacPropagateEnabledStateChanged() ; - void MacPropagateHiliteChanged() ; - - -#if WXWIN_COMPATIBILITY_2_4 - bool m_backgroundTransparent ; -#endif - // implement the base class pure virtuals virtual wxSize DoGetBestSize() const; virtual wxSize DoGetSizeFromClientSize( const wxSize & size ) const; @@ -325,26 +327,26 @@ protected: // from both DoSetSize() and DoSetClientSize() and would usually just call // ::MoveWindow() except for composite controls which will want to arrange // themselves inside the given rectangle - virtual void DoMoveWindow(int x, int y, int width, int height); - virtual void DoSetWindowVariant( wxWindowVariant variant ) ; - + virtual void DoMoveWindow( int x, int y, int width, int height ); + virtual void DoSetWindowVariant( wxWindowVariant variant ); #if wxUSE_TOOLTIPS virtual void DoSetToolTip( wxToolTip *tip ); -#endif // wxUSE_TOOLTIPS - -private : +#endif private: // common part of all ctors void Init(); - WXEVENTHANDLERREF m_macControlEventHandler ; + // show/hide scrollbars as needed, common part of SetScrollbar() and + // AlwaysShowScrollbars() + void DoUpdateScrollbarVisibility(); + WXEVENTHANDLERREF m_macControlEventHandler ; + DECLARE_NO_COPY_CLASS(wxWindowMac) DECLARE_EVENT_TABLE() }; -#endif - // _WX_WINDOW_H_ +#endif // _WX_WINDOW_H_