X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8907154c1a8a6882c6797d1f16393ddfb23e7f3a..9d5507f7a2701395e1d5c121bd877bb9066ee6ea:/src/mac/carbon/dcmemory.cpp?ds=sidebyside diff --git a/src/mac/carbon/dcmemory.cpp b/src/mac/carbon/dcmemory.cpp index fb8cd48fb7..f1086953b4 100644 --- a/src/mac/carbon/dcmemory.cpp +++ b/src/mac/carbon/dcmemory.cpp @@ -1,144 +1,115 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: dcmemory.cpp +// Name: src/mac/carbon/dcmemory.cpp // Purpose: wxMemoryDC class // Author: Stefan Csomor // Modified by: // Created: 01/02/97 // RCS-ID: $Id$ // Copyright: (c) Stefan Csomor -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #include "wx/wxprec.h" #include "wx/dcmemory.h" +#include "wx/graphics.h" + #include "wx/mac/private.h" //----------------------------------------------------------------------------- -// wxMemoryDC +// wxMemoryDCImpl //----------------------------------------------------------------------------- -IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC,wxPaintDC) +IMPLEMENT_ABSTRACT_CLASS(wxMemoryDCImpl,wxPaintDCImpl) + -wxMemoryDC::wxMemoryDC(void) -: m_selected() +wxMemoryDCImpl::wxMemoryDCImpl( wxMemoryDC *owner ) + : wxPaintDCImpl( owner ) { - m_ok = TRUE; - SetBackground(*wxWHITE_BRUSH); - SetBrush(*wxWHITE_BRUSH); - SetPen(*wxBLACK_PEN); - SetFont(*wxNORMAL_FONT) ; - m_ok = FALSE; -}; + Init(); +} + +wxMemoryDCImpl::wxMemoryDCImpl( wxMemoryDC *owner, wxBitmap& bitmap ) + : wxPaintDCImpl( owner ) +{ + Init(); + DoSelect(bitmap); +} + +wxMemoryDCImpl::wxMemoryDCImpl( wxMemoryDC *owner, wxDC * WXUNUSED(dc) ) + : wxPaintDCImpl( owner ) +{ + Init(); +} -wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) ) -: m_selected() +void wxMemoryDCImpl::Init() { - m_ok = TRUE; + m_ok = true; SetBackground(*wxWHITE_BRUSH); SetBrush(*wxWHITE_BRUSH); SetPen(*wxBLACK_PEN); - SetFont(*wxNORMAL_FONT) ; - m_ok = FALSE; -}; + SetFont(*wxNORMAL_FONT); + m_ok = false; +} -wxMemoryDC::~wxMemoryDC() +wxMemoryDCImpl::~wxMemoryDCImpl() { if ( m_selected.Ok() ) { -#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 } -}; +} -void wxMemoryDC::SelectObject( const wxBitmap& bitmap ) +void wxMemoryDCImpl::DoSelect( const wxBitmap& bitmap ) { if ( m_selected.Ok() ) { -#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 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 ; + if ( m_selected.GetDepth() != 1 ) + m_selected.UseAlpha() ; + m_selected.BeginRawAccess() ; + m_width = bitmap.GetWidth(); + m_height = bitmap.GetHeight(); 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); + CGContextRef bmCtx = (CGContextRef) m_selected.GetHBITMAP(); - if( bmCtx ) + 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 ) ; + CGContextSetFillColorSpace( bmCtx, genericColorSpace ); + CGContextSetStrokeColorSpace( bmCtx, genericColorSpace ); + SetGraphicsContext( wxGraphicsContext::CreateFromNative( bmCtx ) ); } - m_ok = (m_graphicContext != NULL) ; -#else - if ( ( m_macPort = m_selected.GetHBITMAP( &m_macMask ) ) != NULL ) - { - LockPixels( GetGWorldPixMap( (CGrafPtr) m_macPort ) ) ; - /* - wxMask * mask = bitmap.GetMask() ; - if ( mask ) - { - 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 ; - } - else - { - m_ok = FALSE; - } -#endif + m_ok = (m_graphicContext != NULL) ; } else { - m_ok = FALSE; + m_ok = false; } } -void wxMemoryDC::DoGetSize( int *width, int *height ) const +void wxMemoryDCImpl::DoGetSize( int *width, int *height ) const { if (m_selected.Ok()) { - if (width) (*width) = m_selected.GetWidth(); - if (height) (*height) = m_selected.GetHeight(); + if (width) + (*width) = m_selected.GetWidth(); + if (height) + (*height) = m_selected.GetHeight(); } else { - if (width) (*width) = 0; - if (height) (*height) = 0; + if (width) + (*width) = 0; + if (height) + (*height) = 0; } } - -