X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9075301655698af770fa31f7fb1b7c6e6ab38faf..5aa67d6619d7758bd66375ef75b698ae49f3418b:/include/wx/mac/carbon/private.h diff --git a/include/wx/mac/carbon/private.h b/include/wx/mac/carbon/private.h index 9c6d741e0d..9e57b5f43a 100644 --- a/include/wx/mac/carbon/private.h +++ b/include/wx/mac/carbon/private.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: private.h +// Name: wx/mac/carbon/private.h // Purpose: Private declarations: as this header is only included by // wxWidgets itself, it may contain identifiers which don't start // with "wx". @@ -29,9 +29,10 @@ # include # include # include +# include #endif -#if UNIVERSAL_INTERFACES_VERSION < 0x0340 +#if UNIVERSAL_INTERFACES_VERSION < 0x0342 #error "please update to Apple's lastest universal headers from http://developer.apple.com/sdk/" #endif @@ -47,9 +48,6 @@ #include "wx/mac/corefoundation/cfstring.h" #endif -//forward declarations -class wxTopLevelWindowMac; - #ifndef FixedToInt // as macro in FixMath.h for 10.3 inline Fixed IntToFixed( int inInt ) @@ -67,13 +65,14 @@ inline int FixedToInt( Fixed inFixed ) #include "wx/dc.h" #include "wx/window.h" +#include "wx/toplevel.h" -class wxMacPortStateHelper +class wxMacPortStateHelper { DECLARE_NO_COPY_CLASS(wxMacPortStateHelper) - + public: - wxMacPortStateHelper( GrafPtr newport) ; + wxMacPortStateHelper( GrafPtr newport) ; wxMacPortStateHelper() ; ~wxMacPortStateHelper() ; @@ -96,9 +95,9 @@ private: class WXDLLEXPORT wxMacPortSaver { DECLARE_NO_COPY_CLASS(wxMacPortSaver) - + public: - wxMacPortSaver( GrafPtr port ) + wxMacPortSaver( GrafPtr port ) { ::GetPort( &m_port ) ; ::SetPort( port ) ; @@ -114,7 +113,7 @@ private : class WXDLLEXPORT wxMacPortSetter { DECLARE_NO_COPY_CLASS(wxMacPortSetter) - + public: wxMacPortSetter( const wxDC* dc ) ; ~wxMacPortSetter() ; @@ -126,11 +125,11 @@ private: /* Clips to the visible region of a control within the current port */ - + class WXDLLEXPORT wxMacWindowClipper : public wxMacPortSaver { DECLARE_NO_COPY_CLASS(wxMacWindowClipper) - + public: wxMacWindowClipper( const wxWindow* win ) ; ~wxMacWindowClipper() ; @@ -143,7 +142,7 @@ private: class WXDLLEXPORT wxMacWindowStateSaver : public wxMacWindowClipper { DECLARE_NO_COPY_CLASS(wxMacWindowStateSaver) - + public: wxMacWindowStateSaver( const wxWindow* win ) ; ~wxMacWindowStateSaver() ; @@ -153,17 +152,17 @@ private: } ; #if wxMAC_USE_CORE_GRAPHICS -class WXDLLEXPORT wxMacCGContextStateSaver +class WXDLLEXPORT wxMacCGContextStateSaver { DECLARE_NO_COPY_CLASS(wxMacCGContextStateSaver) - + public: - wxMacCGContextStateSaver( CGContextRef cg ) + wxMacCGContextStateSaver( CGContextRef cg ) { m_cg = cg ; CGContextSaveGState( cg ) ; } - ~wxMacCGContextStateSaver() + ~wxMacCGContextStateSaver() { CGContextRestoreGState( m_cg ) ; } @@ -176,7 +175,7 @@ private: class wxMacDrawingHelper { DECLARE_NO_COPY_CLASS(wxMacDrawingHelper) - + public: wxMacDrawingHelper( wxWindowMac * theWindow , bool clientArea = false ) ; ~wxMacDrawingHelper() ; @@ -217,6 +216,10 @@ template<> inline EventParamType wxMacGetEventParamType() { return typ template<> inline EventParamType wxMacGetEventParamType() { return typeQDPoint ; } template<> inline EventParamType wxMacGetEventParamType() { return typeQDRectangle ; } template<> inline EventParamType wxMacGetEventParamType() { return typeBoolean ; } +template<> inline EventParamType wxMacGetEventParamType() { return typeSInt16 ; } +template<> inline EventParamType wxMacGetEventParamType() { return typeSInt32 ; } +template<> inline EventParamType wxMacGetEventParamType() { return typeUInt32 ; } +template<> inline EventParamType wxMacGetEventParamType() { return typeRGBColor ; } #if TARGET_API_MAC_OSX template<> inline EventParamType wxMacGetEventParamType() { return typeHICommand ; } template<> inline EventParamType wxMacGetEventParamType() { return typeHIPoint ; } @@ -224,6 +227,7 @@ template<> inline EventParamType wxMacGetEventParamType() { return typeH template<> inline EventParamType wxMacGetEventParamType() { return typeHIRect ; } template<> inline EventParamType wxMacGetEventParamType() { return typeVoidPtr ; } #endif +template<> inline EventParamType wxMacGetEventParamType() { return typeCFDictionaryRef ; } template<> inline EventParamType wxMacGetEventParamType() { return typeCollection ; } template<> inline EventParamType wxMacGetEventParamType() { return typeCGContextRef ; } /* @@ -236,34 +240,34 @@ template<> inline EventParamType wxMacGetEventParamType() { return class wxMacCarbonEvent { - + public : wxMacCarbonEvent() { m_eventRef = 0 ; m_release = false ; } - - wxMacCarbonEvent( EventRef event , bool release = false ) + + wxMacCarbonEvent( EventRef event , bool release = false ) { m_eventRef = event ; m_release = release ; } - - wxMacCarbonEvent(UInt32 inClassID,UInt32 inKind,EventTime inWhen = 0 /*now*/,EventAttributes inAttributes=kEventAttributeNone) + + wxMacCarbonEvent(UInt32 inClassID,UInt32 inKind,EventTime inWhen = 0 /*now*/,EventAttributes inAttributes=kEventAttributeNone) { m_eventRef = NULL ; verify_noerr( MacCreateEvent( NULL , inClassID, inKind,inWhen,inAttributes,&m_eventRef) ) ; m_release = true ; } - + ~wxMacCarbonEvent() { if ( m_release ) ReleaseEvent( m_eventRef ) ; } - - OSStatus Create(UInt32 inClassID,UInt32 inKind,EventTime inWhen = 0 /*now*/,EventAttributes inAttributes=kEventAttributeNone) + + OSStatus Create(UInt32 inClassID,UInt32 inKind,EventTime inWhen = 0 /*now*/,EventAttributes inAttributes=kEventAttributeNone) { verify( (m_eventRef == NULL) || m_release ) ; if ( m_eventRef && m_release ) @@ -271,16 +275,15 @@ public : ReleaseEvent( m_eventRef ) ; m_release = false ; m_eventRef = NULL ; - } OSStatus err = MacCreateEvent( NULL , inClassID, inKind,inWhen,inAttributes,&m_eventRef) ; if ( err == noErr ) m_release = true ; return err ; } - + OSStatus GetParameter( EventParamName inName, EventParamType inDesiredType, UInt32 inBufferSize, void * outData) ; - + template OSStatus GetParameter( EventParamName inName, EventParamType type , T *data ) { return GetParameter( inName, type , sizeof( T ) , data ) ; @@ -289,7 +292,7 @@ public : { return GetParameter( inName, wxMacGetEventParamType() , data ) ; } - + template T GetParameter( EventParamName inName ) { T value ; @@ -302,7 +305,7 @@ public : verify_noerr( GetParameter( inName, inDesiredType , &value ) ) ; return value ; } - + OSStatus SetParameter( EventParamName inName, EventParamType inType, UInt32 inSize, const void * inData) ; template OSStatus SetParameter( EventParamName inName, EventParamType inDesiredType , const T *data ) { @@ -336,13 +339,17 @@ public : { return EventTimeToTicks( GetTime() ) ; } - OSStatus SetTime( EventTime inWhen = 0 /*now*/ ) + OSStatus SetCurrentTime( ) { - return ::SetEventTime( m_eventRef , inWhen ? inWhen : GetCurrentEventTime() ) ; + return ::SetEventTime( m_eventRef , GetCurrentEventTime() ) ; + } + OSStatus SetTime( EventTime when ) + { + return ::SetEventTime( m_eventRef , when ) ; } operator EventRef () { return m_eventRef; } - - bool IsValid() { return m_eventRef != 0 ; } + + bool IsValid() { return m_eventRef != 0 ; } protected : EventRef m_eventRef ; bool m_release ; @@ -372,6 +379,55 @@ private : typedef wxMacUPP wxMacNMUPP ; +template class wxMacCFRefHolder +{ +public : + wxMacCFRefHolder() + : m_ref(NULL) , m_release(false) + { + } + + wxMacCFRefHolder( refType ref , bool release = true ) + : m_ref(ref) , m_release(release) + { + } + + ~wxMacCFRefHolder() + { + CFRelease( m_ref ) ; + } + + void Release() + { + if ( m_release && m_ref != NULL ) + CFRelease( m_ref ) ; + m_ref = NULL ; + } + + refType Detach() + { + refType val = m_ref ; + m_release = false ; + m_ref = NULL ; + return val ; + } + + void Set( refType ref , bool release = true ) + { + Release() ; + m_release = release ; + m_ref = ref ; + } + + operator refType () const { return m_ref; } + +private : + refType m_ref ; + bool m_release ; + + DECLARE_NO_COPY_CLASS( wxMacCFRefHolder ) +} ; + #if wxUSE_GUI /* GWorldPtr wxMacCreateGWorld( int width , int height , int depth ) ; @@ -398,41 +454,52 @@ void wxMacReleaseBitmapButton( ControlButtonContentInfo*info ) ; struct wxOpaqueWindowRef { wxOpaqueWindowRef( WindowRef ref ) { m_data = ref ; } - operator WindowRef() { return m_data ; } + operator WindowRef() { return m_data ; } private : WindowRef m_data ; } ; +void wxMacRectToNative( const wxRect *wx , Rect *n ) ; +void wxMacNativeToRect( const Rect *n , wxRect* wx ) ; +void wxMacPointToNative( const wxPoint* wx , Point *n ) ; +void wxMacNativeToPoint( const Point *n , wxPoint* wx ) ; + wxWindow * wxFindControlFromMacControl(ControlRef inControl ) ; wxTopLevelWindowMac* wxFindWinFromMacWindow( WindowRef inWindow ) ; wxMenu* wxFindMenuFromMacMenu(MenuRef inMenuRef) ; +int wxMacCommandToId( UInt32 macCommandId ) ; +UInt32 wxIdToMacCommand( int wxId ) ; +wxMenu* wxFindMenuFromMacCommand( const HICommand &macCommandId , wxMenuItem* &item ) ; + extern wxWindow* g_MacLastWindow ; pascal OSStatus wxMacTopLevelMouseEventHandler( EventHandlerCallRef handler , EventRef event , void *data ) ; Rect wxMacGetBoundsForControl( wxWindow* window , const wxPoint& pos , const wxSize &size , bool adjustForOrigin = true ) ; +ControlActionUPP GetwxMacLiveScrollbarActionProc() ; + class wxMacControl { public : - wxMacControl( wxWindow* peer) ; + wxMacControl( wxWindow* peer , bool isRootControl = false ) ; wxMacControl( wxWindow* peer , ControlRef control ) ; wxMacControl( wxWindow* peer , WXWidget control ) ; virtual ~wxMacControl() ; - + void Init() ; - + virtual void Dispose() ; bool Ok() const { return GetControlRef() != NULL ; } - - virtual ControlRef * GetControlRefAddr() { return &m_controlRef; } - virtual ControlRef GetControlRef() const { return m_controlRef ; } - virtual void SetReference( SInt32 data ) ; + virtual ControlRef * GetControlRefAddr() { return &m_controlRef; } + virtual ControlRef GetControlRef() const { return m_controlRef ; } + + virtual void SetReference( SInt32 data ) ; /* void operator= (ControlRef c) { m_controlRef = c ; } - operator ControlRef () { return m_controlRef; } - operator ControlRef * () { return &m_controlRef; } + operator ControlRef () { return m_controlRef; } + operator ControlRef * () { return &m_controlRef; } */ // accessing data and values @@ -447,19 +514,19 @@ public : virtual SInt32 GetValue() const ; virtual SInt32 GetMaximum() const ; virtual SInt32 GetMinimum() const ; - + virtual void SetValue( SInt32 v ) ; virtual void SetMinimum( SInt32 v ) ; virtual void SetMaximum( SInt32 v ) ; virtual void SetValueAndRange( SInt32 value , SInt32 minimum , SInt32 maximum ) ; virtual void SetRange( SInt32 minimum , SInt32 maximum ) ; - + virtual OSStatus SetFocus( ControlFocusPart focusPart ) ; virtual bool HasFocus() const ; virtual bool NeedsFocusRect() const ; virtual void SetNeedsFocusRect( bool needs ) ; - + // templated helpers Size GetDataSize( ControlPartCode inPartCode , ResType inTag ) const @@ -476,6 +543,14 @@ public : { return SetData( inPartCode , inTag , sizeof( T ) , &data ) ; } + template OSStatus SetData( ResType inTag , const T *data ) + { + return SetData( kControlEntireControl , inTag , sizeof( T ) , data ) ; + } + template OSStatus SetData( ResType inTag , const T& data ) + { + return SetData( kControlEntireControl , inTag , sizeof( T ) , &data ) ; + } template OSStatus GetData( ControlPartCode inPartCode , ResType inTag , T *data ) const { Size dummy ; @@ -487,7 +562,18 @@ public : verify_noerr( GetData( inPartCode , inTag , &value ) ) ; return value ; } - + template OSStatus GetData( ResType inTag , T *data ) const + { + Size dummy ; + return GetData( kControlEntireControl , inTag , sizeof( T ) , data , &dummy ) ; + } + template T GetData( ResType inTag ) const + { + T value ; + verify_noerr( GetData( kControlEntireControl , inTag , &value ) ) ; + return value ; + } + // Flash the control for the specified amount of time virtual void Flash( ControlPartCode part , UInt32 ticks = 8 ) ; @@ -501,35 +587,44 @@ public : void SetActionProc( ControlActionUPP actionProc ) ; void SetViewSize( SInt32 viewSize ) ; SInt32 GetViewSize() const ; - + virtual bool IsVisible() const ; virtual void SetVisibility( bool visible , bool redraw ) ; virtual bool IsEnabled() const ; virtual bool IsActive() const ; virtual void Enable( bool enable ) ; - + // invalidates this control and all children virtual void InvalidateWithChildren() ; virtual void SetDrawingEnabled( bool enable ) ; #ifdef __WXMAC_OSX__ virtual bool GetNeedsDisplay() const ; - virtual void SetNeedsDisplay( bool needsDisplay , RgnHandle where = NULL ) ; #endif - virtual void ScrollRect( const wxRect &rect , int dx , int dy ) ; + // where is in native window relative coordinates + virtual void SetNeedsDisplay( RgnHandle where ) ; + // where is in native window relative coordinates + virtual void SetNeedsDisplay( Rect* where = NULL ) ; + // if rect = NULL, entire view + virtual void ScrollRect( wxRect *rect , int dx , int dy ) ; + + // in native parent window relative coordinates virtual void GetRect( Rect *r ) ; + + // in native parent window relative coordinates virtual void SetRect( Rect *r ) ; + virtual void GetRectInWindowCoords( Rect *r ) ; virtual void GetBestRect( Rect *r ) ; - virtual void SetTitle( const wxString &title ) ; + virtual void SetLabel( const wxString &title ) ; // converts from Toplevel-Content relative to local static void Convert( wxPoint *pt , wxMacControl *convert , wxMacControl *to ) ; - + virtual void GetFeatures( UInt32 *features ) ; virtual OSStatus GetRegion( ControlPartCode partCode , RgnHandle region ) ; virtual OSStatus SetZOrder( bool above , wxMacControl* other ) ; // to be moved into a databrowser subclass - + virtual OSStatus SetSelectionFlags( DataBrowserSelectionFlags ) ; virtual OSStatus AddListViewColumn( DataBrowserListViewColumnDesc *columnDesc, DataBrowserTableViewColumnIndex position ) ; @@ -539,14 +634,14 @@ public : virtual OSStatus SetListViewHeaderBtnHeight(UInt16 height) ; virtual OSStatus SetCallbacks(const DataBrowserCallbacks * callbacks) ; virtual OSStatus UpdateItems( DataBrowserItemID container, UInt32 numItems, - const DataBrowserItemID* items, + const DataBrowserItemID* items, DataBrowserPropertyID preSortProperty, DataBrowserPropertyID propertyID ) ; virtual OSStatus AddItems( DataBrowserItemID container, UInt32 numItems, - const DataBrowserItemID* items, + const DataBrowserItemID* items, DataBrowserPropertyID preSortProperty ) ; virtual OSStatus RemoveItems( DataBrowserItemID container, UInt32 numItems, - const DataBrowserItemID* items, + const DataBrowserItemID* items, DataBrowserPropertyID preSortProperty ) ; virtual OSStatus RevealItem( DataBrowserItemID item, DataBrowserPropertyID propertyID, @@ -556,38 +651,41 @@ public : virtual OSStatus SetSelectedItems(UInt32 numItems, const DataBrowserItemID * items, DataBrowserSetOption operation ) ; - + // to be moved into a tab control class - + virtual OSStatus SetTabEnabled( SInt16 tabNo , bool enable ) ; bool IsCompositing() { return m_isCompositing ; } + bool IsRootControl() { return m_isRootControl ; } protected : ControlRef m_controlRef ; wxFont m_font ; - long m_windowStyle ; + long m_windowStyle ; wxWindow* m_peer ; bool m_needsFocusRect ; bool m_isCompositing ; + bool m_isRootControl ; } ; #if wxMAC_USE_CORE_GRAPHICS -class WXDLLEXPORT wxMacCGPath : public wxGraphicPath +class WXDLLEXPORT wxMacCGPath : public wxGraphicPath { DECLARE_NO_COPY_CLASS(wxMacCGPath) public : wxMacCGPath() ; ~wxMacCGPath() ; - + // Starts a new subpath at void MoveToPoint( wxCoord x1 , wxCoord y1 ) ; void AddLineToPoint( wxCoord x1 , wxCoord y1 ) ; + void AddQuadCurveToPoint( wxCoord cx1, wxCoord cy1, wxCoord x1, wxCoord y1 ) ; void AddRectangle( wxCoord x, wxCoord y, wxCoord w, wxCoord h ) ; void AddCircle( wxCoord x, wxCoord y , wxCoord r ) ; - + // closes the current subpath void CloseSubpath() ; - + CGPathRef GetPath() const ; private : CGMutablePathRef m_path ; @@ -596,7 +694,7 @@ private : class WXDLLEXPORT wxMacCGContext : public wxGraphicContext { DECLARE_NO_COPY_CLASS(wxMacCGContext) - + public: wxMacCGContext( CGrafPtr port ) ; wxMacCGContext( CGContextRef cgcontext ) ; @@ -607,9 +705,9 @@ public: virtual void StrokePath( const wxGraphicPath *p ) ; virtual void DrawPath( const wxGraphicPath *p , int fillStyle = wxWINDING_RULE ) ; virtual void FillPath( const wxGraphicPath *p , const wxColor &fillColor , int fillStyle = wxWINDING_RULE ) ; - + virtual wxGraphicPath* CreatePath() ; - virtual void SetPen( const wxPen &pen ) ; + virtual void SetPen( const wxPen &pen ) ; virtual void SetBrush( const wxBrush &brush ) ; CGContextRef GetNativeContext() ; void SetNativeContext( CGContextRef cg ) ; @@ -622,15 +720,19 @@ private: wxBrush m_brush ; } ; +#endif // wxMAC_USE_CORE_GRAPHICS + +#ifdef __WXMAC_OSX__ + CGColorSpaceRef wxMacGetGenericRGBColorSpace(void) ; void wxMacMemoryBufferReleaseProc(void *info, const void *data, size_t size) ; -#endif // wxMAC_USE_CORE_GRAPHICS +#endif class WXDLLEXPORT wxBitmapRefData: public wxGDIRefData { DECLARE_NO_COPY_CLASS(wxBitmapRefData) - + friend class WXDLLEXPORT wxIcon; friend class WXDLLEXPORT wxCursor; public: @@ -641,7 +743,7 @@ public: void Free() ; bool Ok() const { return m_ok ; } void SetOk( bool isOk) { m_ok = isOk ; } - + void SetWidth( int width ) { m_width = width ; } void SetHeight( int height ) { m_height = height ; } void SetDepth( int depth ) { m_depth = depth ; } @@ -649,7 +751,7 @@ public: int GetWidth() const { return m_width ; } int GetHeight() const { return m_height ; } int GetDepth() const { return m_depth ; } - + void *GetRawAccess() const ; void *BeginRawAccess() ; void EndRawAccess() ; @@ -661,23 +763,23 @@ public: #if wxUSE_PALETTE wxPalette m_bitmapPalette; #endif // wxUSE_PALETTE - + wxMask * m_bitmapMask; // Optional mask -#if wxMAC_USE_CORE_GRAPHICS +#ifdef __WXMAC_OSX__ CGImageRef CGImageCreate() const ; #endif - + // returns true if the bitmap has a size that // can be natively transferred into a true icon // if no is returned GetIconRef will still produce // an icon but it will be generated via a PICT and - // rescaled to 16 x 16 + // rescaled to 16 x 16 bool HasNativeSize() ; - + // caller should increase ref count if needed longer // than the bitmap exists IconRef GetIconRef() ; - + // returns a Pict from the bitmap content PicHandle GetPictHandle() ; GWorldPtr GetHBITMAP(GWorldPtr * mask = NULL ) const ; @@ -695,7 +797,7 @@ private : wxMemoryBuffer m_memBuf ; int m_rawAccessCount ; bool m_ok; -#if wxMAC_USE_CORE_GRAPHICS +#ifdef __WXMAC_OSX__ mutable CGImageRef m_cgImageRef ; #endif IconRef m_iconRef ; @@ -729,8 +831,34 @@ private : int m_height ; }; +// toplevel.cpp + +ControlRef wxMacFindControlUnderMouse( wxTopLevelWindowMac* toplevelWindow, const Point& location , WindowRef window , ControlPartCode *outPart ) ; + +#if WORDS_BIGENDIAN + inline Rect* wxMacGetPictureBounds( PicHandle pict , Rect* rect ) + { + *rect = (**pict).picFrame ; + return rect ; + } +#else + inline Rect* wxMacGetPictureBounds( PicHandle pict , Rect* rect ) + { + return QDGetPictureBounds( pict , rect ) ; + } +#endif + #endif // wxUSE_GUI +#define wxMAC_DEFINE_PROC_GETTER( UPP , x ) \ +UPP Get##x() \ +{ \ + static UPP sHandler = NULL; \ + if ( sHandler == NULL ) \ + sHandler = New##UPP( x ); \ + return sHandler; \ +} + //--------------------------------------------------------------------------- // wxMac string conversions //--------------------------------------------------------------------------- @@ -741,10 +869,6 @@ void wxMacCleanupConverters() ; void wxMacStringToPascal( const wxString&from , StringPtr to ) ; wxString wxMacMakeStringFromPascal( ConstStringPtr from ) ; -// toplevel.cpp - -ControlRef wxMacFindControlUnderMouse( wxTopLevelWindowMac* toplevelWindow, Point location , WindowRef window , ControlPartCode *outPart ) ; - // filefn.cpp wxString wxMacFSRefToPath( const FSRef *fsRef , CFStringRef additionalPathComponent = NULL ) ;