X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a236aa2058ccf3d36e9cafc20fa7375080c4be50..435a5ad0eeac447f95ef80b56aba8d4fe3470078:/include/wx/mac/carbon/private.h diff --git a/include/wx/mac/carbon/private.h b/include/wx/mac/carbon/private.h index 6fc913dd2c..314b3a1c85 100644 --- a/include/wx/mac/carbon/private.h +++ b/include/wx/mac/carbon/private.h @@ -16,53 +16,10 @@ #include "wx/defs.h" -#ifdef __DARWIN__ -# include -#else -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -#endif - -#if UNIVERSAL_INTERFACES_VERSION < 0x0342 - #error "please update to Apple's latest universal headers from http://developer.apple.com/sdk/" -#endif - -#ifndef MAC_OS_X_VERSION_10_3 - #define MAC_OS_X_VERSION_10_3 1030 -#endif - -#ifndef MAC_OS_X_VERSION_10_4 - #define MAC_OS_X_VERSION_10_4 1040 -#endif - -#ifndef MAC_OS_X_VERSION_10_5 - #define MAC_OS_X_VERSION_10_5 1050 -#endif +#include -#ifdef __WXMAC_CARBON__ #include "wx/mac/corefoundation/cfstring.h" -#endif - -#ifndef FixedToInt -// as macro in FixMath.h for 10.3 -inline Fixed IntToFixed( int inInt ) -{ - return (((SInt32) inInt) << 16); -} - -inline int FixedToInt( Fixed inFixed ) -{ - return (((SInt32) inFixed) >> 16); -} -#endif +#include "wx/mac/corefoundation/cfdataref.h" #if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 typedef UInt32 URefCon; @@ -75,31 +32,6 @@ typedef SInt32 SRefCon; #ifndef __LP64__ -class wxMacPortStateHelper -{ - DECLARE_NO_COPY_CLASS(wxMacPortStateHelper) - -public: - wxMacPortStateHelper( GrafPtr newport); - wxMacPortStateHelper(); - ~wxMacPortStateHelper(); - - void Setup( GrafPtr newport ); - void Clear(); - bool IsCleared() { return m_clip == NULL; } - GrafPtr GetCurrentPort() { return m_currentPort; } - -private: - GrafPtr m_currentPort; - GrafPtr m_oldPort; - RgnHandle m_clip; - ThemeDrawingState m_drawingState; - short m_textFont; - short m_textSize; - short m_textStyle; - short m_textMode; -}; - class WXDLLEXPORT wxMacPortSaver { DECLARE_NO_COPY_CLASS(wxMacPortSaver) @@ -111,17 +43,6 @@ private : GrafPtr m_port; }; -class WXDLLEXPORT wxMacPortSetter -{ - DECLARE_NO_COPY_CLASS(wxMacPortSetter) - -public: - wxMacPortSetter( const wxDC* dc ); - ~wxMacPortSetter(); -private: - wxMacPortStateHelper m_ph; - const wxDC* m_dc; -}; /* Clips to the visible region of a control within the current port @@ -153,7 +74,6 @@ private: }; #endif -#if wxMAC_USE_CORE_GRAPHICS class WXDLLEXPORT wxMacCGContextStateSaver { DECLARE_NO_COPY_CLASS(wxMacCGContextStateSaver) @@ -172,7 +92,6 @@ private: CGContextRef m_cg; }; -#endif /* class wxMacDrawingHelper { @@ -197,21 +116,24 @@ private: */ // app.h + +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 bool wxMacConvertEventToRecord( EventRef event , EventRecord *rec); +#endif #endif // wxUSE_GUI // filefn.h -WXDLLEXPORT wxString wxMacFSSpec2MacFilename( const FSSpec *spec ); -WXDLLEXPORT void wxMacFilename2FSSpec( const wxString &path , FSSpec *spec ); +WXDLLIMPEXP_BASE wxString wxMacFSSpec2MacFilename( const FSSpec *spec ); +WXDLLIMPEXP_BASE void wxMacFilename2FSSpec( const wxString &path , FSSpec *spec ); // utils.h -WXDLLEXPORT wxString wxMacFindFolderNoSeparator(short vRefNum, - OSType folderType, - Boolean createFolder); -WXDLLEXPORT wxString wxMacFindFolder(short vRefNum, - OSType folderType, - Boolean createFolder); +WXDLLIMPEXP_BASE wxString wxMacFindFolderNoSeparator(short vRefNum, + OSType folderType, + Boolean createFolder); +WXDLLIMPEXP_BASE wxString wxMacFindFolder(short vRefNum, + OSType folderType, + Boolean createFolder); template EventParamType wxMacGetEventParamType() { wxFAIL_MSG( wxT("Unknown Param Type") ); return 0; } template<> inline EventParamType wxMacGetEventParamType() { return typeQDRgnHandle; } @@ -226,16 +148,12 @@ template<> inline EventParamType wxMacGetEventParamType() { return typeS 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; } template<> inline EventParamType wxMacGetEventParamType() { return typeHISize; } 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; } /* @@ -370,7 +288,7 @@ protected : template class wxMacUPP { public : - wxMacUPP( procType proc ) + wxMacUPP( procType WXUNUSED(proc) ) { m_upp = NULL; m_upp = (*newUPP)( NULL ); @@ -429,6 +347,11 @@ public : operator refType () const { return m_ref; } + wxMacCFRefHolder& operator=(refType r) + { + Set( r ); + return *this; + } private : refType m_ref; bool m_release; @@ -438,6 +361,38 @@ private : #if wxUSE_GUI +class wxMacToolTipTimer ; + +class wxMacToolTip +{ +public : + wxMacToolTip() ; + ~wxMacToolTip() ; + + void Setup( WindowRef window , const wxString& text , const wxPoint& localPosition ) ; + void Draw() ; + void Clear() ; + + long GetMark() + { return m_mark ; } + + bool IsShown() + { return m_shown ; } + +private : + wxString m_label ; + wxPoint m_position ; + Rect m_rect ; + WindowRef m_window ; + PicHandle m_backpict ; + bool m_shown ; + long m_mark ; +#if wxUSE_TIMER + wxMacToolTipTimer* m_timer ; +#endif + wxMacCFStringHolder m_helpTextRef ; +} ; + /* GWorldPtr wxMacCreateGWorld( int width , int height , int depth ); void wxMacDestroyGWorld( GWorldPtr gw ); @@ -448,8 +403,8 @@ CTabHandle wxMacCreateColorTable( int numColors ); */ void wxMacCreateBitmapButton( ControlButtonContentInfo*info , const wxBitmap& bitmap , int forceType = 0 ); void wxMacReleaseBitmapButton( ControlButtonContentInfo*info ); +CGImageRef wxMacCreateCGImageFromBitmap( const wxBitmap& bitmap ); -#define MAC_WXCOLORREF(a) (*((RGBColor*)&(a))) #define MAC_WXHBITMAP(a) (GWorldPtr(a)) #define MAC_WXHMETAFILE(a) (PicHandle(a)) #define MAC_WXHICON(a) (IconRef(a)) @@ -473,17 +428,17 @@ 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); +WXDLLIMPEXP_CORE wxWindow * wxFindControlFromMacControl(ControlRef inControl ); +WXDLLIMPEXP_CORE wxTopLevelWindowMac* wxFindWinFromMacWindow( WindowRef inWindow ); +WXDLLIMPEXP_CORE wxMenu* wxFindMenuFromMacMenu(MenuRef inMenuRef); -int wxMacCommandToId( UInt32 macCommandId ); -UInt32 wxIdToMacCommand( int wxId ); -wxMenu* wxFindMenuFromMacCommand( const HICommand &macCommandId , wxMenuItem* &item ); +WXDLLIMPEXP_CORE int wxMacCommandToId( UInt32 macCommandId ); +WXDLLIMPEXP_CORE UInt32 wxIdToMacCommand( int wxId ); +WXDLLIMPEXP_CORE 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 ); +WXDLLIMPEXP_CORE pascal OSStatus wxMacTopLevelMouseEventHandler( EventHandlerCallRef handler , EventRef event , void *data ); +WXDLLIMPEXP_CORE Rect wxMacGetBoundsForControl( wxWindow* window , const wxPoint& pos , const wxSize &size , bool adjustForOrigin = true ); ControlActionUPP GetwxMacLiveScrollbarActionProc(); @@ -598,7 +553,7 @@ public : virtual void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle ); - virtual void SetBackground( const wxBrush &brush ); + virtual void SetBackgroundColour( const wxColour& col ); virtual ControlPartCode HandleKey( SInt16 keyCode, SInt16 charCode, EventModifiers modifiers ); void SetActionProc( ControlActionUPP actionProc ); void SetViewSize( SInt32 viewSize ); @@ -613,9 +568,8 @@ public : // invalidates this control and all children virtual void InvalidateWithChildren(); virtual void SetDrawingEnabled( bool enable ); -#ifdef __WXMAC_OSX__ virtual bool GetNeedsDisplay() const; -#endif + // where is in native window relative coordinates virtual void SetNeedsDisplay( RgnHandle where ); // where is in native window relative coordinates @@ -1085,251 +1039,137 @@ public: // graphics implementation // ============================================================================ -#if wxMAC_USE_CORE_GRAPHICS && !wxUSE_GRAPHICS_CONTEXT +// draw the image 'upside down' corrected as HIViewDrawCGImage does -class WXDLLEXPORT wxMacCGPath : public wxGraphicPath -{ - DECLARE_NO_COPY_CLASS(wxMacCGPath) -public : - wxMacCGPath(); - ~wxMacCGPath(); +OSStatus WXDLLEXPORT wxMacDrawCGImage( + CGContextRef inContext, + const HIRect * inBounds, + CGImageRef inImage) ; - // 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 ); +CGColorRef WXDLLEXPORT wxMacCreateCGColorFromHITheme( ThemeBrush brush ) ; - // draws a an arc to two tangents connecting (current) to (x1,y1) and (x1,y1) to (x2,y2) - virtual void AddArcToPoint( wxCoord x1, wxCoord y1 , wxCoord x2, wxCoord y2, wxCoord r ) ; - virtual void AddArc( wxCoord x, wxCoord y, wxCoord r, double startAngle, double endAngle, bool clockwise ) ; +CGColorSpaceRef WXDLLEXPORT wxMacGetGenericRGBColorSpace(void); - // closes the current subpath - void CloseSubpath(); - - CGPathRef GetPath() const; -private : - CGMutablePathRef m_path; -}; +// toplevel.cpp -class WXDLLEXPORT wxMacCGContext : public wxGraphicContext +class wxMacDeferredWindowDeleter : public wxObject { - DECLARE_NO_COPY_CLASS(wxMacCGContext) - -public: - wxMacCGContext( CGrafPtr port ); - wxMacCGContext( CGContextRef cgcontext ); - wxMacCGContext(); - virtual ~wxMacCGContext(); - - virtual void Clip( const wxRegion ®ion ); - 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 SetBrush( const wxBrush &brush ); - CGContextRef GetNativeContext(); - void SetNativeContext( CGContextRef cg ); - CGPathDrawingMode GetDrawingMode() const { return m_mode; } - - virtual void Translate( wxCoord dx , wxCoord dy ); - virtual void Scale( wxCoord xScale , wxCoord yScale ); - virtual void DrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, wxCoord w, wxCoord h ); - virtual void DrawIcon( const wxIcon &icon, wxCoord x, wxCoord y, wxCoord w, wxCoord h ); - virtual void PushState(); - virtual void PopState(); - - virtual void DrawText( const wxString &str, wxCoord x, wxCoord y, double angle ) ; - - virtual void GetTextExtent( const wxString &str, wxCoord *width, wxCoord *height, - wxCoord *descent, wxCoord *externalLeading ) const ; - - virtual void GetPartialTextExtents(const wxString& text, wxArrayInt& widths) const ; - - virtual void SetFont( const wxFont &font ) ; - - virtual void SetTextColor( const wxColour &col ) ; -private: - CGContextRef m_cgContext; - CGrafPtr m_qdPort; - CGPathDrawingMode m_mode; - ATSUStyle m_macATSUIStyle ; - wxPen m_pen; - wxBrush m_brush; - wxColor m_textForegroundColor ; -}; - -#endif // wxMAC_USE_CORE_GRAPHICS +public : + wxMacDeferredWindowDeleter( WindowRef windowRef ); + virtual ~wxMacDeferredWindowDeleter(); -#ifdef __WXMAC_OSX__ +protected : + WindowRef m_macWindow ; +} ; -CGColorSpaceRef wxMacGetGenericRGBColorSpace(void); -void wxMacMemoryBufferReleaseProc(void *info, const void *data, size_t size); +#endif // wxUSE_GUI -#endif +#define wxMAC_DEFINE_PROC_GETTER( UPP , x ) \ +UPP Get##x() \ +{ \ + static UPP sHandler = NULL; \ + if ( sHandler == NULL ) \ + sHandler = New##UPP( x ); \ + return sHandler; \ +} -class WXDLLEXPORT wxBitmapRefData: public wxGDIRefData -{ - friend class WXDLLIMPEXP_FWD_CORE wxIcon; - friend class WXDLLIMPEXP_FWD_CORE wxCursor; -public: - wxBitmapRefData(int width , int height , int depth); - wxBitmapRefData(); - wxBitmapRefData(const wxBitmapRefData &tocopy); +//--------------------------------------------------------------------------- +// wxMac string conversions +//--------------------------------------------------------------------------- - virtual ~wxBitmapRefData(); +void wxMacSetupConverters(); +void wxMacCleanupConverters(); - void Free(); - bool Ok() const { return IsOk(); } - bool IsOk() const { return m_ok; } - void SetOk( bool isOk) { m_ok = isOk; } +WXDLLIMPEXP_BASE void wxMacStringToPascal( const wxString&from , StringPtr to ); +WXDLLIMPEXP_BASE wxString wxMacMakeStringFromPascal( ConstStringPtr from ); - void SetWidth( int width ) { m_width = width; } - void SetHeight( int height ) { m_height = height; } - void SetDepth( int depth ) { m_depth = depth; } +// filefn.cpp - int GetWidth() const { return m_width; } - int GetHeight() const { return m_height; } - int GetDepth() const { return m_depth; } +WXDLLIMPEXP_BASE wxString wxMacFSRefToPath( const FSRef *fsRef , CFStringRef additionalPathComponent = NULL ); +WXDLLIMPEXP_BASE OSStatus wxMacPathToFSRef( const wxString&path , FSRef *fsRef ); +WXDLLIMPEXP_BASE wxString wxMacHFSUniStrToString( ConstHFSUniStr255Param uniname ); - void *GetRawAccess() const; - void *BeginRawAccess(); - void EndRawAccess(); +#if wxUSE_GUI - bool HasAlpha() const { return m_hasAlpha; } - void UseAlpha( bool useAlpha ); +// deprecating QD -public: -#if wxUSE_PALETTE - wxPalette m_bitmapPalette; -#endif // wxUSE_PALETTE +void wxMacLocalToGlobal( WindowRef window , Point*pt ); +void wxMacGlobalToLocal( WindowRef window , Point*pt ); - wxMask * m_bitmapMask; // Optional mask -#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 - 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; - void UpdateAlphaMask() const; - -private : - bool Create(int width , int height , int depth); - void Init(); +//--------------------------------------------------------------------------- +// cocoa bridging utilities +//--------------------------------------------------------------------------- - int m_width; - int m_height; - int m_bytesPerRow; - int m_depth; - bool m_hasAlpha; - wxMemoryBuffer m_memBuf; - int m_rawAccessCount; - bool m_ok; -#ifdef __WXMAC_OSX__ - mutable CGImageRef m_cgImageRef; -#endif - IconRef m_iconRef; - PicHandle m_pictHandle; - GWorldPtr m_hBitmap; - GWorldPtr m_hMaskBitmap; - wxMemoryBuffer m_maskMemBuf; - int m_maskBytesPerRow; -}; +bool wxMacInitCocoa(); -class WXDLLEXPORT wxIconRefData : public wxGDIRefData +class wxMacAutoreleasePool { -public: - wxIconRefData(); - wxIconRefData( WXHICON ); - virtual ~wxIconRefData() { Free(); } - - void Init(); - virtual void Free(); - - void SetWidth( int width ) { m_width = width; } - void SetHeight( int height ) { m_height = height; } - - int GetWidth() const { return m_width; } - int GetHeight() const { return m_height; } - - WXHICON GetHICON() const { return (WXHICON) m_iconRef; } +public : + wxMacAutoreleasePool(); + ~wxMacAutoreleasePool(); private : - IconRef m_iconRef; - int m_width; - int m_height; + void* m_pool; }; -// toplevel.cpp - -ControlRef wxMacFindControlUnderMouse( wxTopLevelWindowMac* toplevelWindow, const Point& location , WindowRef window , ControlPartCode *outPart ); +// NSObject -#ifndef __LP64__ +void wxMacCocoaRelease( void* obj ); +void wxMacCocoaAutorelease( void* obj ); +void wxMacCocoaRetain( void* obj ); -#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 +#if wxMAC_USE_COCOA -#endif +// NSCursor -#endif // wxUSE_GUI +WX_NSCursor wxMacCocoaCreateStockCursor( int cursor_type ); +WX_NSCursor wxMacCocoaCreateCursorFromCGImage( CGImageRef cgImageRef, float hotSpotX, float hotSpotY ); +void wxMacCocoaSetCursor( WX_NSCursor cursor ); +void wxMacCocoaHideCursor(); +void wxMacCocoaShowCursor(); -#define wxMAC_DEFINE_PROC_GETTER( UPP , x ) \ -UPP Get##x() \ -{ \ - static UPP sHandler = NULL; \ - if ( sHandler == NULL ) \ - sHandler = New##UPP( x ); \ - return sHandler; \ -} +typedef struct tagClassicCursor +{ + wxUint16 bits[16]; + wxUint16 mask[16]; + wxInt16 hotspot[2]; +}ClassicCursor; -//--------------------------------------------------------------------------- -// wxMac string conversions -//--------------------------------------------------------------------------- +#else // !wxMAC_USE_COCOA -void wxMacSetupConverters(); -void wxMacCleanupConverters(); +// non Darwin -void wxMacStringToPascal( const wxString&from , StringPtr to ); -wxString wxMacMakeStringFromPascal( ConstStringPtr from ); +typedef Cursor ClassicCursor; -// filefn.cpp +#endif // wxMAC_USE_COCOA -wxString wxMacFSRefToPath( const FSRef *fsRef , CFStringRef additionalPathComponent = NULL ); -OSStatus wxMacPathToFSRef( const wxString&path , FSRef *fsRef ); -wxString wxMacHFSUniStrToString( ConstHFSUniStr255Param uniname ); +// ------------- +// Common to all +// ------------- -#if wxUSE_GUI +// Cursor support -// deprecating QD +const short kwxCursorBullseye = 0; +const short kwxCursorBlank = 1; +const short kwxCursorPencil = 2; +const short kwxCursorMagnifier = 3; +const short kwxCursorNoEntry = 4; +const short kwxCursorPaintBrush = 5; +const short kwxCursorPointRight = 6; +const short kwxCursorPointLeft = 7; +const short kwxCursorQuestionArrow = 8; +const short kwxCursorRightArrow = 9; +const short kwxCursorSizeNS = 10; +const short kwxCursorSize = 11; +const short kwxCursorSizeNESW = 12; +const short kwxCursorSizeNWSE = 13; +const short kwxCursorRoller = 14; +const short kwxCursorLast = kwxCursorRoller; -void wxMacLocalToGlobal( WindowRef window , Point*pt ); -void wxMacGlobalToLocal( WindowRef window , Point*pt ); +// exposing our fallback cursor map -#endif +extern ClassicCursor gMacCursors[]; #endif // _WX_PRIVATE_H_