// 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 void Translate( wxDouble dx , wxDouble dy );
virtual void Scale( wxDouble xScale , wxDouble yScale );
virtual void PushState();
virtual void PopState();
- virtual void DrawText( const wxString &str, wxDouble x, wxDouble y);
virtual void GetTextExtent( const wxString &str, wxDouble *width, wxDouble *height,
wxDouble *descent, wxDouble *externalLeading ) const;
virtual void GetPartialTextExtents(const wxString& text, wxArrayDouble& widths) const;
void Init();
void SetDefaults();
+ virtual void DoDrawText(const wxString& str, wxDouble x, wxDouble y)
+ { DoDrawFilledText(str, x, y, wxNullGraphicsBrush); }
+ virtual void DoDrawFilledText(const wxString& str, wxDouble x, wxDouble y,
+ const wxGraphicsBrush& backgroundBrush);
+
Graphics* m_context;
GraphicsStates m_stateStack;
GraphicsState m_state1;
m_helper = NULL;
}
-wxGDIPlusBitmapData::wxGDIPlusBitmapData( wxGraphicsRenderer* renderer,
+wxGDIPlusBitmapData::wxGDIPlusBitmapData( wxGraphicsRenderer* renderer,
const wxBitmap &bmp) : wxGraphicsObjectRefData( renderer )
{
m_bitmap = NULL;
*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::DrawLines( size_t n, const wxPoint2DDouble *points, int WXUNUSED(fillStyle) )
+void wxGDIPlusContext::DrawLines( size_t n, const wxPoint2DDouble *points, wxPolygonFillMode WXUNUSED(fillStyle) )
{
wxGDIPlusOffsetHelper helper( m_context , ShouldOffset() );
Point *cpoints = new Point[n];
}
}
-void wxGDIPlusContext::FillPath( const wxGraphicsPath& path , int fillStyle )
+void wxGDIPlusContext::FillPath( const wxGraphicsPath& path , wxPolygonFillMode fillStyle )
{
if ( !m_brush.IsNull() )
{
interim.LockBits(&bounds, ImageLockModeRead,
interim.GetPixelFormat(),&data);
-
+
bool hasAlpha = false;
for ( size_t y = 0 ; y < height && !hasAlpha ; ++y)
{
DeleteObject(iconInfo.hbmMask);
}
-void wxGDIPlusContext::DrawText( const wxString &str, wxDouble x, wxDouble y )
+void wxGDIPlusContext::DoDrawFilledText(const wxString& str,
+ wxDouble x, wxDouble y,
+ const wxGraphicsBrush& brush)
{
- wxCHECK_RET( !m_font.IsNull(), wxT("wxGDIPlusContext::DrawText - no valid font set") );
+ wxCHECK_RET( !m_font.IsNull(),
+ wxT("wxGDIPlusContext::DrawText - no valid font set") );
if ( str.IsEmpty())
return ;
- wxWCharBuffer s = str.wc_str( *wxConvUI );
- m_context->DrawString( s , -1 , ((wxGDIPlusFontData*)m_font.GetRefData())->GetGDIPlusFont() ,
- PointF( x , y ) , StringFormat::GenericTypographic() , ((wxGDIPlusFontData*)m_font.GetRefData())->GetGDIPlusBrush() );
+ wxGDIPlusFontData * const
+ fontData = (wxGDIPlusFontData *)m_font.GetRefData();
+ wxGDIPlusBrushData * const
+ brushData = (wxGDIPlusBrushData *)brush.GetRefData();
+
+ m_context->DrawString
+ (
+ str.wc_str(*wxConvUI), // string to draw, always Unicode
+ -1, // length: string is NUL-terminated
+ fontData->GetGDIPlusFont(),
+ PointF(x, y),
+ StringFormat::GenericTypographic(),
+ brushData ? brushData->GetGDIPlusBrush()
+ : fontData->GetGDIPlusBrush()
+ );
}
void wxGDIPlusContext::GetTextExtent( const wxString &str, wxDouble *width, wxDouble *height,
{
RectF layoutRect(0,0, 100000.0f, 100000.0f);
StringFormat strFormat( StringFormat::GenericTypographic() );
- strFormat.SetFormatFlags( StringFormatFlagsMeasureTrailingSpaces | strFormat.GetFormatFlags() );
+ strFormat.SetFormatFlags( StringFormatFlagsMeasureTrailingSpaces | strFormat.GetFormatFlags() );
RectF bounds ;
m_context->MeasureString((const wchar_t *) s , wcslen(s) , f, layoutRect, &strFormat, &bounds ) ;
ranges[i].Length = 1 ;
}
strFormat.SetMeasurableCharacterRanges(len,ranges);
- strFormat.SetFormatFlags( StringFormatFlagsMeasureTrailingSpaces | strFormat.GetFormatFlags() );
+ strFormat.SetFormatFlags( StringFormatFlagsMeasureTrailingSpaces | strFormat.GetFormatFlags() );
m_context->MeasureCharacterRanges(ws, -1 , f,layoutRect, &strFormat,1,regions) ;
RectF bbox ;
}
bool wxGDIPlusContext::ShouldOffset() const
-{
+{
int penwidth = 0 ;
if ( !m_pen.IsNull() )
{
virtual wxGraphicsContext * CreateContext( const wxMemoryDC& dc);
virtual wxGraphicsContext * CreateContext( const wxPrinterDC& dc);
-
+
virtual wxGraphicsContext * CreateContextFromNativeContext( void * context );
virtual wxGraphicsContext * CreateContextFromNativeWindow( void * window );
// create a native bitmap representation
virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap );
-
+
// create a subimage from a native image representation
virtual wxGraphicsBitmap CreateSubBitmap( const wxGraphicsBitmap &bitmap, wxDouble x, wxDouble y, wxDouble w, wxDouble h );