]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/dcmemory.cpp
must be static of course, otherwise items just get appended for every menu-build
[wxWidgets.git] / src / mac / carbon / dcmemory.cpp
index e850a59e4d431a92a96d7ef2ff3a6fad623c913c..a1f563080a0b2020c3545744bd954a725691fbd2 100644 (file)
@@ -9,10 +9,12 @@
 // Licence:       wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 #pragma implementation "dcmemory.h"
 #endif
 
+#include "wx/wxprec.h"
+
 #include "wx/dcmemory.h"
 #include "wx/mac/private.h"
 
@@ -29,6 +31,7 @@ wxMemoryDC::wxMemoryDC(void)
     SetBackground(*wxWHITE_BRUSH);
     SetBrush(*wxWHITE_BRUSH);
     SetPen(*wxBLACK_PEN);
+    SetFont(*wxNORMAL_FONT) ;
     m_ok = FALSE;
 };
 
@@ -39,6 +42,7 @@ wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) )
     SetBackground(*wxWHITE_BRUSH);
     SetBrush(*wxWHITE_BRUSH);
     SetPen(*wxBLACK_PEN);
+    SetFont(*wxNORMAL_FONT) ;
     m_ok = FALSE;
 };
 
@@ -46,7 +50,15 @@ wxMemoryDC::~wxMemoryDC()
 {
     if ( m_selected.Ok() )
     {
-        UnlockPixels( GetGWorldPixMap(MAC_WXHBITMAP(m_selected.GetHBITMAP())) );
+#if wxMAC_USE_CORE_GRAPHICS
+        m_selected.EndRawAccess() ;
+        CGContextRef bmCtx = ((wxMacCGContext*)(m_graphicContext))->GetNativeContext() ;
+        delete m_graphicContext ;
+        m_graphicContext = NULL ;
+        CGContextRelease( bmCtx ) ;
+#else
+// TODO        UnlockPixels( GetGWorldPixMap(MAC_WXHBITMAP(m_selected.GetHBITMAP())) );
+#endif
     }
 };
 
@@ -54,20 +66,55 @@ void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
 {
     if ( m_selected.Ok() )
     {
-        UnlockPixels( GetGWorldPixMap(MAC_WXHBITMAP(m_selected.GetHBITMAP())) );
+#if wxMAC_USE_CORE_GRAPHICS
+        m_selected.EndRawAccess() ;
+        CGContextRef bmCtx = ((wxMacCGContext*)(m_graphicContext))->GetNativeContext() ;
+        delete m_graphicContext ;
+        m_graphicContext = NULL ;
+        CGContextRelease( bmCtx ) ;
+#else
+// TODO        UnlockPixels( GetGWorldPixMap(MAC_WXHBITMAP(m_selected.GetHBITMAP())) );
+#endif
     }
     m_selected = bitmap;
     if (m_selected.Ok())
     {
-        if ( m_selected.GetHBITMAP() )
+#if wxMAC_USE_CORE_GRAPHICS
+        m_selected.UseAlpha() ;
+        void * data = m_selected.BeginRawAccess() ;
+
+        int bitsPerComp = 8 ;
+        int bytesPerPixel = 4 ;
+        int w = bitmap.GetWidth() ;
+        int h = bitmap.GetHeight() ;
+        CGImageAlphaInfo a = kCGImageAlphaNoneSkipFirst ; 
+        CGColorSpaceRef genericColorSpace  = wxMacGetGenericRGBColorSpace();
+        CGContextRef bmCtx = CGBitmapContextCreate(data , w, h, bitsPerComp , bytesPerPixel * w , genericColorSpace, a);
+        wxASSERT_MSG( bmCtx , wxT("Unable to create bitmap context") ) ;
+
+        CGContextSetFillColorSpace(bmCtx, genericColorSpace); 
+        CGContextSetStrokeColorSpace(bmCtx, genericColorSpace); 
+
+        if( bmCtx )
+        {
+            CGContextTranslateCTM( bmCtx , 0 ,  m_selected.GetHeight() ) ;
+            CGContextScaleCTM( bmCtx , 1 , -1 ) ;
+            m_graphicContext = new wxMacCGContext( bmCtx ) ;  
+            m_graphicContext->SetPen( m_pen ) ;
+            m_graphicContext->SetBrush( m_brush ) ;     
+        }
+        m_ok = (m_graphicContext != NULL) ;  
+#else
+        if ( ( m_macPort = m_selected.GetHBITMAP( &m_macMask ) ) != NULL )
         {
-            m_macPort = (GrafPtr) m_selected.GetHBITMAP() ;
             LockPixels( GetGWorldPixMap(  (CGrafPtr)  m_macPort ) ) ;
+            /*
             wxMask * mask = bitmap.GetMask() ;
             if ( mask )
             {
-                m_macMask = mask->GetMaskBitmap() ;
+                m_macMask = mask->GetHBITMAP() ;
             }
+            */
             SetRectRgn( (RgnHandle) m_macBoundaryClipRgn , 0 , 0 , m_selected.GetWidth() , m_selected.GetHeight() ) ;
             CopyRgn( (RgnHandle) m_macBoundaryClipRgn ,(RgnHandle)  m_macCurrentClipRgn ) ;
             m_ok = TRUE ;
@@ -76,6 +123,7 @@ void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
         {
             m_ok = FALSE;
         }
+#endif
     }
     else
     {