]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/graphics.cpp
Forgot header with OSX prefix
[wxWidgets.git] / src / osx / carbon / graphics.cpp
index 2ae8e6388d27d30418bef18ef0c545dd9298da62..6afb4468a4f2eb71ca2886cf9ff12ae06d7765f6 100644 (file)
@@ -103,8 +103,13 @@ OSStatus wxMacDrawCGImage(
 #if wxOSX_USE_CARBON
     return HIViewDrawCGImage( inContext, inBounds, inImage );
 #else
-    // todo flip
-    CGContextDrawImage(inContext, *inBounds, inImage );
+    CGContextSaveGState(inContext);
+    CGContextTranslateCTM(inContext, inBounds->origin.x, inBounds->origin.y + inBounds->size.height);
+    CGRect r = *inBounds;
+    r.origin.x = r.origin.y = 0;
+    CGContextScaleCTM(inContext, 1, -1);
+    CGContextDrawImage(inContext, r, inImage );
+    CGContextRestoreGState(inContext);
     return noErr;
 #endif
 }
@@ -685,7 +690,7 @@ void wxMacCoreGraphicsBrushData::CreateRadialGradientBrush( wxDouble xo, wxDoubl
     const wxColour &oColor, const wxColour &cColor )
 {
     m_gradientFunction = CreateGradientFunction( oColor, cColor );
-    m_shading = CGShadingCreateRadial( wxMacGetGenericRGBColorSpace(), CGPointMake((CGFloat) xo,(CGFloat) yo), 0, 
+    m_shading = CGShadingCreateRadial( wxMacGetGenericRGBColorSpace(), CGPointMake((CGFloat) xo,(CGFloat) yo), 0,
                                         CGPointMake((CGFloat) xc,(CGFloat) yc), (CGFloat) radius, m_gradientFunction, true, true ) ;
     m_isShading = true ;
 }
@@ -1140,7 +1145,7 @@ public :
     // gets the bounding box enclosing all points (possibly including control points)
     virtual void GetBox(wxDouble *x, wxDouble *y, wxDouble *w, wxDouble *y) const;
 
-    virtual bool Contains( wxDouble x, wxDouble y, int fillStyle = wxODDEVEN_RULE) const;
+    virtual bool Contains( wxDouble x, wxDouble y, wxPolygonFillMode fillStyle = wxODDEVEN_RULE) const;
 private :
     CGMutablePathRef m_path;
 };
@@ -1251,7 +1256,7 @@ void wxMacCoreGraphicsPathData::GetBox(wxDouble *x, wxDouble *y, wxDouble *w, wx
     *h = bounds.size.height;
 }
 
-bool wxMacCoreGraphicsPathData::Contains( wxDouble x, wxDouble y, int fillStyle) const
+bool wxMacCoreGraphicsPathData::Contains( wxDouble x, wxDouble y, wxPolygonFillMode fillStyle) const
 {
     return CGPathContainsPoint( m_path, NULL, CGPointMake((CGFloat) x,(CGFloat) y), fillStyle == wxODDEVEN_RULE );
 }
@@ -1309,7 +1314,7 @@ public:
 
     virtual void * GetNativeContext();
 
-    bool SetLogicalFunction( int function );
+    bool SetLogicalFunction( wxRasterOperationMode function );
     //
     // transformation
     //
@@ -1339,10 +1344,10 @@ public:
     virtual void StrokePath( const wxGraphicsPath &path );
 
     // fills a path with the current brush
-    virtual void FillPath( const wxGraphicsPath &path, int fillStyle = wxODDEVEN_RULE );
+    virtual void FillPath( const wxGraphicsPath &path, wxPolygonFillMode fillStyle = wxODDEVEN_RULE );
 
     // draws a path by first filling and then stroking
-    virtual void DrawPath( const wxGraphicsPath &path, int fillStyle = wxODDEVEN_RULE );
+    virtual void DrawPath( const wxGraphicsPath &path, wxPolygonFillMode fillStyle = wxODDEVEN_RULE );
 
     virtual bool ShouldOffset() const
     {
@@ -1359,10 +1364,6 @@ public:
     // text
     //
 
-    virtual void DrawText( const wxString &str, wxDouble x, wxDouble y );
-
-    virtual void DrawText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle );
-
     virtual void GetTextExtent( const wxString &text, wxDouble *width, wxDouble *height,
         wxDouble *descent, wxDouble *externalLeading ) const;
 
@@ -1385,6 +1386,9 @@ public:
 private:
     void EnsureIsValid();
 
+    virtual void DoDrawText( const wxString &str, wxDouble x, wxDouble y );
+    virtual void DoDrawRotatedText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle );
+
     CGContextRef m_cgContext;
 #if wxOSX_USE_CARBON
     WindowRef m_windowRef;
@@ -1570,7 +1574,7 @@ void wxMacCoreGraphicsContext::EnsureIsValid()
 
 // TODO test whether the private CGContextSetCompositeOperation works under 10.3 (using NSCompositingModes)
 
