X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8cf73271dd6f442a98e86b559d4a55c37e25b99f..65442ab650425a5f6a1d5d685e8df582401a9be7:/include/wx/mac/carbon/window.h diff --git a/include/wx/mac/carbon/window.h b/include/wx/mac/carbon/window.h index 807e261863..0890ca5cb5 100644 --- a/include/wx/mac/carbon/window.h +++ b/include/wx/mac/carbon/window.h @@ -17,6 +17,7 @@ #endif #include "wx/brush.h" +#include "wx/dc.h" // --------------------------------------------------------------------------- // forward declarations @@ -26,6 +27,10 @@ class WXDLLEXPORT wxButton; class WXDLLEXPORT wxScrollBar; class WXDLLEXPORT wxTopLevelWindowMac; +// internal implementation classes + +class wxMacControl ; + // --------------------------------------------------------------------------- // constants // --------------------------------------------------------------------------- @@ -39,24 +44,14 @@ class WXDLLEXPORT wxWindowMac: public wxWindowBase public: - wxWindowMac() - : m_macBackgroundBrush() - , m_macVisibleRegion() - , m_x(0), m_y(0), m_width(0), m_height(0) - , m_hScrollBar(NULL), m_vScrollBar(NULL) - , m_label(wxEmptyString) - { 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(); @@ -84,10 +79,17 @@ public: 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) - { return wxWindowBase::SetFont(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, @@ -115,34 +117,34 @@ public: // Accept files for dragging virtual void DragAcceptFiles(bool accept); - // Native resource loading (implemented in src/msw/nativdlg.cpp) - // FIXME: should they really be all virtual? - wxWindowMac* GetWindowChild1(wxWindowID id); - wxWindowMac* GetWindowChild(wxWindowID id); - // implementation from now on // -------------------------- 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 MacRootWindowToWindow( int *x , int *y ) const ; + void MacRootWindowToWindow( short *x , short *y ) const ; virtual wxString MacGetToolTipString( wxPoint &where ) ; // simple accessors // ---------------- -// WXHWND GetHWND() const { return m_hWnd; } -// void SetHWND(WXHWND hWnd) { m_hWnd = hWnd; } - virtual WXWidget GetHandle() const { return (WXWidget) NULL ; } + virtual WXWidget GetHandle() const ; +#if WXWIN_COMPATIBILITY_2_4 bool GetTransparentBackground() const { return m_backgroundTransparent; } 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 ) ; @@ -161,79 +163,128 @@ public: wxWindowMac *FindItem(long id) const; wxWindowMac *FindItemByHWND(WXHWND hWnd, bool controlOnly = FALSE) const; - // Make a Windows extended style from the given wxWindows window style - static WXDWORD MakeExtendedStyle(long style, - bool eliminateBorders = TRUE); - // Determine whether 3D effects are wanted - WXDWORD Determine3DEffects(WXDWORD defaultBorderStyle, bool *want3D) const; - - // MSW only: TRUE if this control is part of the main control - virtual bool ContainsHWND(WXHWND WXUNUSED(hWnd)) const { return FALSE; }; - - // Setup background and foreground colours correctly - virtual void SetupColours(); - public: - static bool MacGetWindowFromPoint( const wxPoint &point , wxWindowMac** outWin ) ; - virtual bool MacGetWindowFromPointSub( const wxPoint &point , wxWindowMac** outWin ) ; - virtual void MacRedraw( WXHRGN updatergn , long time , bool erase) ; - virtual bool MacCanFocus() const { return true ; } + virtual void MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool mouseStillDown ) ; + virtual bool MacDoRedraw( WXHRGN updatergn , long time ) ; + virtual bool MacCanFocus() const ; - virtual bool MacDispatchMouseEvent(wxMouseEvent& event ) ; // 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 ) ; - WXWindow MacGetRootWindow() const ; + virtual void RemoveChild( wxWindowBase *child ); + virtual void MacPaintBorders( int left , int top ) ; + WXWindow MacGetTopLevelWindowRef() const ; wxTopLevelWindowMac* MacGetTopLevelWindow() const ; - virtual WXWidget MacGetContainerForEmbedding() ; - - virtual long MacGetLeftBorderSize() const ; - virtual long MacGetRightBorderSize() const ; - virtual long MacGetTopBorderSize() const ; - virtual long MacGetBottomBorderSize() 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 coordinates of this item within the toplevel window may have changed - virtual void MacUpdateDimensions() {} + static long MacRemoveBordersFromStyle( long style ) ; + + virtual void MacSuperChangedPosition() ; // the absolute coortinates of this window's root have changed - virtual void MacTopLevelWindowChangedPosition() ; - virtual void MacSuperShown( bool show ) ; - virtual void MacSuperEnabled( bool enable ) ; - bool MacIsReallyShown() const ; - virtual void Update() ; - // for compatibility - void MacUpdateImmediately() { Update() ; } - virtual bool MacSetupCursor( const wxPoint& pt ) ; + 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 bool MacSetupCursor( const wxPoint& pt ) ; -// virtual bool MacSetPortDrawingParams( const Point & localOrigin, const Rect & clipRect, WindowRef window , wxWindowMac* rootwin ) ; -// virtual void MacGetPortParams(Point* localOrigin, Rect* clipRect, WindowRef *window , wxWindowMac** rootwin ) ; -// virtual void MacGetPortClientParams(Point* localOrigin, Rect* clipRect, WindowRef *window , wxWindowMac** rootwin) ; - const wxBrush& MacGetBackgroundBrush() ; - const wxRegion& MacGetVisibleRegion( bool respectChildrenAndSiblings = true ) ; - bool MacIsWindowScrollbar( const wxScrollBar* sb ) + virtual void MacSetBackgroundBrush( const wxBrush &brush ) ; + const wxBrush& MacGetBackgroundBrush() const { return m_macBackgroundBrush ; } + + // returns the visible region of this control in window ie non-client coordinates + + wxRegion MacGetVisibleRegion( bool includeOuterStructures = false ) ; + // returns true if children have to clipped to the content area (eg scrolled window) + virtual bool MacClipChildren() const { return false ; } + // 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) ; } - static wxWindowMac* s_lastMouseWindow ; -private: + + 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 + // + // 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 + void MacFlashInvalidAreas() ; +#if wxMAC_USE_CORE_GRAPHICS + void * MacGetCGContextRef() { return m_cgContextRef ; } + void MacSetCGContextRef(void * cg) { m_cgContextRef = cg ; } +#endif protected: - wxBrush m_macBackgroundBrush ; - wxRegion m_macVisibleRegion ; - int m_x ; - int m_y ; - int m_width ; - int m_height ; + // 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 peer object, allowing for cleaner API support + wxMacControl* m_peer ; +#if wxMAC_USE_CORE_GRAPHICS + void * m_cgContextRef ; +#endif + // 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 + 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 ; + wxScrollBar* m_hScrollBar ; + wxScrollBar* m_vScrollBar ; + wxString m_label ; - void MacCreateScrollBars( long style ) ; - void MacRepositionScrollBars() ; - + 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; virtual void DoClientToScreen( int *x, int *y ) const; virtual void DoScreenToClient( int *x, int *y ) const; virtual void DoGetPosition( int *x, int *y ) const; @@ -252,15 +303,22 @@ protected: // ::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 ) ; + #if wxUSE_TOOLTIPS virtual void DoSetToolTip( wxToolTip *tip ); #endif // wxUSE_TOOLTIPS +private : + private: // common part of all ctors void Init(); + WXEVENTHANDLERREF m_macControlEventHandler ; + + DECLARE_NO_COPY_CLASS(wxWindowMac) DECLARE_EVENT_TABLE() };