// 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
{
~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();
+++ /dev/null
-/////////////////////////////////////////////////////////////////////////////
-// 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
-{
-}
-
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// 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 <AppKit/NSImage.h>
+
+//-----------------------------------------------------------------------------
+// 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();
+}
+