X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8d4c48688a191ced05557375d094c29cc41ccf84..da9e956384a0619a0ecaa0bd1e4ba26b133b60a9:/include/wx/mac/carbon/window.h diff --git a/include/wx/mac/carbon/window.h b/include/wx/mac/carbon/window.h index 5c9179d1ab..c067c572fe 100644 --- a/include/wx/mac/carbon/window.h +++ b/include/wx/mac/carbon/window.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: window.h +// Name: wx/mac/carbon/window.h // Purpose: wxWindowMac class // Author: Stefan Csomor // Modified by: @@ -12,11 +12,8 @@ #ifndef _WX_WINDOW_H_ #define _WX_WINDOW_H_ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma interface "window.h" -#endif - #include "wx/brush.h" +#include "wx/dc.h" // --------------------------------------------------------------------------- // forward declarations @@ -26,6 +23,10 @@ class WXDLLEXPORT wxButton; class WXDLLEXPORT wxScrollBar; class WXDLLEXPORT wxTopLevelWindowMac; +// internal implementation classes + +class wxMacControl ; + // --------------------------------------------------------------------------- // constants // --------------------------------------------------------------------------- @@ -33,25 +34,20 @@ class WXDLLEXPORT wxTopLevelWindowMac; class WXDLLEXPORT wxWindowMac: public wxWindowBase { DECLARE_DYNAMIC_CLASS(wxWindowMac) - + friend class wxDC; friend class wxPaintDC; - + public: - - wxWindowMac() - { Init(); } + + wxWindowMac() ; wxWindowMac(wxWindowMac *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, - const wxString& name = wxPanelNameStr) - { - Init(); - Create(parent, id, pos, size, style, name); - } + const wxString& name = wxPanelNameStr) ; virtual ~wxWindowMac(); @@ -64,24 +60,27 @@ public: // implement base class pure virtuals - virtual void SetTitle( const wxString& title); - virtual wxString GetTitle() const; + 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 bool Show( bool show = true ); + virtual bool Enable( bool enable = true ); virtual void SetFocus(); virtual void WarpPointer(int x, int y); - virtual void Refresh( bool eraseBackground = TRUE, + virtual void Refresh( bool eraseBackground = true, const wxRect *rect = (const wxRect *) NULL ); virtual void Freeze() ; virtual void Thaw() ; + virtual void Update() ; + virtual void ClearBackground() ; + virtual bool SetCursor( const wxCursor &cursor ); virtual bool SetFont( const wxFont &font ) ; virtual bool SetBackgroundColour( const wxColour &colour ); @@ -99,13 +98,14 @@ public: virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); virtual void SetScrollbar( int orient, int pos, int thumbVisible, - int range, bool refresh = TRUE ); - virtual void SetScrollPos( int orient, int pos, bool refresh = TRUE ); + int range, bool refresh = true ); + virtual void SetScrollPos( int orient, int pos, bool refresh = true ); virtual int GetScrollPos( int orient ) const; virtual int GetScrollThumb( int orient ) const; virtual int GetScrollRange( int orient ) const; virtual void ScrollWindow( int dx, int dy, const wxRect* rect = (wxRect *) NULL ); + virtual bool Reparent( wxWindowBase *newParent ); #if wxUSE_DRAG_AND_DROP virtual void SetDropTarget( wxDropTarget *dropTarget ); @@ -125,28 +125,29 @@ public: void MacRootWindowToWindow( int *x , int *y ) const ; void MacRootWindowToWindow( short *x , short *y ) const ; - + virtual wxString MacGetToolTipString( wxPoint &where ) ; // simple accessors // ---------------- - virtual WXWidget GetHandle() const { return m_macControl ; } + virtual WXWidget GetHandle() const ; #if WXWIN_COMPATIBILITY_2_4 bool GetTransparentBackground() const { return m_backgroundTransparent; } - void SetTransparent(bool t = TRUE) { m_backgroundTransparent = t; } + void SetTransparent(bool t = true) { m_backgroundTransparent = t; } #endif // event handlers // -------------- void OnSetFocus(wxFocusEvent& event) ; + void OnPaint(wxPaintEvent& event); void OnNcPaint(wxNcPaintEvent& event); void OnEraseBackground(wxEraseEvent& event); void OnMouseEvent( wxMouseEvent &event ) ; void MacOnScroll(wxScrollEvent&event ) ; - + bool AcceptsFocus() const ; public: @@ -157,60 +158,71 @@ public: virtual wxPoint GetClientAreaOrigin() const; wxWindowMac *FindItem(long id) const; - wxWindowMac *FindItemByHWND(WXHWND hWnd, bool controlOnly = FALSE) 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 void MacRedraw( WXHRGN updatergn , long time , bool erase) ; virtual bool MacCanFocus() const ; - + // 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 + // must not be virtual as it will be called during destruction + void MacInvalidateBorders() ; WXWindow MacGetTopLevelWindowRef() const ; wxTopLevelWindowMac* MacGetTopLevelWindow() const ; - + virtual long MacGetLeftBorderSize() const ; virtual long MacGetRightBorderSize() const ; 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 virtual void MacTopLevelWindowChangedPosition() ; - + + virtual void MacChildAdded() ; virtual void MacVisibilityChanged() ; virtual void MacEnabledStateChanged() ; virtual void MacHiliteChanged() ; virtual wxInt32 MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ; - + bool MacIsReallyShown() ; bool MacIsReallyEnabled() ; bool MacIsReallyHilited() ; - - bool MacIsUserPane() { return m_macIsUserPane; } - virtual void Update() ; + bool MacIsUserPane() { return m_macIsUserPane; } + virtual bool MacSetupCursor( const wxPoint& pt ) ; - - virtual void MacSetBackgroundBrush( const wxBrush &brush ) { m_macBackgroundBrush = brush ; } + + 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 + // 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 - - wxRegion MacGetVisibleRegion( bool includeOuterStructures = false ) ; + const wxRegion& MacGetVisibleRegion( bool includeOuterStructures = false ) ; + // returns true if children have to clipped to the content area (eg scrolled window) + 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) + virtual bool MacClipGrandChildren() const { return false ; } bool MacIsWindowScrollbar( const wxScrollBar* sb ) { return (m_hScrollBar == sb || m_vScrollBar == sb) ; } wxList& GetSubcontrols() { return m_subControls; } - virtual void MacInstallEventHandler() ; - virtual void MacRedrawControl(); + 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) ; @@ -219,11 +231,11 @@ public: 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 // - // 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, @@ -237,25 +249,49 @@ public: // flash the current invalid area, useful for debugging in OSX 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 wxList m_subControls; // number of calls to Freeze() minus number of calls to Thaw() unsigned int m_frozenness; - // the true native ControlRef / = HIViewRef on OSX - WXWidget m_macControl ; + // the peer object, allowing for cleaner API support + wxMacControl* m_peer ; +#if wxMAC_USE_CORE_GRAPHICS + 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 ; + mutable wxRect m_cachedClippedClientRect ; + 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 ; + bool m_macIsUserPane ; wxBrush m_macBackgroundBrush ; // topleft inset 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 ; - + wxScrollBar* m_hScrollBar ; wxScrollBar* m_vScrollBar ; wxString m_label ; - + // returns 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 ; + void MacCreateScrollBars( long style ) ; void MacRepositionScrollBars() ; void MacUpdateControlFont() ; @@ -263,15 +299,15 @@ protected: 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; + virtual wxSize DoGetBestSize() const; + virtual wxSize DoGetSizeFromClientSize( const wxSize & size ) const; virtual void DoClientToScreen( int *x, int *y ) const; virtual void DoScreenToClient( int *x, int *y ) const; virtual void DoGetPosition( int *x, int *y ) const; @@ -291,7 +327,7 @@ protected: // themselves inside the given rectangle virtual void DoMoveWindow(int x, int y, int width, int height); virtual void DoSetWindowVariant( wxWindowVariant variant ) ; - + #if wxUSE_TOOLTIPS virtual void DoSetToolTip( wxToolTip *tip );