X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2f1ae4143271ae63a17e052a1a471d16e9cd8c44..3e6858cdcb9278b36446466c346d984e7e306553:/src/mac/carbon/dcmemory.cpp diff --git a/src/mac/carbon/dcmemory.cpp b/src/mac/carbon/dcmemory.cpp index a56c7b5c49..f1086953b4 100644 --- a/src/mac/carbon/dcmemory.cpp +++ b/src/mac/carbon/dcmemory.cpp @@ -1,92 +1,115 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: dcmemory.cpp +// Name: src/mac/carbon/dcmemory.cpp // Purpose: wxMemoryDC class -// Author: AUTHOR +// Author: Stefan Csomor // Modified by: // Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) AUTHOR -// Licence: wxWindows licence +// Copyright: (c) Stefan Csomor +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "dcmemory.h" -#endif +#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) + + +wxMemoryDCImpl::wxMemoryDCImpl( wxMemoryDC *owner ) + : wxPaintDCImpl( owner ) +{ + Init(); +} -wxMemoryDC::wxMemoryDC(void) +wxMemoryDCImpl::wxMemoryDCImpl( wxMemoryDC *owner, wxBitmap& bitmap ) + : wxPaintDCImpl( owner ) { - m_ok = FALSE; -}; + Init(); + DoSelect(bitmap); +} -wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) ) +wxMemoryDCImpl::wxMemoryDCImpl( wxMemoryDC *owner, wxDC * WXUNUSED(dc) ) + : wxPaintDCImpl( owner ) { - m_ok = FALSE; -}; + Init(); +} -wxMemoryDC::~wxMemoryDC(void) +void wxMemoryDCImpl::Init() { - if ( m_selected.Ok() ) - { - wxBitmapRefData * bmap = (wxBitmapRefData*) (m_selected.GetRefData()) ; - UnlockPixels( GetGWorldPixMap( (CGrafPtr) bmap->m_hBitmap ) ) ; - } -}; + m_ok = true; + SetBackground(*wxWHITE_BRUSH); + SetBrush(*wxWHITE_BRUSH); + SetPen(*wxBLACK_PEN); + SetFont(*wxNORMAL_FONT); + m_ok = false; +} -void wxMemoryDC::SelectObject( const wxBitmap& bitmap ) +wxMemoryDCImpl::~wxMemoryDCImpl() { - if ( m_selected.Ok() ) - { - wxBitmapRefData * bmap = (wxBitmapRefData*) (m_selected.GetRefData()) ; - UnlockPixels( GetGWorldPixMap( (CGrafPtr) bmap->m_hBitmap ) ) ; - } - m_selected = bitmap; - if (m_selected.Ok()) - { - wxBitmapRefData * bmap = (wxBitmapRefData*) (m_selected.GetRefData()) ; - if ( bmap->m_hBitmap ) - { - m_macPort = (GrafPtr) bmap->m_hBitmap ; - LockPixels( GetGWorldPixMap( (CGrafPtr) m_macPort ) ) ; - wxMask * mask = bitmap.GetMask() ; - if ( mask ) - { - m_macMask = mask->GetMaskBitmap() ; - } - MacSetupPort() ; - m_ok = TRUE ; - // SetBackground(wxBrush(*wxWHITE, wxSOLID)); - } - else - { - m_ok = FALSE; - } - } - else - { - m_ok = FALSE; - }; -}; + if ( m_selected.Ok() ) + { + m_selected.EndRawAccess() ; + delete m_graphicContext ; + m_graphicContext = NULL ; + } +} -void wxMemoryDC::GetSize( int *width, int *height ) const +void wxMemoryDCImpl::DoSelect( const wxBitmap& bitmap ) { - if (m_selected.Ok()) - { - if (width) (*width) = m_selected.GetWidth(); - if (height) (*height) = m_selected.GetHeight(); - } - else - { - if (width) (*width) = 0; - if (height) (*height) = 0; - }; -}; + if ( m_selected.Ok() ) + { + m_selected.EndRawAccess() ; + delete m_graphicContext ; + m_graphicContext = NULL ; + } + + m_selected = bitmap; + if (m_selected.Ok()) + { + if ( m_selected.GetDepth() != 1 ) + m_selected.UseAlpha() ; + m_selected.BeginRawAccess() ; + m_width = bitmap.GetWidth(); + m_height = bitmap.GetHeight(); + CGColorSpaceRef genericColorSpace = wxMacGetGenericRGBColorSpace(); + CGContextRef bmCtx = (CGContextRef) m_selected.GetHBITMAP(); + if ( bmCtx ) + { + CGContextSetFillColorSpace( bmCtx, genericColorSpace ); + CGContextSetStrokeColorSpace( bmCtx, genericColorSpace ); + SetGraphicsContext( wxGraphicsContext::CreateFromNative( bmCtx ) ); + } + m_ok = (m_graphicContext != NULL) ; + } + else + { + m_ok = false; + } +} +void wxMemoryDCImpl::DoGetSize( int *width, int *height ) const +{ + if (m_selected.Ok()) + { + if (width) + (*width) = m_selected.GetWidth(); + if (height) + (*height) = m_selected.GetHeight(); + } + else + { + if (width) + (*width) = 0; + if (height) + (*height) = 0; + } +}