X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9b89f11ad8f5456b6823598f7f2c3c1070a6f10c..ba5b8a68f7486cfb11e326c200e1c2df3e1a534d:/include/wx/mac/carbon/private.h?ds=sidebyside diff --git a/include/wx/mac/carbon/private.h b/include/wx/mac/carbon/private.h index a3f4094719..703ad07254 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 @@ -64,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() ; @@ -93,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 ; } ; @@ -111,7 +106,7 @@ private : class WXDLLEXPORT wxMacPortSetter { DECLARE_NO_COPY_CLASS(wxMacPortSetter) - + public: wxMacPortSetter( const wxDC* dc ) ; ~wxMacPortSetter() ; @@ -123,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() ; @@ -140,7 +135,7 @@ private: class WXDLLEXPORT wxMacWindowStateSaver : public wxMacWindowClipper { DECLARE_NO_COPY_CLASS(wxMacWindowStateSaver) - + public: wxMacWindowStateSaver( const wxWindow* win ) ; ~wxMacWindowStateSaver() ; @@ -150,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 ) ; } @@ -173,7 +168,7 @@ private: class wxMacDrawingHelper { DECLARE_NO_COPY_CLASS(wxMacDrawingHelper) - + public: wxMacDrawingHelper( wxWindowMac * theWindow , bool clientArea = false ) ; ~wxMacDrawingHelper() ; @@ -214,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 ; } @@ -221,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 ; } /* @@ -233,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 ) @@ -268,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 ) ; @@ -286,7 +287,7 @@ public : { return GetParameter( inName, wxMacGetEventParamType() , data ) ; } - + template T GetParameter( EventParamName inName ) { T value ; @@ -299,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 ) { @@ -333,13 +334,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 ; @@ -369,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 ) ; @@ -395,41 +449,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 @@ -444,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 @@ -473,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 ; @@ -484,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 ) ; @@ -498,93 +582,78 @@ 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 ) ; - virtual OSStatus AutoSizeListViewColumns() ; - virtual OSStatus SetHasScrollBars( bool horiz , bool vert ) ; - virtual OSStatus SetTableViewHiliteStyle( DataBrowserTableViewHiliteStyle hiliteStyle ) ; - virtual OSStatus SetListViewHeaderBtnHeight(UInt16 height) ; - virtual OSStatus SetCallbacks(const DataBrowserCallbacks * callbacks) ; - virtual OSStatus UpdateItems( DataBrowserItemID container, UInt32 numItems, - const DataBrowserItemID* items, - DataBrowserPropertyID preSortProperty, - DataBrowserPropertyID propertyID ) ; - virtual OSStatus AddItems( DataBrowserItemID container, UInt32 numItems, - const DataBrowserItemID* items, - DataBrowserPropertyID preSortProperty ) ; - virtual OSStatus RemoveItems( DataBrowserItemID container, UInt32 numItems, - const DataBrowserItemID* items, - DataBrowserPropertyID preSortProperty ) ; - virtual OSStatus RevealItem( DataBrowserItemID item, - DataBrowserPropertyID propertyID, - DataBrowserRevealOptions options ) ; - virtual OSStatus GetSelectionAnchor( DataBrowserItemID * first, DataBrowserItemID * last ) ; - virtual bool IsItemSelected( DataBrowserItemID item ) ; - 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 ; } + + // to be moved into a tab control class + + virtual OSStatus SetTabEnabled( SInt16 tabNo , bool enable ) ; 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 ; @@ -593,7 +662,7 @@ private : class WXDLLEXPORT wxMacCGContext : public wxGraphicContext { DECLARE_NO_COPY_CLASS(wxMacCGContext) - + public: wxMacCGContext( CGrafPtr port ) ; wxMacCGContext( CGContextRef cgcontext ) ; @@ -604,9 +673,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 ) ; @@ -619,15 +688,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: @@ -638,7 +711,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 ; } @@ -646,7 +719,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() ; @@ -658,23 +731,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 ; @@ -692,7 +765,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 ; @@ -726,8 +799,34 @@ private : int m_height ; }; +// toplevel.cpp + +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 +#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 //--------------------------------------------------------------------------- @@ -738,10 +837,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 ) ;