]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/graphics.cpp
Return smaller images for wxART_MENU/BUTTON under OS X.
[wxWidgets.git] / src / osx / carbon / graphics.cpp
index b3fc827537ebeb18f4ddf7d9146868389be4e196..1467704afdc9a74e72042a541e171f7cfdb0926b 100644 (file)
@@ -98,7 +98,7 @@ typedef enum CGCompositeOperation {
    kCGCompositeOperationDestinationAtop = 9,
    kCGCompositeOperationXOR             = 10,
    kCGCompositeOperationPlusDarker      = 11,
-// NS only, unsupported by CG : Highlight 
+// NS only, unsupported by CG : Highlight
    kCGCompositeOperationPlusLighter     = 12
 } CGCompositeOperation ;
 
@@ -453,32 +453,32 @@ wxMacCoreGraphicsPenData::wxMacCoreGraphicsPenData( wxGraphicsRenderer* renderer
 
     switch ( pen.GetStyle() )
     {
-        case wxSOLID :
+        case wxPENSTYLE_SOLID:
             break;
 
-        case wxDOT :
+        case wxPENSTYLE_DOT:
             m_count = WXSIZEOF(dotted);
             m_userLengths = new CGFloat[ m_count ] ;
             memcpy( m_userLengths, dotted, sizeof(dotted) );
             m_lengths = m_userLengths;
             break;
 
-        case wxLONG_DASH :
+        case wxPENSTYLE_LONG_DASH:
             m_count = WXSIZEOF(dashed);
             m_lengths = dashed;
             break;
 
-        case wxSHORT_DASH :
+        case wxPENSTYLE_SHORT_DASH:
             m_count = WXSIZEOF(short_dashed);
             m_lengths = short_dashed;
             break;
 
-        case wxDOT_DASH :
+        case wxPENSTYLE_DOT_DASH:
             m_count = WXSIZEOF(dotted_dashed);
             m_lengths = dotted_dashed;
             break;
 
-        case wxUSER_DASH :
+        case wxPENSTYLE_USER_DASH:
             wxDash *dashes;
             m_count = pen.GetDashes( &dashes );
             if ((dashes != NULL) && (m_count > 0))
@@ -497,7 +497,7 @@ wxMacCoreGraphicsPenData::wxMacCoreGraphicsPenData( wxGraphicsRenderer* renderer
             m_lengths = m_userLengths;
             break;
 
-        case wxSTIPPLE :
+        case wxPENSTYLE_STIPPLE:
             {
                 wxBitmap* bmp = pen.GetStipple();
                 if ( bmp && bmp->Ok() )
@@ -573,20 +573,6 @@ void wxMacCoreGraphicsPenData::Apply( wxGraphicsContext* context )
 // Brush
 //
 
-static const char *gs_stripedback_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"4 4 2 1",
-". c #F0F0F0",
-"X c #ECECEC",
-/* pixels */
-"....",
-"....",
-"XXXX",
-"XXXX"
-};
-
-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
@@ -1349,7 +1335,7 @@ public:
     virtual void BeginLayer(wxDouble opacity);
 
     virtual void EndLayer();
-    
+
     //
     // transformation
     //
@@ -1597,7 +1583,7 @@ bool wxMacCoreGraphicsContext::EnsureIsValid()
     {
         if (m_invisible)
             return false;
-            
+
 #if wxOSX_USE_COCOA
         if ( wxOSXLockFocus(m_view) )
         {
@@ -1625,8 +1611,9 @@ bool wxMacCoreGraphicsContext::EnsureIsValid()
 #endif
         if ( m_cgContext )
         {
-            CGContextConcatCTM( m_cgContext, m_windowTransform );
             CGContextSaveGState( m_cgContext );
+            CGContextConcatCTM( m_cgContext, m_windowTransform );
+            CGContextSetTextMatrix( m_cgContext, CGAffineTransformIdentity );
             m_contextSynthesized = true;
 #if wxOSX_USE_COCOA_OR_CARBON
             if ( m_clipRgn.get() )
@@ -1649,7 +1636,7 @@ bool wxMacCoreGraphicsContext::EnsureIsValid()
             }
 #endif
             CGContextSaveGState( m_cgContext );
-            
+
 #if 0 // turn on for debugging of clientdc
             static float color = 0.5 ;
             static int channel = 0 ;
@@ -1673,14 +1660,14 @@ bool wxMacCoreGraphicsContext::EnsureIsValid()
 
 bool wxMacCoreGraphicsContext::SetAntialiasMode(wxAntialiasMode antialias)
 {
-    if (EnsureIsValid()==false)
+    if (!EnsureIsValid())
         return true;
 
     if (m_antialias == antialias)
         return true;
-    
+
     m_antialias = antialias;
-    
+
     bool antialiasMode;
     switch (antialias)
     {
@@ -1699,17 +1686,17 @@ bool wxMacCoreGraphicsContext::SetAntialiasMode(wxAntialiasMode antialias)
 
 bool wxMacCoreGraphicsContext::SetCompositionMode(wxCompositionMode op)
 {
-    if (EnsureIsValid()==false)
+    if (!EnsureIsValid())
         return true;
 
     if ( m_composition == op )
         return true;
-        
+
     m_composition = op;
-    
+
     if (m_composition == wxCOMPOSITION_DEST)
         return true;
-        
+
 #if wxOSX_USE_COCOA_OR_CARBON
     if ( UMAGetSystemVersion() < 0x1060 )
     {
@@ -1718,37 +1705,37 @@ bool wxMacCoreGraphicsContext::SetCompositionMode(wxCompositionMode op)
         switch( op )
         {
         case wxCOMPOSITION_CLEAR:
-            cop = kCGCompositeOperationClear; 
+            cop = kCGCompositeOperationClear;
             break;
         case wxCOMPOSITION_SOURCE:
-            cop = kCGCompositeOperationCopy; 
+            cop = kCGCompositeOperationCopy;
             break;
         case wxCOMPOSITION_OVER:
-            mode = kCGBlendModeNormal; 
+            mode = kCGBlendModeNormal;
             break;
         case wxCOMPOSITION_IN:
-            cop = kCGCompositeOperationSourceIn; 
+            cop = kCGCompositeOperationSourceIn;
             break;
         case wxCOMPOSITION_OUT:
-            cop = kCGCompositeOperationSourceOut; 
+            cop = kCGCompositeOperationSourceOut;
             break;
         case wxCOMPOSITION_ATOP:
-            cop = kCGCompositeOperationSourceAtop; 
+            cop = kCGCompositeOperationSourceAtop;
             break;
         case wxCOMPOSITION_DEST_OVER:
-            cop = kCGCompositeOperationDestinationOver; 
+            cop = kCGCompositeOperationDestinationOver;
             break;
         case wxCOMPOSITION_DEST_IN:
-            cop = kCGCompositeOperationDestinationIn; 
+            cop = kCGCompositeOperationDestinationIn;
             break;
         case wxCOMPOSITION_DEST_OUT:
-            cop = kCGCompositeOperationDestinationOut; 
+            cop = kCGCompositeOperationDestinationOut;
             break;
         case wxCOMPOSITION_DEST_ATOP:
-           cop = kCGCompositeOperationDestinationAtop; 
+           cop = kCGCompositeOperationDestinationAtop;
             break;
         case wxCOMPOSITION_XOR:
-            cop = kCGCompositeOperationXOR; 
+            cop = kCGCompositeOperationXOR;
             break;
 #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
         case wxCOMPOSITION_ADD:
@@ -1771,39 +1758,39 @@ bool wxMacCoreGraphicsContext::SetCompositionMode(wxCompositionMode op)
         switch( op )
         {
         case wxCOMPOSITION_CLEAR:
-            mode = kCGBlendModeClear; 
+            mode = kCGBlendModeClear;
             break;
         case wxCOMPOSITION_SOURCE:
-            mode = kCGBlendModeCopy; 
+            mode = kCGBlendModeCopy;
             break;
         case wxCOMPOSITION_OVER:
-            mode = kCGBlendModeNormal; 
+            mode = kCGBlendModeNormal;
             break;
         case wxCOMPOSITION_IN:
-            mode = kCGBlendModeSourceIn; 
+            mode = kCGBlendModeSourceIn;
             break;
         case wxCOMPOSITION_OUT:
-            mode = kCGBlendModeSourceOut; 
+            mode = kCGBlendModeSourceOut;
             break;
         case wxCOMPOSITION_ATOP:
-            mode = kCGBlendModeSourceAtop; 
+            mode = kCGBlendModeSourceAtop;
             break;
         case wxCOMPOSITION_DEST_OVER:
-            mode = kCGBlendModeDestinationOver; 
+            mode = kCGBlendModeDestinationOver;
             break;
         case wxCOMPOSITION_DEST_IN:
-            mode = kCGBlendModeDestinationIn; 
+            mode = kCGBlendModeDestinationIn;
             break;
         case wxCOMPOSITION_DEST_OUT:
-            mode = kCGBlendModeDestinationOut; 
+            mode = kCGBlendModeDestinationOut;
             break;
         case wxCOMPOSITION_DEST_ATOP:
-           mode = kCGBlendModeDestinationAtop; 
+           mode = kCGBlendModeDestinationAtop;
             break;
         case wxCOMPOSITION_XOR:
-            mode = kCGBlendModeXOR; 
+            mode = kCGBlendModeXOR;
             break;
-            
+
         case wxCOMPOSITION_ADD:
             mode = kCGBlendModePlusLighter ;
             break;
@@ -1916,9 +1903,9 @@ void wxMacCoreGraphicsContext::StrokePath( const wxGraphicsPath &path )
     if ( m_pen.IsNull() )
         return ;
 
-    if (EnsureIsValid()==false)
+    if (!EnsureIsValid())
         return;
-        
+
     if (m_composition == wxCOMPOSITION_DEST)
         return;
 
@@ -1931,9 +1918,9 @@ void wxMacCoreGraphicsContext::StrokePath( const wxGraphicsPath &path )
 
 void wxMacCoreGraphicsContext::DrawPath( const wxGraphicsPath &path , wxPolygonFillMode fillStyle )
 {
-    if (EnsureIsValid()==false)
+    if (!EnsureIsValid())
         return;
-        
+
     if (m_composition == wxCOMPOSITION_DEST)
         return;
 
@@ -1987,9 +1974,9 @@ void wxMacCoreGraphicsContext::FillPath( const wxGraphicsPath &path , wxPolygonF
     if ( m_brush.IsNull() )
         return;
 
-    if (EnsureIsValid()==false)
+    if (!EnsureIsValid())
         return;
-        
+
     if (m_composition == wxCOMPOSITION_DEST)
         return;
 
@@ -2023,7 +2010,7 @@ void wxMacCoreGraphicsContext::SetNativeContext( CGContextRef cg )
         CGContextRestoreGState( m_cgContext );
         if ( m_contextSynthesized )
         {
-            // TODO: in case of performance problems, try issuing this not too 
+            // TODO: in case of performance problems, try issuing this not too
             // frequently (half of refresh rate)
             CGContextFlush(m_cgContext);
 #if wxOSX_USE_CARBON
@@ -2088,12 +2075,12 @@ void wxMacCoreGraphicsContext::DrawBitmap( const wxBitmap &bmp, wxDouble x, wxDo
 
 void wxMacCoreGraphicsContext::DrawBitmap( const wxGraphicsBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h )
 {
-    if (EnsureIsValid()==false)
+    if (!EnsureIsValid())
         return;
 
     if (m_composition == wxCOMPOSITION_DEST)
         return;
-        
+
 #ifdef __WXMAC__
     wxMacCoreGraphicsBitmapData* refdata  =static_cast<wxMacCoreGraphicsBitmapData*>(bmp.GetRefData());
     CGImageRef image = refdata->GetBitmap();
@@ -2130,9 +2117,9 @@ void wxMacCoreGraphicsContext::DrawBitmap( const wxGraphicsBitmap &bmp, wxDouble
 
 void wxMacCoreGraphicsContext::DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxDouble w, wxDouble h )
 {
-    if (EnsureIsValid()==false)
+    if (!EnsureIsValid())
         return;
-        
+
     if (m_composition == wxCOMPOSITION_DEST)
         return;
 
@@ -2149,17 +2136,17 @@ void wxMacCoreGraphicsContext::DrawIcon( const wxIcon &icon, wxDouble x, wxDoubl
 
 void wxMacCoreGraphicsContext::PushState()
 {
-    if (EnsureIsValid()==false)
+    if (!EnsureIsValid())
         return;
-        
+
     CGContextSaveGState( m_cgContext );
 }
 
 void wxMacCoreGraphicsContext::PopState()
 {
-    if (EnsureIsValid()==false)
+    if (!EnsureIsValid())
         return;
-        
+
     CGContextRestoreGState( m_cgContext );
 }
 
@@ -2167,9 +2154,9 @@ void wxMacCoreGraphicsContext::DoDrawText( const wxString &str, wxDouble x, wxDo
 {
     wxCHECK_RET( !m_font.IsNull(), wxT("wxMacCoreGraphicsContext::DrawText - no valid font set") );
 
-    if (EnsureIsValid()==false)
+    if (!EnsureIsValid())
         return;
-        
+
     if (m_composition == wxCOMPOSITION_DEST)
         return;
 
@@ -2230,9 +2217,9 @@ void wxMacCoreGraphicsContext::DoDrawRotatedText(const wxString &str,
 {
     wxCHECK_RET( !m_font.IsNull(), wxT("wxMacCoreGraphicsContext::DrawText - no valid font set") );
 
-    if (EnsureIsValid()==false)
+    if (!EnsureIsValid())
         return;
-        
+
     if (m_composition == wxCOMPOSITION_DEST)
         return;
 
@@ -2634,6 +2621,9 @@ public :
     // create a native bitmap representation
     virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) ;
 
+    // create a graphics bitmap from a native bitmap
+    virtual wxGraphicsBitmap CreateBitmapFromNativeBitmap( void* bitmap );
+
     // create a native bitmap representation
     virtual wxGraphicsBitmap CreateSubBitmap( const wxGraphicsBitmap &bitmap, wxDouble x, wxDouble y, wxDouble w, wxDouble h  ) ;
 private :
@@ -2783,9 +2773,19 @@ wxGraphicsBitmap wxMacCoreGraphicsRenderer::CreateBitmap( const wxBitmap& bmp )
     if ( bmp.Ok() )
     {
         wxGraphicsBitmap p;
-#ifdef __WXMAC__
         p.SetRefData(new wxMacCoreGraphicsBitmapData( this , bmp.CreateCGImage(), bmp.GetDepth() == 1 ) );
-#endif
+        return p;
+    }
+    else
+        return wxNullGraphicsBitmap;
+}
+
+wxGraphicsBitmap wxMacCoreGraphicsRenderer::CreateBitmapFromNativeBitmap( void* bitmap )
+{
+    if ( bitmap != NULL )
+    {
+        wxGraphicsBitmap p;
+        p.SetRefData(new wxMacCoreGraphicsBitmapData( this , (CGImageRef) bitmap, false ));
         return p;
     }
     else