X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/285b5ce09012b1341c9c18b9fa837581ae66ea3a..c5ce3dfb1efd5346682809f3d2702fd9c4edd52d:/include/wx/mac/carbon/private.h diff --git a/include/wx/mac/carbon/private.h b/include/wx/mac/carbon/private.h index cc8566c000..11298873af 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 @@ -66,12 +67,12 @@ inline int FixedToInt( Fixed inFixed ) #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() ; @@ -94,17 +95,10 @@ private: class WXDLLEXPORT wxMacPortSaver { DECLARE_NO_COPY_CLASS(wxMacPortSaver) - + public: - wxMacPortSaver( GrafPtr port ) - { - ::GetPort( &m_port ) ; - ::SetPort( port ) ; - } - ~wxMacPortSaver() - { - ::SetPort( m_port ) ; - } + wxMacPortSaver( GrafPtr port ); + ~wxMacPortSaver(); private : GrafPtr m_port ; } ; @@ -112,7 +106,7 @@ private : class WXDLLEXPORT wxMacPortSetter { DECLARE_NO_COPY_CLASS(wxMacPortSetter) - + public: wxMacPortSetter( const wxDC* dc ) ; ~wxMacPortSetter() ; @@ -124,11 +118,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() ; @@ -141,7 +135,7 @@ private: class WXDLLEXPORT wxMacWindowStateSaver : public wxMacWindowClipper { DECLARE_NO_COPY_CLASS(wxMacWindowStateSaver) - + public: wxMacWindowStateSaver( const wxWindow* win ) ; ~wxMacWindowStateSaver() ; @@ -151,17 +145,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 ) ; } @@ -174,7 +168,7 @@ private: class wxMacDrawingHelper { DECLARE_NO_COPY_CLASS(wxMacDrawingHelper) - + public: wxMacDrawingHelper( wxWindowMac * theWindow , bool clientArea = false ) ; ~wxMacDrawingHelper() ; @@ -215,6 +209,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 ; } @@ -222,6 +220,9 @@ template<> inline EventParamType wxMacGetEventParamType() { return typeH template<> inline EventParamType wxMacGetEventParamType() { return typeHIRect ; } template<> inline EventParamType wxMacGetEventParamType() { return typeVoidPtr ; } #endif +#if TARGET_API_MAC_OSX && ( MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2 ) +template<> inline EventParamType wxMacGetEventParamType() { return typeCFDictionaryRef ; } +#endif template<> inline EventParamType wxMacGetEventParamType() { return typeCollection ; } template<> inline EventParamType wxMacGetEventParamType() { return typeCGContextRef ; } /* @@ -234,34 +235,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 ) @@ -269,16 +270,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 ) ; @@ -287,7 +287,7 @@ public : { return GetParameter( inName, wxMacGetEventParamType() , data ) ; } - + template T GetParameter( EventParamName inName ) { T value ; @@ -300,7 +300,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 ) { @@ -334,13 +334,17 @@ public : { return EventTimeToTicks( GetTime() ) ; } - OSStatus SetTime( EventTime inWhen = 0 /*now*/ ) + OSStatus SetCurrentTime( ) + { + return ::SetEventTime( m_eventRef , GetCurrentEventTime() ) ; + } + OSStatus SetTime( EventTime when ) { - return ::SetEventTime( m_eventRef , inWhen ? inWhen : GetCurrentEventTime() ) ; + 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 ; @@ -370,6 +374,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() + { + Release() ; + } + + 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 ) ; @@ -396,7 +449,7 @@ 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 ; } ; @@ -410,6 +463,10 @@ 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 ) ; @@ -419,25 +476,25 @@ ControlActionUPP GetwxMacLiveScrollbarActionProc() ; class wxMacControl { public : - wxMacControl( wxWindow* peer , bool isRootControl = false ) ; + 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 @@ -452,19 +509,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 @@ -481,6 +538,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 ; @@ -492,7 +557,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 ) ; @@ -506,13 +582,13 @@ 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 ) ; @@ -524,7 +600,8 @@ public : // where is in native window relative coordinates virtual void SetNeedsDisplay( Rect* where = NULL ) ; - virtual void ScrollRect( const wxRect &rect , int dx , int dy ) ; + // 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 ) ; @@ -534,15 +611,15 @@ public : 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 ) ; @@ -552,14 +629,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, @@ -569,16 +646,16 @@ 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 ; @@ -587,22 +664,23 @@ protected : #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 ; @@ -611,7 +689,7 @@ private : class WXDLLEXPORT wxMacCGContext : public wxGraphicContext { DECLARE_NO_COPY_CLASS(wxMacCGContext) - + public: wxMacCGContext( CGrafPtr port ) ; wxMacCGContext( CGContextRef cgcontext ) ; @@ -622,9 +700,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 ) ; @@ -637,15 +715,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: @@ -656,7 +738,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 ; } @@ -664,7 +746,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() ; @@ -676,23 +758,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 ; @@ -710,7 +792,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 ; @@ -746,7 +828,20 @@ private : // toplevel.cpp -ControlRef wxMacFindControlUnderMouse( wxTopLevelWindowMac* toplevelWindow, Point location , WindowRef window , ControlPartCode *outPart ) ; +ControlRef wxMacFindControlUnderMouse( wxTopLevelWindowMac* toplevelWindow, const Point& location , WindowRef window , ControlPartCode *outPart ) ; + +#ifdef 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