X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/655719367ac5e131d9642e5783f3ecf64d1a3385..aacd14428971b5e199f88597f76a895c68dd298f:/src/mac/carbon/dcmemory.cpp diff --git a/src/mac/carbon/dcmemory.cpp b/src/mac/carbon/dcmemory.cpp index e850a59e4d..a1f563080a 100644 --- a/src/mac/carbon/dcmemory.cpp +++ b/src/mac/carbon/dcmemory.cpp @@ -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 {