]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/graphics.cpp
guard code for mac / quickdraw
[wxWidgets.git] / src / mac / carbon / graphics.cpp
index 78992a2f28eab10f9aa156682de138a21012bfe2..0766f67236b93b797924fcdd4afd4b7bfe2c24e6 100644 (file)
 
 #include "wx/mac/private.h"
 
-#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
-typedef float CGFloat;
-#endif
-
 //-----------------------------------------------------------------------------
 // constants
 //-----------------------------------------------------------------------------
@@ -66,8 +62,9 @@ OSStatus wxMacDrawCGImage(
 #ifdef __LP64__
     // todo flip
     CGContextDrawImage(inContext, *inBounds, inImage );
+    return noErr;
 #else
-    HIViewDrawCGImage( inContext, inBounds, inImage );
+    return HIViewDrawCGImage( inContext, inBounds, inImage );
 #endif
 }
 
@@ -117,7 +114,7 @@ public :
     {
         wxASSERT( bmp && bmp->Ok() );
 
-        Init( (CGImageRef) bmp->CGImageCreate() , transform );
+        Init( (CGImageRef) bmp->CreateCGImage() , transform );
     }
 
     // ImagePattern takes ownership of CGImageRef passed in
@@ -483,6 +480,26 @@ static const char *gs_stripedback_xpm[] = {
 
 wxBitmap gs_stripedback_bmp( wxImage( (const char* const* ) gs_stripedback_xpm  ), -1 ) ;
 
+// make sure we all use one class for all conversions from wx to native colour
+
+class wxMacCoreGraphicsColour
+{
+    public:
+        wxMacCoreGraphicsColour();
+        wxMacCoreGraphicsColour(const wxBrush &brush);
+        ~wxMacCoreGraphicsColour();
+        
+        void Apply( CGContextRef cgContext );
+    protected:
+        void Init();
+        wxMacCFRefHolder<CGColorRef> m_color;
+        wxMacCFRefHolder<CGColorSpaceRef> m_colorSpace;
+        
+        bool m_isPattern;
+        wxMacCFRefHolder<CGPatternRef> m_pattern;
+        CGFloat* m_patternColorComponents;
+} ;
+
 wxMacCoreGraphicsColour::~wxMacCoreGraphicsColour()
 {
     delete[] m_patternColorComponents;
@@ -519,18 +536,7 @@ wxMacCoreGraphicsColour::wxMacCoreGraphicsColour( const wxBrush &brush )
     Init();
     if ( brush.GetStyle() == wxSOLID )
     {
-        if ( brush.MacGetBrushKind() == kwxMacBrushTheme )
-        {
-            CGColorRef color ;
-            HIThemeBrushCreateCGColor( brush.MacGetTheme(), &color );
-            m_color.Set( color ) ;
-        }
-        else
-        {
-            CGFloat components[4] = { brush.GetColour().Red() / 255.0 , brush.GetColour().Green() / 255.0 ,
-                brush.GetColour().Blue() / 255.0 , brush.GetColour().Alpha() / 255.0 } ;
-            m_color.Set( CGColorCreate( wxMacGetGenericRGBColorSpace() , components ) ) ;
-        }
+        m_color.Set( brush.GetColour().CreateCGColor() );
     }
     else if ( brush.IsHatch() )
     {
@@ -699,6 +705,8 @@ wxMacCoreGraphicsFontData::wxMacCoreGraphicsFontData(wxGraphicsRenderer* rendere
 {
     m_macATSUIStyle = NULL;
 
+#ifdef wxMAC_USE_CORE_TEXT
+#elif defined(wxMAC_USE_ATSU_TEXT)
     OSStatus status;
 
     status = ATSUCreateAndCopyStyle( (ATSUStyle) font.MacGetATSUStyle() , &m_macATSUIStyle );
@@ -731,15 +739,21 @@ wxMacCoreGraphicsFontData::wxMacCoreGraphicsFontData(wxGraphicsRenderer* rendere
         atsuTags, atsuSizes, atsuValues);
 
     wxASSERT_MSG( status == noErr , wxT("couldn't modify ATSU style") );
+#elif defined(WXMAC_USE_CG_TEXT)
+#endif
 }
 
 wxMacCoreGraphicsFontData::~wxMacCoreGraphicsFontData()
 {
+#ifdef wxMAC_USE_CORE_TEXT
+#elif defined(wxMAC_USE_ATSU_TEXT)
     if ( m_macATSUIStyle )
     {
         ::ATSUDisposeStyle((ATSUStyle)m_macATSUIStyle);
         m_macATSUIStyle = NULL;
     }
+#elif defined(WXMAC_USE_CG_TEXT)
+#endif
 }
 
 //
@@ -1311,9 +1325,12 @@ wxMacCoreGraphicsContext::wxMacCoreGraphicsContext( wxGraphicsRenderer* renderer
     int originX , originY;
     originX = originY = 0;
     window->MacWindowToRootWindow( &originX , &originY );
-    Rect bounds;
-    GetWindowBounds( m_windowRef, kWindowContentRgn, &bounds );
 
+    Rect bounds = { 0,0,0,0 };
+#ifdef __LP64__
+#else
+    GetWindowBounds( m_windowRef, kWindowContentRgn, &bounds );
+#endif
     m_windowTransform = CGAffineTransformMakeTranslation( 0 , bounds.bottom - bounds.top );
     m_windowTransform = CGAffineTransformScale( m_windowTransform , 1 , -1 );
     m_windowTransform = CGAffineTransformTranslate( m_windowTransform, originX, originY ) ;
@@ -1427,18 +1444,14 @@ void wxMacCoreGraphicsContext::Clip( const wxRegion &region )
 {
     if( m_cgContext )
     {
-        HIShapeRef shape = HIShapeCreateWithQDRgn( (RgnHandle) region.GetWXHRGN() );
-        HIShapeReplacePathInCGContext( shape, m_cgContext );
+        HIShapeReplacePathInCGContext( region.GetWXHRGN() , m_cgContext );
         CGContextClip( m_cgContext );
-        CFRelease( shape );
     }
     else
     {
         // this offsetting to device coords is not really correct, but since we cannot apply affine transforms
         // to regions we try at least to have correct translations
-        wxMacCFRefHolder<HIShapeRef> hishape ;
-        hishape.Set( HIShapeCreateWithQDRgn( (RgnHandle) region.GetWXHRGN() ));
-        HIMutableShapeRef mutableShape = HIShapeCreateMutableCopy( hishape );
+        HIMutableShapeRef mutableShape = HIShapeCreateMutableCopy( region.GetWXHRGN() );
         
         CGPoint transformedOrigin = CGPointApplyAffineTransform( CGPointZero, m_windowTransform );
         HIShapeOffset( mutableShape, transformedOrigin.x, transformedOrigin.y );
@@ -1641,7 +1654,7 @@ void wxMacCoreGraphicsContext::DrawBitmap( const wxBitmap &bmp, wxDouble x, wxDo
 {
     EnsureIsValid();
 
-    CGImageRef image = (CGImageRef)( bmp.CGImageCreate() );
+    CGImageRef image = (CGImageRef)( bmp.CreateCGImage() );
     HIRect r = CGRectMake( x , y , w , h );
     if ( bmp.GetDepth() == 1 )
     {
@@ -1702,7 +1715,17 @@ void wxMacCoreGraphicsContext::PopState()
 
 void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDouble y )
 {
+    if ( m_font.IsNull() )
+        return;
+    
+    EnsureIsValid();
+#ifdef wxMAC_USE_CORE_TEXT
+    // TODO core text implementation here
+#elif defined(wxMAC_USE_ATSU_TEXT)
     DrawText(str, x, y, 0.0);
+#elif defined(WXMAC_USE_CG_TEXT)
+    // TODO core graphics text implementation here
+#endif
 }
 
 void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle )
@@ -1711,7 +1734,10 @@ void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDoub
         return;
 
     EnsureIsValid();
-
+#ifdef wxMAC_USE_CORE_TEXT
+    // default implementation takes care of rotation and calls non rotated DrawText afterwards
+    wxGraphicsContext::DrawText( str, x, y, angle );
+#elif defined(wxMAC_USE_ATSU_TEXT)
     OSStatus status = noErr;
     ATSUTextLayout atsuLayout;
     UniCharCount chars = str.length();
@@ -1817,6 +1843,10 @@ void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDoub
 #if SIZEOF_WCHAR_T == 4
     free( ubuf );
 #endif
+#elif defined(WXMAC_USE_CG_TEXT)
+    // default implementation takes care of rotation and calls non rotated DrawText afterwards
+    wxGraphicsContext::DrawText( str, x, y, angle );
+#endif
 }
 
 void wxMacCoreGraphicsContext::GetTextExtent( const wxString &str, wxDouble *width, wxDouble *height,
@@ -1836,6 +1866,9 @@ void wxMacCoreGraphicsContext::GetTextExtent( const wxString &str, wxDouble *wid
     if (str.empty())
         return;
 
+#ifdef wxMAC_USE_CORE_TEXT
+    // TODO core text implementation here
+#elif defined(wxMAC_USE_ATSU_TEXT)
     OSStatus status = noErr;
 
     ATSUTextLayout atsuLayout;
@@ -1890,6 +1923,9 @@ void wxMacCoreGraphicsContext::GetTextExtent( const wxString &str, wxDouble *wid
 #if SIZEOF_WCHAR_T == 4
     free( ubuf ) ;
 #endif
+#elif defined(WXMAC_USE_CG_TEXT)
+    // TODO core graphics text implementation here
+#endif
 }
 
 void wxMacCoreGraphicsContext::GetPartialTextExtents(const wxString& text, wxArrayDouble& widths) const
@@ -1900,6 +1936,9 @@ void wxMacCoreGraphicsContext::GetPartialTextExtents(const wxString& text, wxArr
     if (text.empty())
         return;
 
+#ifdef wxMAC_USE_CORE_TEXT
+    // TODO core text implementation here
+#elif defined(wxMAC_USE_ATSU_TEXT)
     ATSUTextLayout atsuLayout;
     UniCharCount chars = text.length();
     UniChar* ubuf = NULL;
@@ -1951,6 +1990,9 @@ void wxMacCoreGraphicsContext::GetPartialTextExtents(const wxString& text, wxArr
 #if SIZEOF_WCHAR_T == 4
     free( ubuf ) ;
 #endif
+#elif defined(WXMAC_USE_CG_TEXT)
+    // TODO core graphics text implementation here
+#endif
 }
 
 void * wxMacCoreGraphicsContext::GetNativeContext()