X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3d63970769b32a93061989a38a00a5b6110bc7a5..478cde3220641d49cfbd492e799107d13ccdfeb3:/include/wx/mac/carbon/private.h diff --git a/include/wx/mac/carbon/private.h b/include/wx/mac/carbon/private.h index ebb875f6fc..61860b319a 100644 --- a/include/wx/mac/carbon/private.h +++ b/include/wx/mac/carbon/private.h @@ -28,6 +28,7 @@ # include # include # include +# include #endif #if UNIVERSAL_INTERFACES_VERSION < 0x0340 @@ -38,11 +39,14 @@ #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 + #ifdef __WXMAC_CARBON__ #include "wx/mac/corefoundation/cfstring.h" #endif -#include #ifndef FixedToInt // as macro in FixMath.h for 10.3 inline Fixed IntToFixed( int inInt ) @@ -58,7 +62,9 @@ inline int FixedToInt( Fixed inFixed ) #if wxUSE_GUI +#include "wx/dc.h" #include "wx/window.h" +#include "wx/toplevel.h" class wxMacPortStateHelper { @@ -144,6 +150,26 @@ private: ThemeDrawingState m_themeDrawingState ; } ; +#if wxMAC_USE_CORE_GRAPHICS +class WXDLLEXPORT wxMacCGContextStateSaver +{ + DECLARE_NO_COPY_CLASS(wxMacCGContextStateSaver) + +public: + wxMacCGContextStateSaver( CGContextRef cg ) + { + m_cg = cg ; + CGContextSaveGState( cg ) ; + } + ~wxMacCGContextStateSaver() + { + CGContextRestoreGState( m_cg ) ; + } +private: + CGContextRef m_cg ; +} ; + +#endif /* class wxMacDrawingHelper { @@ -345,19 +371,21 @@ private : typedef wxMacUPP wxMacNMUPP ; #if wxUSE_GUI - +/* GWorldPtr wxMacCreateGWorld( int width , int height , int depth ) ; void wxMacDestroyGWorld( GWorldPtr gw ) ; PicHandle wxMacCreatePict( GWorldPtr gw , GWorldPtr mask = NULL ) ; CIconHandle wxMacCreateCIcon(GWorldPtr image , GWorldPtr mask , short dstDepth , short iconSize ) ; void wxMacSetColorTableEntry( CTabHandle newColors , int index , int red , int green , int blue ) ; CTabHandle wxMacCreateColorTable( int numColors ) ; +*/ void wxMacCreateBitmapButton( ControlButtonContentInfo*info , const wxBitmap& bitmap , int forceType = 0 ) ; +void wxMacReleaseBitmapButton( ControlButtonContentInfo*info ) ; #define MAC_WXCOLORREF(a) (*((RGBColor*)&(a))) #define MAC_WXHBITMAP(a) (GWorldPtr(a)) #define MAC_WXHMETAFILE(a) (PicHandle(a)) -#define MAC_WXHICON(a) (CIconHandle(a)) +#define MAC_WXHICON(a) (IconRef(a)) #define MAC_WXHCURSOR(a) (CursHandle(a)) #define MAC_WXHRGN(a) (RgnHandle(a)) #define MAC_WXHWND(a) (WindowPtr(a)) @@ -373,6 +401,11 @@ 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) ; @@ -381,25 +414,17 @@ 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() - { - m_controlRef = NULL ; - } + wxMacControl( wxWindow* peer , bool isRootControl = false ) ; + wxMacControl( wxWindow* peer , ControlRef control ) ; + wxMacControl( wxWindow* peer , WXWidget control ) ; + virtual ~wxMacControl() ; - wxMacControl( ControlRef control ) - { - m_controlRef = control ; - } - wxMacControl( WXWidget control ) - { - m_controlRef = (ControlRef) control ; - } - virtual ~wxMacControl() - { - } + void Init() ; virtual void Dispose() ; @@ -438,6 +463,7 @@ public : virtual OSStatus SetFocus( ControlFocusPart focusPart ) ; virtual bool HasFocus() const ; virtual bool NeedsFocusRect() const ; + virtual void SetNeedsFocusRect( bool needs ) ; // templated helpers @@ -469,7 +495,11 @@ public : // Flash the control for the specified amount of time virtual void Flash( ControlPartCode part , UInt32 ticks = 8 ) ; + virtual void VisibilityChanged( bool shown ) ; + virtual void SuperChangedPosition() ; + + virtual void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle ) ; virtual void SetBackground( const wxBrush &brush ) ; virtual ControlPartCode HandleKey( SInt16 keyCode, SInt16 charCode, EventModifiers modifiers ) ; @@ -486,13 +516,22 @@ public : // 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 + // 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 ) ; virtual void ScrollRect( const 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 ) ; @@ -534,14 +573,196 @@ public : // 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 ; + wxWindow* m_peer ; + bool m_needsFocusRect ; + bool m_isCompositing ; + bool m_isRootControl ; } ; +#if wxMAC_USE_CORE_GRAPHICS + +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 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 ; +} ; + +class WXDLLEXPORT wxMacCGContext : public wxGraphicContext +{ + DECLARE_NO_COPY_CLASS(wxMacCGContext) + +public: + wxMacCGContext( CGrafPtr port ) ; + wxMacCGContext( CGContextRef cgcontext ) ; + wxMacCGContext() ; + ~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 ; } +private: + CGContextRef m_cgContext ; + CGrafPtr m_qdPort ; + CGPathDrawingMode m_mode ; + wxPen m_pen ; + 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 + +class WXDLLEXPORT wxBitmapRefData: public wxGDIRefData +{ + DECLARE_NO_COPY_CLASS(wxBitmapRefData) + + friend class WXDLLEXPORT wxIcon; + friend class WXDLLEXPORT wxCursor; +public: + wxBitmapRefData(int width , int height , int depth); + wxBitmapRefData(); + ~wxBitmapRefData(); + + 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 ; } + + 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() ; + + bool HasAlpha() const { return m_hasAlpha ; } + void UseAlpha( bool useAlpha ) ; + +public: +#if wxUSE_PALETTE + wxPalette m_bitmapPalette; +#endif // wxUSE_PALETTE + + 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() ; + + 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 ; +}; + +class WXDLLEXPORT wxIconRefData : public wxGDIRefData +{ +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 ; } +private : + IconRef m_iconRef ; + int m_width ; + int m_height ; +}; + +// toplevel.cpp + +ControlRef wxMacFindControlUnderMouse( wxTopLevelWindowMac* toplevelWindow, Point location , WindowRef window , ControlPartCode *outPart ) ; + #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 //--------------------------------------------------------------------------- @@ -552,10 +773,6 @@ void wxMacCleanupConverters() ; void wxMacStringToPascal( const wxString&from , StringPtr to ) ; wxString wxMacMakeStringFromPascal( ConstStringPtr from ) ; -// toplevel.cpp - -ControlRef wxMacFindControlUnderMouse( Point location , WindowRef window , ControlPartCode *outPart ) ; - // filefn.cpp wxString wxMacFSRefToPath( const FSRef *fsRef , CFStringRef additionalPathComponent = NULL ) ;