#include "wx/math.h"
#include "wx/image.h"
#include "wx/region.h"
+#include "wx/affinematrix2d.h"
#define wxUSE_NEW_DC 1
if ( y ) *y = m_deviceOriginY;
}
+#if wxUSE_DC_TRANSFORM_MATRIX
+ // Transform matrix support is not available in most ports right now
+ // (currently only wxMSW provides it) so do nothing in these methods by
+ // default.
+ virtual bool CanUseTransformMatrix() const
+ { return false; }
+ virtual bool SetTransformMatrix(const wxAffineMatrix2D& WXUNUSED(matrix))
+ { return false; }
+ virtual wxAffineMatrix2D GetTransformMatrix() const
+ { return wxAffineMatrix2D(); }
+ virtual void ResetTransformMatrix()
+ { }
+#endif // wxUSE_DC_TRANSFORM_MATRIX
+
virtual void SetDeviceLocalOrigin( wxCoord x, wxCoord y );
virtual void ComputeScaleAndOrigin();
// this needs to overidden if the axis is inverted
virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp);
+#ifdef __WXMSW__
+ // Native Windows functions using the underlying HDC don't honour GDI+
+ // transformations which may be applied to it. Using this function we can
+ // transform the coordinates manually before passing them to such functions
+ // (as in e.g. wxRendererMSW code). It doesn't do anything if this is not a
+ // wxGCDC.
+ virtual wxRect MSWApplyGDIPlusTransform(const wxRect& r) const
+ {
+ return r;
+ }
+#endif // __WXMSW__
+
+
// ---------------------------------------------------------
// the actual drawing API
void SetAxisOrientation(bool xLeftRight, bool yBottomUp)
{ m_pimpl->SetAxisOrientation(xLeftRight, yBottomUp); }
+#if wxUSE_DC_TRANSFORM_MATRIX
+ bool CanUseTransformMatrix() const
+ { return m_pimpl->CanUseTransformMatrix(); }
+
+ bool SetTransformMatrix(const wxAffineMatrix2D &matrix)
+ { return m_pimpl->SetTransformMatrix(matrix); }
+
+ wxAffineMatrix2D GetTransformMatrix() const
+ { return m_pimpl->GetTransformMatrix(); }
+
+ void ResetTransformMatrix()
+ { m_pimpl->ResetTransformMatrix(); }
+#endif // wxUSE_DC_TRANSFORM_MATRIX
+
// mostly internal
void SetDeviceLocalOrigin( wxCoord x, wxCoord y )
{ m_pimpl->SetDeviceLocalOrigin( x, y ); }
~wxDCTextColourChanger()
{
- if ( m_colFgOld.Ok() )
+ if ( m_colFgOld.IsOk() )
m_dc.SetTextForeground(m_colFgOld);
}
void Set(const wxColour& col)
{
- if ( !m_colFgOld.Ok() )
+ if ( !m_colFgOld.IsOk() )
m_colFgOld = m_dc.GetTextForeground();
m_dc.SetTextForeground(col);
}
~wxDCPenChanger()
{
- if ( m_penOld.Ok() )
+ if ( m_penOld.IsOk() )
m_dc.SetPen(m_penOld);
}
~wxDCBrushChanger()
{
- if ( m_brushOld.Ok() )
+ if ( m_brushOld.IsOk() )
m_dc.SetBrush(m_brushOld);
}
void Set(const wxFont& font)
{
- if ( !m_fontOld.Ok() )
+ if ( !m_fontOld.IsOk() )
m_fontOld = m_dc.GetFont();
m_dc.SetFont(font);
}
~wxDCFontChanger()
{
- if ( m_fontOld.Ok() )
+ if ( m_fontOld.IsOk() )
m_dc.SetFont(m_fontOld);
}