X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4eb5a0ec0421b3dba1c46c1dcb27a711af4bec36..8e77fd8bca165aab9709649d79a7cbc6a172d4e1:/include/wx/osx/window.h?ds=sidebyside diff --git a/include/wx/osx/window.h b/include/wx/osx/window.h index 1137022d21..3af0c97038 100644 --- a/include/wx/osx/window.h +++ b/include/wx/osx/window.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: include/wx/mac/carbon/window.h +// Name: wx/osx/window.h // Purpose: wxWindowMac class // Author: Stefan Csomor // Modified by: @@ -17,10 +17,17 @@ class WXDLLIMPEXP_FWD_CORE wxButton; class WXDLLIMPEXP_FWD_CORE wxScrollBar; +class WXDLLIMPEXP_FWD_CORE wxPanel; class WXDLLIMPEXP_FWD_CORE wxNonOwnedWindow; -class WXDLLIMPEXP_FWD_CORE wxMacControl ; -class WXDLLIMPEXP_FWD_CORE wxWidgetImpl ; +#if wxOSX_USE_CARBON + class WXDLLIMPEXP_FWD_CORE wxMacControl ; + typedef wxMacControl wxOSXWidgetImpl; +#elif wxOSX_USE_COCOA_OR_IPHONE + class WXDLLIMPEXP_FWD_CORE wxWidgetImpl ; + typedef wxWidgetImpl wxOSXWidgetImpl; +#endif + class WXDLLIMPEXP_CORE wxWindowMac: public wxWindowBase { @@ -48,6 +55,8 @@ public: long style = 0, const wxString& name = wxPanelNameStr ); + virtual void SendSizeEvent(int flags = 0); + // implement base class pure virtuals virtual void SetLabel( const wxString& label ); virtual wxString GetLabel() const; @@ -56,6 +65,16 @@ public: virtual void Lower(); virtual bool Show( bool show = true ); + virtual bool ShowWithEffect(wxShowEffect effect, + unsigned timeout = 0) + { + return OSXShowWithEffect(true, effect, timeout); + } + virtual bool HideWithEffect(wxShowEffect effect, + unsigned timeout = 0) + { + return OSXShowWithEffect(false, effect, timeout); + } virtual bool IsShownOnScreen() const; @@ -74,23 +93,11 @@ public: virtual bool SetBackgroundColour( const wxColour &colour ); virtual bool SetForegroundColour( const wxColour &colour ); + virtual bool SetBackgroundStyle(wxBackgroundStyle style); + virtual int GetCharHeight() const; virtual int GetCharWidth() const; - virtual void GetTextExtent( const wxString& string, - int *x, int *y, - int *descent = NULL, - int *externalLeading = NULL, - const wxFont *theFont = NULL ) - const; -protected: - virtual void DoEnable( bool enable ); -#if wxUSE_MENUS - virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); -#endif - - virtual void DoFreeze(); - virtual void DoThaw(); - + public: virtual void SetScrollbar( int orient, int pos, int thumbVisible, int range, bool refresh = true ); @@ -109,6 +116,14 @@ public: virtual bool Reparent( wxWindowBase *newParent ); +#if wxUSE_HOTKEY && wxOSX_USE_COCOA_OR_CARBON + // hot keys (system wide accelerators) + // ----------------------------------- + + virtual bool RegisterHotKey(int hotkeyId, int modifiers, int keycode); + virtual bool UnregisterHotKey(int hotkeyId); +#endif // wxUSE_HOTKEY + #if wxUSE_DRAG_AND_DROP virtual void SetDropTarget( wxDropTarget *dropTarget ); #endif @@ -138,9 +153,7 @@ public: // event handlers // -------------- - void OnPaint( wxPaintEvent& event ); - void OnNcPaint( wxNcPaintEvent& event ); - void OnEraseBackground(wxEraseEvent& event ); + void OnMouseEvent( wxMouseEvent &event ); void MacOnScroll( wxScrollEvent&event ); @@ -153,8 +166,6 @@ public: static long MacRemoveBordersFromStyle( long style ) ; public: - void OnInternalIdle(); - // For implementation purposes: // sometimes decorations make the client area smaller virtual wxPoint GetClientAreaOrigin() const; @@ -163,11 +174,12 @@ public: wxWindowMac *FindItemByHWND(WXHWND hWnd, bool controlOnly = false) const; virtual void TriggerScrollEvent( wxEventType scrollEvent ) ; - virtual bool MacDoRedraw( void* updatergn , long time ) ; - - // this should not be overriden in classes above wxWindowMac + // this should not be overridden in classes above wxWindowMac // because it is called from its destructor via DeleteChildren virtual void RemoveChild( wxWindowBase *child ); + + virtual bool MacDoRedraw( long time ) ; + virtual void MacPaintChildrenBorders(); virtual void MacPaintBorders( int left , int top ) ; void MacPaintGrowBox(); @@ -178,6 +190,7 @@ public: WXWindow MacGetTopLevelWindowRef() const ; wxNonOwnedWindow* MacGetTopLevelWindow() const ; + virtual long MacGetWXBorderSize() const; virtual long MacGetLeftBorderSize() const ; virtual long MacGetRightBorderSize() const ; virtual long MacGetTopBorderSize() const ; @@ -197,7 +210,10 @@ public: bool MacIsReallyEnabled() ; bool MacIsReallyHilited() ; - bool MacIsUserPane() { return m_macIsUserPane; } +#if WXWIN_COMPATIBILITY_2_8 + bool MacIsUserPane(); +#endif + bool MacIsUserPane() const; virtual bool MacSetupCursor( const wxPoint& pt ) ; @@ -223,7 +239,7 @@ public: { return ((wxWindow*)m_hScrollBar == sb || (wxWindow*)m_vScrollBar == sb) ; } virtual bool IsClientAreaChild(const wxWindow *child) const { - return !MacIsWindowScrollbar(child) && + return !MacIsWindowScrollbar(child) && !((wxWindow*)m_growBox==child) && wxWindowBase::IsClientAreaChild(child); } @@ -240,29 +256,53 @@ public: int& w, int& h , bool adjustForOrigin ) const ; // the 'true' OS level control for this wxWindow -#if wxOSX_USE_CARBON - wxMacControl* GetPeer() const { return m_peer ; } -#else - wxWidgetImpl* GetPeer() const { return m_peer ; } -#endif - + wxOSXWidgetImpl* GetPeer() const; + + // optimization to avoid creating a user pane in wxWindow::Create if we already know + // we will replace it with our own peer + void DontCreatePeer(); + + // return true unless DontCreatePeer() had been called + bool ShouldCreatePeer() const; + + // sets the native implementation wrapper, can replace an existing peer, use peer = NULL to + // release existing peer + void SetPeer(wxOSXWidgetImpl* peer); + + // wraps the already existing peer with the wrapper + void SetWrappingPeer(wxOSXWidgetImpl* wrapper); + +#if wxOSX_USE_COCOA_OR_IPHONE + // the NSView or NSWindow of this window: can be used for both child and + // non-owned windows + // + // this is useful for a few Cocoa function which can work with either views + // or windows indiscriminately, e.g. for setting NSViewAnimationTargetKey + virtual void *OSXGetViewOrWindow() const { return GetHandle(); } +#endif // Cocoa + void * MacGetCGContextRef() { return m_cgContextRef ; } void MacSetCGContextRef(void * cg) { m_cgContextRef = cg ; } // osx specific event handling common for all osx-ports - + virtual bool OSXHandleClicked( double timestampsec ); virtual bool OSXHandleKeyEvent( wxKeyEvent& event ); + virtual void OSXSimulateFocusEvents(); + + bool IsNativeWindowWrapper() const { return m_isNativeWindowWrapper; } + + double GetContentScaleFactor() const ; + + // internal response to size events + virtual void MacOnInternalSize() {} + protected: // For controls like radio buttons which are genuinely composite wxList m_subControls; -#if wxOSX_USE_CARBON // the peer object, allowing for cleaner API support - wxMacControl * m_peer ; -#else - wxWidgetImpl * m_peer ; -#endif + void * m_cgContextRef ; // cache the clipped rectangles within the window hierarchy @@ -276,9 +316,6 @@ protected: mutable wxRegion m_cachedClippedRegion ; mutable wxRegion m_cachedClippedClientRegion ; - // true if is is not a native control but a wxWindow control - bool m_macIsUserPane ; - // insets of the mac control from the wx top left corner wxPoint m_macTopLeftInset ; wxPoint m_macBottomRightInset ; @@ -288,8 +325,11 @@ protected: wxScrollBar* m_vScrollBar ; bool m_hScrollBarAlwaysShown; bool m_vScrollBarAlwaysShown; + wxWindow* m_growBox ; wxString m_label ; + bool m_isNativeWindowWrapper; + // 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... @@ -303,6 +343,20 @@ protected: void MacUpdateControlFont() ; // implement the base class pure virtuals + virtual void DoGetTextExtent(const wxString& string, + int *x, int *y, + int *descent = NULL, + int *externalLeading = NULL, + const wxFont *theFont = NULL ) const; + + virtual void DoEnable( bool enable ); +#if wxUSE_MENUS + virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); +#endif + + virtual void DoFreeze(); + virtual void DoThaw(); + virtual wxSize DoGetBestSize() const; virtual wxSize DoGetSizeFromClientSize( const wxSize & size ) const; virtual void DoClientToScreen( int *x, int *y ) const; @@ -329,7 +383,13 @@ protected: virtual void DoSetToolTip( wxToolTip *tip ); #endif + // common part of Show/HideWithEffect() + virtual bool OSXShowWithEffect(bool show, + wxShowEffect effect, + unsigned timeout); + private: + wxOSXWidgetImpl * m_peer ; // common part of all ctors void Init(); @@ -337,8 +397,7 @@ private: // AlwaysShowScrollbars() void DoUpdateScrollbarVisibility(); - - DECLARE_NO_COPY_CLASS(wxWindowMac) + wxDECLARE_NO_COPY_CLASS(wxWindowMac); DECLARE_EVENT_TABLE() };