#if wxUSE_GRAPHICS_CONTEXT
-#include "wx/graphics.h"
#include "wx/dcgraph.h"
#ifndef WX_PRECOMP
#include "wx/icon.h"
- #include "wx/bitmap.h"
+ #include "wx/dcclient.h"
#include "wx/dcmemory.h"
- #include "wx/region.h"
#endif
-#include "wx/dcclient.h"
-
-#ifdef __WXOSX_OR_COCOA__
-#ifdef __WXOSX_IPHONE__
- #include <CoreGraphics/CoreGraphics.h>
-#else
- #include <ApplicationServices/ApplicationServices.h>
-#endif
-#endif
-
-#include <limits.h> // for INT_MAX
-
//-----------------------------------------------------------------------------
// constants
//-----------------------------------------------------------------------------
wxGCDCImpl::wxGCDCImpl( wxDC *owner ) :
wxDCImpl( owner )
{
- Init();
+ Init(wxGraphicsContext::Create());
}
void wxGCDCImpl::SetGraphicsContext( wxGraphicsContext* ctx )
wxGCDCImpl::wxGCDCImpl( wxDC *owner, const wxWindowDC& dc ) :
wxDCImpl( owner )
{
- Init();
- SetGraphicsContext( wxGraphicsContext::Create(dc) );
+ Init(wxGraphicsContext::Create(dc));
m_window = dc.GetWindow();
}
wxGCDCImpl::wxGCDCImpl( wxDC *owner, const wxMemoryDC& dc ) :
wxDCImpl( owner )
{
- Init();
- wxGraphicsContext* context;
- context = wxGraphicsContext::Create(dc);
- SetGraphicsContext( context );
+ Init(wxGraphicsContext::Create(dc));
}
#if wxUSE_PRINTING_ARCHITECTURE
wxGCDCImpl::wxGCDCImpl( wxDC *owner, const wxPrinterDC& dc ) :
wxDCImpl( owner )
{
- Init();
- SetGraphicsContext( wxGraphicsContext::Create(dc) );
+ Init(wxGraphicsContext::Create(dc));
}
#endif
wxGCDCImpl::wxGCDCImpl(wxDC *owner, const wxEnhMetaFileDC& dc)
: wxDCImpl(owner)
{
- Init();
- SetGraphicsContext(wxGraphicsContext::Create(dc));
+ Init(wxGraphicsContext::Create(dc));
}
#endif
-void wxGCDCImpl::Init()
+wxGCDCImpl::wxGCDCImpl(wxDC* owner, int)
+ : wxDCImpl(owner)
+{
+ // derived class will set a context
+ Init(NULL);
+}
+
+void wxGCDCImpl::Init(wxGraphicsContext* ctx)
{
m_ok = false;
m_colour = true;
m_font = *wxNORMAL_FONT;
m_brush = *wxWHITE_BRUSH;
- m_graphicContext = wxGraphicsContext::Create();
+ m_graphicContext = NULL;
+ if (ctx)
+ SetGraphicsContext(ctx);
+
m_logicalFunctionSupported = true;
}
-
wxGCDCImpl::~wxGCDCImpl()
{
delete m_graphicContext;
wxCHECK_RET( IsOk(), wxT("wxGCDC(cg)::DoDrawBitmap - invalid DC") );
wxCHECK_RET( bmp.IsOk(), wxT("wxGCDC(cg)::DoDrawBitmap - invalid bitmap") );
- int w = bmp.GetWidth();
- int h = bmp.GetHeight();
+ int w = bmp.GetScaledWidth();
+ int h = bmp.GetScaledHeight();
if ( bmp.GetDepth() == 1 )
{
m_graphicContext->SetPen(*wxTRANSPARENT_PEN);
wxCHECK_RET( IsOk(), wxT("wxGCDC(cg)::DoSetClippingRegion - invalid DC") );
m_graphicContext->Clip( x, y, w, h );
- if ( m_clipping )
- {
- m_clipX1 = wxMax( m_clipX1, x );
- m_clipY1 = wxMax( m_clipY1, y );
- m_clipX2 = wxMin( m_clipX2, (x + w) );
- m_clipY2 = wxMin( m_clipY2, (y + h) );
- }
- else
- {
- m_clipping = true;
- m_clipX1 = x;
- m_clipY1 = y;
- m_clipX2 = x + w;
- m_clipY2 = y + h;
- }
+ wxDCImpl::DoSetClippingRegion(x, y, w, h);
}
void wxGCDCImpl::DoSetDeviceClippingRegion( const wxRegion ®ion )
// the logical origin sets the origin to have new coordinates
m_matrixCurrent.Translate( m_deviceOriginX - m_logicalOriginX * m_signX * m_scaleX,
- m_deviceOriginY-m_logicalOriginY * m_signY * m_scaleY);
+ m_deviceOriginY - m_logicalOriginY * m_signY * m_scaleY);
m_matrixCurrent.Scale( m_scaleX * m_signX, m_scaleY * m_signY );
}
}
+void* wxGCDCImpl::GetHandle() const
+{
+ void* cgctx = NULL;
+ wxGraphicsContext* gc = GetGraphicsContext();
+ if (gc) {
+ cgctx = gc->GetNativeContext();
+ }
+ return cgctx;
+}
+
void wxGCDCImpl::SetPalette( const wxPalette& WXUNUSED(palette) )
{
m_font = font;
if ( m_graphicContext )
{
- wxFont f = font;
- if ( f.IsOk() )
- f.SetPointSize( /*LogicalToDeviceYRel*/(font.GetPointSize()));
- m_graphicContext->SetFont( f, m_textForegroundColour );
+ m_graphicContext->SetFont(font, m_textForegroundColour);
}
}
DoDrawLine( x , y , x + 1 , y + 1 );
}
-void wxGCDCImpl::DoDrawLines(int n, wxPoint points[],
+void wxGCDCImpl::DoDrawLines(int n, const wxPoint points[],
wxCoord xoffset, wxCoord yoffset)
{
wxCHECK_RET( IsOk(), wxT("wxGCDC(cg)::DoDrawLines - invalid DC") );
// empty list
return;
- wxPoint *p = node->GetData();
+ const wxPoint *p = node->GetData();
wxCoord x1 = p->x;
wxCoord y1 = p->y;
}
#endif // wxUSE_SPLINES
-void wxGCDCImpl::DoDrawPolygon( int n, wxPoint points[],
+void wxGCDCImpl::DoDrawPolygon( int n, const wxPoint points[],
wxCoord xoffset, wxCoord yoffset,
wxPolygonFillMode fillStyle )
{
}
void wxGCDCImpl::DoDrawPolyPolygon(int n,
- int count[],
- wxPoint points[],
+ const int count[],
+ const wxPoint points[],
wxCoord xoffset,
wxCoord yoffset,
wxPolygonFillMode fillStyle)
m_graphicContext->SetPen( p );
wxCompositionMode formerMode = m_graphicContext->GetCompositionMode();
m_graphicContext->SetCompositionMode(wxCOMPOSITION_SOURCE);
- DoDrawRectangle( 0, 0, INT_MAX , INT_MAX );
+ // maximum positive coordinate Cairo can handle is 2^23 - 1
+ DoDrawRectangle(
+ DeviceToLogicalX(0), DeviceToLogicalY(0),
+ DeviceToLogicalXRel(0x007fffff), DeviceToLogicalYRel(0x007fffff));
m_graphicContext->SetCompositionMode(formerMode);
m_graphicContext->SetPen( m_pen );
m_graphicContext->SetBrush( m_brush );