From 28f3fe51bddd89bf473581eaca1a15c8f3b0e2c5 Mon Sep 17 00:00:00 2001 From: David Elliott Date: Mon, 21 Jul 2003 20:55:50 +0000 Subject: [PATCH] wxCocoa: Preliminary wxMemoryDC implementation git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22212 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/cocoa/dcmemory.h | 9 +++-- src/cocoa/dcmemory.cpp | 51 ------------------------ src/cocoa/dcmemory.mm | 79 +++++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 54 deletions(-) delete mode 100644 src/cocoa/dcmemory.cpp create mode 100644 src/cocoa/dcmemory.mm diff --git a/include/wx/cocoa/dcmemory.h b/include/wx/cocoa/dcmemory.h index bb83332dfb..d6ca56d864 100644 --- a/include/wx/cocoa/dcmemory.h +++ b/include/wx/cocoa/dcmemory.h @@ -4,15 +4,15 @@ // Author: David Elliott // Modified by: // Created: 2003/03/16 -// RCS-ID: $Id: +// RCS-ID: $Id$ // Copyright: (c) 2003 David Elliott -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef __WX_COCOA_DCMEMORY_H__ #define __WX_COCOA_DCMEMORY_H__ -#include "wx/dcclient.h" +#include "wx/dc.h" class WXDLLEXPORT wxMemoryDC: public wxDC { @@ -23,6 +23,9 @@ public: ~wxMemoryDC(void); virtual void SelectObject(const wxBitmap& bitmap); virtual void DoGetSize(int *width, int *height) const; +protected: + wxBitmap m_selectedBitmap; + WX_NSImage m_cocoaNSImage; // DC stack virtual bool CocoaLockFocus(); virtual bool CocoaUnlockFocus(); diff --git a/src/cocoa/dcmemory.cpp b/src/cocoa/dcmemory.cpp deleted file mode 100644 index 377615be15..0000000000 --- a/src/cocoa/dcmemory.cpp +++ /dev/null @@ -1,51 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: src/cocoa/dcmemory.cpp -// Purpose: wxMemoryDC class -// Author: David Elliott -// Modified by: -// Created: 2003/03/16 -// RCS-ID: $Id: -// Copyright: (c) 2002 David Elliott -// Licence: wxWindows license -///////////////////////////////////////////////////////////////////////////// - -#include "wx/dcmemory.h" - -//----------------------------------------------------------------------------- -// wxMemoryDC -//----------------------------------------------------------------------------- - -IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC,wxDC) - -wxMemoryDC::wxMemoryDC(void) -{ - m_ok = false; -}; - -wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) ) -{ - m_ok = false; -}; - -wxMemoryDC::~wxMemoryDC(void) -{ -} - -bool wxMemoryDC::CocoaLockFocus() -{ - return false; -} - -bool wxMemoryDC::CocoaUnlockFocus() -{ - return false; -} - -void wxMemoryDC::SelectObject( const wxBitmap& bitmap ) -{ -} - -void wxMemoryDC::DoGetSize( int *width, int *height ) const -{ -} - diff --git a/src/cocoa/dcmemory.mm b/src/cocoa/dcmemory.mm new file mode 100644 index 0000000000..e097fea9a5 --- /dev/null +++ b/src/cocoa/dcmemory.mm @@ -0,0 +1,79 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: src/cocoa/dcmemory.mm +// Purpose: wxMemoryDC class +// Author: David Elliott +// Modified by: +// Created: 2003/03/16 +// RCS-ID: $Id$ +// Copyright: (c) 2002 David Elliott +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#include "wx/dcmemory.h" + +#import + +//----------------------------------------------------------------------------- +// wxMemoryDC +//----------------------------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC,wxDC) + +wxMemoryDC::wxMemoryDC(void) +{ + m_cocoaNSImage = NULL; + m_ok = false; +} + +wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) ) +{ + m_cocoaNSImage = NULL; + m_ok = false; +} + +wxMemoryDC::~wxMemoryDC(void) +{ + CocoaUnwindStackAndLoseFocus(); + [m_cocoaNSImage release]; +} + +bool wxMemoryDC::CocoaLockFocus() +{ + if(m_cocoaNSImage) + { + [m_cocoaNSImage lockFocusOnRepresentation: m_selectedBitmap.GetNSBitmapImageRep()]; + sm_cocoaDCStack.Insert(this); + return true; + } + return false; +} + +bool wxMemoryDC::CocoaUnlockFocus() +{ + [m_cocoaNSImage unlockFocus]; + return true; +} + +void wxMemoryDC::SelectObject( const wxBitmap& bitmap ) +{ + CocoaUnwindStackAndLoseFocus(); + [m_cocoaNSImage release]; + m_cocoaNSImage = nil; + m_selectedBitmap = bitmap; + if(m_selectedBitmap.Ok()) + { + m_cocoaNSImage = [[NSImage alloc] + initWithSize:NSMakeSize(m_selectedBitmap.GetWidth(), + m_selectedBitmap.GetHeight())]; + [m_cocoaNSImage addRepresentation: m_selectedBitmap.GetNSBitmapImageRep()]; + } +} + +void wxMemoryDC::DoGetSize( int *width, int *height ) const +{ + if(width) + *width = m_selectedBitmap.GetWidth(); + if(height) + *height = m_selectedBitmap.GetHeight(); +} +