-bool wxMacCoreGraphicsContext::SetLogicalFunction( int function )
+bool wxMacCoreGraphicsContext::SetLogicalFunction( wxRasterOperationMode function )
 {
     if (m_logicalFunction == function)
         return true;
@@ -1728,7 +1732,7 @@ void wxMacCoreGraphicsContext::StrokePath( const wxGraphicsPath &path )
     CGContextStrokePath( m_cgContext );
 }
 
-void wxMacCoreGraphicsContext::DrawPath( const wxGraphicsPath &path , int fillStyle )
+void wxMacCoreGraphicsContext::DrawPath( const wxGraphicsPath &path , wxPolygonFillMode fillStyle )
 {
     if ( !m_brush.IsNull() && ((wxMacCoreGraphicsBrushData*)m_brush.GetRefData())->IsShading() )
     {
@@ -1777,7 +1781,7 @@ void wxMacCoreGraphicsContext::DrawPath( const wxGraphicsPath &path , int fillSt
     CGContextDrawPath( m_cgContext , mode );
 }
 
-void wxMacCoreGraphicsContext::FillPath( const wxGraphicsPath &path , int fillStyle )
+void wxMacCoreGraphicsContext::FillPath( const wxGraphicsPath &path , wxPolygonFillMode fillStyle )
 {
     if ( m_brush.IsNull() )
         return;
@@ -1939,7 +1943,7 @@ void wxMacCoreGraphicsContext::PopState()
     CGContextRestoreGState( m_cgContext );
 }
 
-void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDouble y )
+void wxMacCoreGraphicsContext::DoDrawText( const wxString &str, wxDouble x, wxDouble y )
 {
     wxCHECK_RET( !m_font.IsNull(), wxT("wxMacCoreGraphicsContext::DrawText - no valid font set") );
 
@@ -1984,7 +1988,7 @@ void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDoub
     CGContextSaveGState(m_cgContext);
 
     CGColorRef col = wxMacCreateCGColor( fref->GetColour() );
-    CGContextSetTextDrawingMode (m_cgContext, kCGTextFill); 
+    CGContextSetTextDrawingMode (m_cgContext, kCGTextFill);
     CGContextSetFillColorWithColor( m_cgContext, col );
 
     wxCFStringRef text(str, wxLocale::GetSystemEncoding() );
@@ -1995,7 +1999,9 @@ void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDoub
 #endif
 }
 
-void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle )
+void wxMacCoreGraphicsContext::DoDrawRotatedText(const wxString &str,
+                                                 wxDouble x, wxDouble y,
+                                                 wxDouble angle)
 {
     wxCHECK_RET( !m_font.IsNull(), wxT("wxMacCoreGraphicsContext::DrawText - no valid font set") );
 
@@ -2004,7 +2010,7 @@ void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDoub
     if ( UMAGetSystemVersion() >= 0x1050 )
     {
         // default implementation takes care of rotation and calls non rotated DrawText afterwards
-        wxGraphicsContext::DrawText( str, x, y, angle );
+        wxGraphicsContext::DoDrawRotatedText( str, x, y, angle );
         return;
     }
 #endif
@@ -2094,7 +2100,7 @@ void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDoub
 #endif
 #if wxOSX_USE_IPHONE
     // default implementation takes care of rotation and calls non rotated DrawText afterwards
-    wxGraphicsContext::DrawText( str, x, y, angle );
+    wxGraphicsContext::DoDrawRotatedText( str, x, y, angle );
 #endif
 }
 
@@ -2186,7 +2192,7 @@ void wxMacCoreGraphicsContext::GetTextExtent( const wxString &str, wxDouble *wid
 
     wxCFStringRef text(str, wxLocale::GetSystemEncoding() );
     CGSize sz = MeasureTextInContext( fref->GetUIFont() , text.AsNSString() );
-    
+
     if ( height )
         *height = sz.height;
         /*
@@ -2268,7 +2274,7 @@ void wxMacCoreGraphicsContext::GetPartialTextExtents(const wxString& text, wxArr
 #else
         ATSLayoutRecord *layoutRecords = NULL;
         ItemCount glyphCount = 0;
-        
+
         // Get the glyph extents
         OSStatus err = ::ATSUDirectGetLayoutDataArrayPtrFromTextLayout(atsuLayout,
                                                                        0,
@@ -2277,7 +2283,7 @@ void wxMacCoreGraphicsContext::GetPartialTextExtents(const wxString& text, wxArr
                                                                        &layoutRecords,
                                                                        &glyphCount);
         wxASSERT(glyphCount == (text.length()+1));
-        
+
         if ( err == noErr && glyphCount == (text.length()+1))
         {
             for ( int pos = 1; pos < (int)glyphCount ; pos ++ )
@@ -2285,7 +2291,7 @@ void wxMacCoreGraphicsContext::GetPartialTextExtents(const wxString& text, wxArr
                 widths[pos-1] = FixedToInt( layoutRecords[pos].realPos );
             }
         }
-        
+
         ::ATSUDirectReleaseLayoutDataArrayPtr(NULL,
                                               kATSUDirectDataLayoutRecordATSLayoutRecordCurrent,
                                               (void **) &layoutRecords);