// Created: 2003/03/16
// RCS-ID: $Id$
// Copyright: (c) 2002 David Elliott
-// Licence: wxWindows licence
+// Licence: wxWidgets licence
/////////////////////////////////////////////////////////////////////////////
-#include "wx/dcmemory.h"
-#include "wx/log.h"
+#include "wx/wxprec.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/log.h"
+ #include "wx/dcmemory.h"
+#endif //WX_PRECOMP
+
+#include "wx/cocoa/autorelease.h"
#import <AppKit/NSImage.h>
#import <AppKit/NSAffineTransform.h>
#import <AppKit/NSGraphicsContext.h>
+#import <AppKit/NSColor.h>
+#import <AppKit/NSBezierPath.h>
//-----------------------------------------------------------------------------
// wxMemoryDC
IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC,wxDC)
-wxMemoryDC::wxMemoryDC(void)
+void wxMemoryDC::Init()
{
m_cocoaNSImage = NULL;
m_ok = false;
wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) )
{
- m_cocoaNSImage = NULL;
- m_ok = false;
+ Init();
}
wxMemoryDC::~wxMemoryDC(void)
{
[m_cocoaNSImage lockFocus];
sm_cocoaDCStack.Insert(this);
- m_cocoaFlipped = [m_cocoaNSImage isFlipped];
- m_cocoaHeight = [m_cocoaNSImage size].height;
+ NSAffineTransform *newTransform = CocoaGetWxToBoundsTransform([m_cocoaNSImage isFlipped], [m_cocoaNSImage size].height);
+ [newTransform retain];
+ [m_cocoaWxToBoundsTransform release];
+ m_cocoaWxToBoundsTransform = newTransform;
CocoaApplyTransformations();
return true;
}
// NOTE: The AppKit is unable to draw onto an NSBitmapImageRep so we must
// instead copy the data to an offscreen window, then copy it back
-void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
+void wxMemoryDC::DoSelect( const wxBitmap& bitmap )
{
+ wxAutoNSAutoreleasePool pool;
if(m_selectedBitmap.Ok())
{
CocoaTakeFocus();
m_selectedBitmap.GetHeight())];
// Now copy the data
- NSImage *nsimage = [[NSImage alloc]
- initWithSize:NSMakeSize(m_selectedBitmap.GetWidth(),
- m_selectedBitmap.GetHeight())];
- [nsimage addRepresentation: const_cast<wxBitmap&>(m_selectedBitmap).GetNSBitmapImageRep()];
+ NSImage *nsimage = [m_selectedBitmap.GetNSImage(false) retain];
+ [m_cocoaNSImage lockFocus];
[nsimage drawAtPoint: NSMakePoint(0,0)
fromRect: NSMakeRect(0.0,0.0,m_selectedBitmap.GetWidth(),m_selectedBitmap.GetHeight())
operation: NSCompositeCopy
fraction: 1.0];
-
+ [m_cocoaNSImage unlockFocus];
+
[nsimage release];
}
}
[transform concat];
[flipTransform concat];
- wxLogDebug("[m_cocoaNSImage isFlipped]=%d", [m_cocoaNSImage isFlipped]);
+ wxLogTrace(wxTRACE_COCOA,wxT("[m_cocoaNSImage isFlipped]=%d"), [m_cocoaNSImage isFlipped]);
[m_cocoaNSImage drawAtPoint: NSMakePoint(0,0)
fromRect: NSMakeRect(xsrc,
m_selectedBitmap.GetHeight()-height-ysrc,
width, height)
operation: NSCompositeCopy // FIXME: raster ops
fraction: 1.0];
-
+
[context restoreGraphicsState];
return false;
}
+bool wxMemoryDC::CocoaGetBounds(void *rectData)
+{
+ if(!rectData)
+ return false;
+ if(!m_cocoaNSImage)
+ return false;
+ NSRect *pRect = (NSRect*)rectData;
+ pRect->origin.x = 0.0;
+ pRect->origin.y = 0.0;
+ pRect->size = [m_cocoaNSImage size];
+ return true;
+}
+