// Created: 2003/03/16
// RCS-ID: $Id$
// Copyright: (c) 2002 David Elliott
-// Licence: wxWindows licence
+// Licence: wxWidgets licence
/////////////////////////////////////////////////////////////////////////////
#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)
+wxMemoryDC::wxMemoryDC( const wxBitmap& bitmap )
{
m_cocoaNSImage = NULL;
m_ok = false;
+
+ if ( bitmap.IsOk() )
+ SelectObject(bitmap);
}
wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) )
{
[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;
}
// instead copy the data to an offscreen window, then copy it back
void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
{
+ wxAutoNSAutoreleasePool pool;
if(m_selectedBitmap.Ok())
{
CocoaTakeFocus();
operation: NSCompositeCopy
fraction: 1.0];
[m_cocoaNSImage unlockFocus];
-
+
[nsimage release];
}
}
[transform concat];
[flipTransform concat];
- wxLogDebug(wxT("[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;
+}
+