// Created: 2003/04/01
// RCS-ID: $Id$
// Copyright: (c) 2003 David Elliott
-// Licence: wxWidgets licence
+// Licence: wxWidgets licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/wxprec.h"
+
+#include "wx/dc.h"
+
#ifndef WX_PRECOMP
#include "wx/log.h"
- #include "wx/dc.h"
+ #include "wx/math.h" //math constants
#endif //WX_PRECOMP
#include "wx/cocoa/autorelease.h"
wxDC::wxDC(void)
{
- m_cocoaWxToBoundsTransform;
+ m_cocoaWxToBoundsTransform = nil;
m_pen = *wxBLACK_PEN;
}
wxDC::~wxDC(void)
{
+ [m_cocoaWxToBoundsTransform release];
}
bool wxDC::CocoaLockFocus()
// TODO: Apply device/logical/user position/scaling transformations
}
+void wxDC::CocoaUnapplyTransformations()
+{
+ // NOTE: You *must* call this with focus held.
+ // Undo all transforms so we're back in true Cocoa coords with
+ // no scaling or flipping.
+ NSAffineTransform *invertTransform;
+ invertTransform = [m_cocoaWxToBoundsTransform copy];
+ [invertTransform invert];
+ [invertTransform concat];
+ [invertTransform release];
+}
+
+bool wxDC::CocoaGetBounds(void *rectData)
+{
+ // We don't know what we are so we can't return anything.
+ return false;
+}
+
void wxDC::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
{
wxAutoNSAutoreleasePool pool;
[bezpath stroke];
}
-void wxDC::DoGetTextExtent(const wxString& text, wxCoord *x, wxCoord *y, wxCoord *descent, wxCoord *externalLeading, wxFont *theFont) const
+void wxDC::DoGetTextExtent(const wxString& text, wxCoord *x, wxCoord *y, wxCoord *descent, wxCoord *externalLeading, const wxFont *theFont) const
{
wxAutoNSAutoreleasePool pool;
// FIXME: Cache this so it can be used for DoDrawText
// cut here, the rest is stubs
///////////////////////////////////////////////////////////////////////////
-//-----------------------------------------------------------------------------
-// constants
-//-----------------------------------------------------------------------------
-
-#define mm2inches 0.0393700787402
-#define inches2mm 25.4
-#define mm2twips 56.6929133859
-#define twips2mm 0.0176388888889
-#define mm2pt 2.83464566929
-#define pt2mm 0.352777777778
-
//-----------------------------------------------------------------------------
// wxDC
//-----------------------------------------------------------------------------
{
};
-void wxDC::DoDrawPoint( int x, int y )
-{
+void wxDC::DoDrawPoint( int x, int y )
+{
};
void wxDC::DoDrawPolygon( int, wxPoint *, int, int, int)
void wxDC::DoDrawArc(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2, wxCoord xc, wxCoord yc)
{
}
-
+
void wxDC::SetPen(const wxPen& pen)
{
m_pen = pen;
fromRect: NSMakeRect(0.0,0.0,bmp.GetWidth(),bmp.GetHeight())
operation: NSCompositeSourceOver
fraction: 1.0];
-
+
[nsimage release];
[context restoreGraphicsState];
}
void wxDC::Clear()
{
+ if(!CocoaTakeFocus()) return;
+
+ NSRect boundsRect;
+ if(!CocoaGetBounds(&boundsRect)) return;
+
+ NSGraphicsContext *context = [NSGraphicsContext currentContext];
+ [context saveGraphicsState];
+
+ // Undo all transforms so when we draw our bounds rect we
+ // really overwrite our bounds rect.
+ CocoaUnapplyTransformations();
+
+ [m_backgroundBrush.GetNSColor() set];
+ [NSBezierPath fillRect:boundsRect];
+
+ [context restoreGraphicsState];
}
void wxDC::SetBackground(const wxBrush& brush)
void wxDC::SetMapMode( int mode )
{
- switch (mode)
+ switch (mode)
{
case wxMM_TWIPS:
break;
m_scaleX = m_logicalScaleX * m_userScaleX;
m_scaleY = m_logicalScaleY * m_userScaleY;
- // CMB: if scale has changed call SetPen to recalulate the line width
+ // CMB: if scale has changed call SetPen to recalulate the line width
if (m_scaleX != origScaleX || m_scaleY != origScaleY)
{
// this is a bit artificial, but we need to force wxDC to think
SetPen(* pen);
}
};
-