X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e7042ce73b824b32d50778c79688a455c6fe89b6..a4ea083bbdf710d3234dcbd2eafb5d0e078f8348:/src/common/dcgraph.cpp diff --git a/src/common/dcgraph.cpp b/src/common/dcgraph.cpp index fb05146587..a44ac2cb91 100644 --- a/src/common/dcgraph.cpp +++ b/src/common/dcgraph.cpp @@ -4,7 +4,6 @@ // Author: Stefan Csomor // Modified by: // Created: -// RCS-ID: $Id$ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -18,28 +17,14 @@ #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 -#else - #include -#endif -#endif - -#include // for INT_MAX - //----------------------------------------------------------------------------- // constants //----------------------------------------------------------------------------- @@ -205,6 +190,13 @@ wxGCDCImpl::wxGCDCImpl(wxDC *owner, const wxEnhMetaFileDC& dc) } #endif +wxGCDCImpl::wxGCDCImpl(wxDC* owner, int) + : wxDCImpl(owner) +{ + // derived class will set a context + Init(NULL); +} + void wxGCDCImpl::Init(wxGraphicsContext* ctx) { m_ok = false; @@ -234,8 +226,8 @@ void wxGCDCImpl::DoDrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, 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); @@ -296,22 +288,8 @@ void wxGCDCImpl::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord w, wxCoord h 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 ) @@ -417,7 +395,7 @@ void wxGCDCImpl::ComputeScaleAndOrigin() // 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 ); @@ -426,6 +404,16 @@ void wxGCDCImpl::ComputeScaleAndOrigin() } } +void* wxGCDCImpl::GetHandle() const +{ + void* cgctx = NULL; + wxGraphicsContext* gc = GetGraphicsContext(); + if (gc) { + cgctx = gc->GetNativeContext(); + } + return cgctx; +} + void wxGCDCImpl::SetPalette( const wxPalette& WXUNUSED(palette) ) { @@ -441,10 +429,7 @@ void wxGCDCImpl::SetFont( const wxFont &font ) 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); } } @@ -622,7 +607,7 @@ void wxGCDCImpl::DoDrawPoint( wxCoord x, wxCoord y ) 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") ); @@ -656,7 +641,7 @@ void wxGCDCImpl::DoDrawSpline(const wxPointList *points) // empty list return; - wxPoint *p = node->GetData(); + const wxPoint *p = node->GetData(); wxCoord x1 = p->x; wxCoord y1 = p->y; @@ -700,7 +685,7 @@ void wxGCDCImpl::DoDrawSpline(const wxPointList *points) } #endif // wxUSE_SPLINES -void wxGCDCImpl::DoDrawPolygon( int n, wxPoint points[], +void wxGCDCImpl::DoDrawPolygon( int n, const wxPoint points[], wxCoord xoffset, wxCoord yoffset, wxPolygonFillMode fillStyle ) { @@ -729,8 +714,8 @@ void wxGCDCImpl::DoDrawPolygon( int n, wxPoint points[], } void wxGCDCImpl::DoDrawPolyPolygon(int n, - int count[], - wxPoint points[], + const int count[], + const wxPoint points[], wxCoord xoffset, wxCoord yoffset, wxPolygonFillMode fillStyle) @@ -1046,7 +1031,10 @@ void wxGCDCImpl::Clear(void) 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 );