#include "wx/wxprec.h"
-#include "wx/dc.h"
-
#ifdef __BORLANDC__
-#pragma hdrstop
+ #pragma hdrstop
#endif
+#include "wx/dc.h"
+
#if wxUSE_GRAPHICS_CONTEXT
#ifndef WX_PRECOMP
// gets the bounding box enclosing all points (possibly including control points)
virtual void GetBox(wxDouble *x, wxDouble *y, wxDouble *w, wxDouble *h) const;
- virtual bool Contains( wxDouble x, wxDouble y, int fillStyle = wxODDEVEN_RULE) const;
+ virtual bool Contains( wxDouble x, wxDouble y, wxPolygonFillMode fillStyle = wxODDEVEN_RULE) const;
private :
GraphicsPath* m_path;
virtual void * GetNativeContext();
virtual void StrokePath( const wxGraphicsPath& p );
- virtual void FillPath( const wxGraphicsPath& p , int fillStyle = wxODDEVEN_RULE );
+ virtual void FillPath( const wxGraphicsPath& p , wxPolygonFillMode fillStyle = wxODDEVEN_RULE );
// stroke lines connecting each of the points
virtual void StrokeLines( size_t n, const wxPoint2DDouble *points);
// draws a polygon
- virtual void DrawLines( size_t n, const wxPoint2DDouble *points, int fillStyle = wxODDEVEN_RULE );
+ virtual void DrawLines( size_t n, const wxPoint2DDouble *points, wxPolygonFillMode fillStyle = wxODDEVEN_RULE );
+
+ virtual bool SetAntialiasMode(wxAntialiasMode antialias);
+ virtual bool SetCompositionMode(wxCompositionMode op);
+
+ virtual void BeginLayer(wxDouble opacity);
+
+ virtual void EndLayer();
+
virtual void Translate( wxDouble dx , wxDouble dy );
virtual void Scale( wxDouble xScale , wxDouble yScale );
virtual void Rotate( wxDouble angle );
DECLARE_DYNAMIC_CLASS_NO_COPY(wxGDIPlusContext)
};
-class WXDLLIMPEXP_CORE wxGDIPlusMeasuringContext : public wxGDIPlusContext
+class wxGDIPlusMeasuringContext : public wxGDIPlusContext
{
public:
wxGDIPlusMeasuringContext( wxGraphicsRenderer* renderer ) : wxGDIPlusContext( renderer , m_hdc = GetDC(NULL), 1000, 1000 )
*h = bounds.Height;
}
-bool wxGDIPlusPathData::Contains( wxDouble x, wxDouble y, int fillStyle ) const
+bool wxGDIPlusPathData::Contains( wxDouble x, wxDouble y, wxPolygonFillMode fillStyle ) const
{
m_path->SetFillMode( fillStyle == wxODDEVEN_RULE ? FillModeAlternate : FillModeWinding);
return m_path->IsVisible( (FLOAT) x,(FLOAT) y) == TRUE ;
void wxGDIPlusContext::StrokeLines( size_t n, const wxPoint2DDouble *points)
{
+ if (m_composition == wxCOMPOSITION_DEST)
+ return;
+
if ( !m_pen.IsNull() )
{
wxGDIPlusOffsetHelper helper( m_context , ShouldOffset() );
}
}
-void wxGDIPlusContext::DrawLines( size_t n, const wxPoint2DDouble *points, int WXUNUSED(fillStyle) )
+void wxGDIPlusContext::DrawLines( size_t n, const wxPoint2DDouble *points, wxPolygonFillMode WXUNUSED(fillStyle) )
{
+ if (m_composition == wxCOMPOSITION_DEST)
+ return;
+
wxGDIPlusOffsetHelper helper( m_context , ShouldOffset() );
Point *cpoints = new Point[n];
for (size_t i = 0; i < n; i++)
void wxGDIPlusContext::StrokePath( const wxGraphicsPath& path )
{
+ if (m_composition == wxCOMPOSITION_DEST)
+ return;
+
if ( !m_pen.IsNull() )
{
wxGDIPlusOffsetHelper helper( m_context , ShouldOffset() );
}
}
-void wxGDIPlusContext::FillPath( const wxGraphicsPath& path , int fillStyle )
+void wxGDIPlusContext::FillPath( const wxGraphicsPath& path , wxPolygonFillMode fillStyle )
{
+ if (m_composition == wxCOMPOSITION_DEST)
+ return;
+
if ( !m_brush.IsNull() )
{
wxGDIPlusOffsetHelper helper( m_context , ShouldOffset() );
}
}
+bool wxGDIPlusContext::SetAntialiasMode(wxAntialiasMode antialias)
+{
+ if (m_antialias == antialias)
+ return true;
+
+ m_antialias = antialias;
+
+ SmoothingMode antialiasMode;
+ switch (antialias)
+ {
+ case wxANTIALIAS_DEFAULT:
+ antialiasMode = SmoothingModeHighQuality;
+ break;
+ case wxANTIALIAS_NONE:
+ antialiasMode = SmoothingModeNone;
+ break;
+ default:
+ return false;
+ }
+ m_context->SetSmoothingMode(antialiasMode);
+ return true;
+}
+
+bool wxGDIPlusContext::SetCompositionMode(wxCompositionMode op)
+{
+ if ( m_composition == op )
+ return true;
+
+ m_composition = op;
+
+ if (m_composition == wxCOMPOSITION_DEST)
+ return true;
+
+ CompositingMode cop;
+ switch (op)
+ {
+ case wxCOMPOSITION_SOURCE:
+ cop = CompositingModeSourceCopy;
+ break;
+ case wxCOMPOSITION_OVER:
+ cop = CompositingModeSourceOver;
+ break;
+ default:
+ return false;
+ }
+
+ m_context->SetCompositingMode(cop);
+ return true;
+}
+
+void wxGDIPlusContext::BeginLayer(wxDouble /* opacity */)
+{
+ // TODO
+}
+
+void wxGDIPlusContext::EndLayer()
+{
+ // TODO
+}
+
void wxGDIPlusContext::Rotate( wxDouble angle )
{
m_context->RotateTransform( RadToDeg(angle) );
void wxGDIPlusContext::DrawBitmap( const wxGraphicsBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h )
{
+ if (m_composition == wxCOMPOSITION_DEST)
+ return;
+
Bitmap* image = static_cast<wxGDIPlusBitmapData*>(bmp.GetRefData())->GetGDIPlusBitmap();
if ( image )
{
void wxGDIPlusContext::DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxDouble w, wxDouble h )
{
+ if (m_composition == wxCOMPOSITION_DEST)
+ return;
+
// the built-in conversion fails when there is alpha in the HICON (eg XP style icons), we can only
// find out by looking at the bitmap data whether there really was alpha in it
HICON hIcon = (HICON)icon.GetHICON();
wxDouble x, wxDouble y,
const wxGraphicsBrush& brush)
{
+ if (m_composition == wxCOMPOSITION_DEST)
+ return;
+
wxCHECK_RET( !m_font.IsNull(),
wxT("wxGDIPlusContext::DrawText - no valid font set") );
if ( str.IsEmpty())
return ;
- const wxGDIPlusFontData * const
+ wxGDIPlusFontData * const
fontData = (wxGDIPlusFontData *)m_font.GetRefData();
- const wxGDIPlusBrushData * const
- brushData = (wxGDIPlusBrushData *)m_brush.GetRefData();
+ wxGDIPlusBrushData * const
+ brushData = (wxGDIPlusBrushData *)brush.GetRefData();
m_context->DrawString
(