// don't set m_textForegroundColour to an invalid colour as we'd crash
// later then (we use m_textForegroundColour.GetColor() without checking
// in a few places)
- if ( col.IsOk() && col != m_textForegroundColour )
+ if ( col.IsOk() )
{
m_textForegroundColour = col;
m_graphicContext->SetFont( m_font, m_textForegroundColour );
m_textBackgroundColour = col;
}
-void wxGCDCImpl::SetMapMode( wxMappingMode mode )
-{
- switch (mode)
- {
- case wxMM_TWIPS:
- SetLogicalScale( twips2mm * m_mm_to_pix_x, twips2mm * m_mm_to_pix_y );
- break;
-
- case wxMM_POINTS:
- SetLogicalScale( pt2mm * m_mm_to_pix_x, pt2mm * m_mm_to_pix_y );
- break;
-
- case wxMM_METRIC:
- SetLogicalScale( m_mm_to_pix_x, m_mm_to_pix_y );
- break;
-
- case wxMM_LOMETRIC:
- SetLogicalScale( m_mm_to_pix_x / 10.0, m_mm_to_pix_y / 10.0 );
- break;
-
- case wxMM_TEXT:
- default:
- SetLogicalScale( 1.0, 1.0 );
- break;
- }
-
- ComputeScaleAndOrigin();
-}
-
wxSize wxGCDCImpl::GetPPI() const
{
return wxSize(72, 72);
void wxGCDCImpl::SetPen( const wxPen &pen )
{
- if ( m_pen == pen )
- return;
-
m_pen = pen;
if ( m_graphicContext )
{
void wxGCDCImpl::SetBrush( const wxBrush &brush )
{
- if (m_brush == brush)
- return;
-
m_brush = brush;
if ( m_graphicContext )
{
void wxGCDCImpl::SetBackground( const wxBrush &brush )
{
- if (m_backgroundBrush == brush)
- return;
-
m_backgroundBrush = brush;
if (!m_backgroundBrush.IsOk())
return;
void wxGCDCImpl::SetLogicalFunction( wxRasterOperationMode function )
{
- if (m_logicalFunction == function)
- return;
-
m_logicalFunction = function;
wxCompositionMode mode = TranslateRasterOp( function );
source->LogicalToDeviceY(ysrc),
source->LogicalToDeviceXRel(srcWidth),
source->LogicalToDeviceYRel(srcHeight));
+ const wxRect subrectOrig = subrect;
// clip the subrect down to the size of the source DC
wxRect clip;
source->GetSize(&clip.width, &clip.height);
if ( !useMask && blit.GetMask() )
blit.SetMask(NULL);
- m_graphicContext->DrawBitmap( blit, xdest, ydest,
- dstWidth, dstHeight);
+ double x = xdest;
+ double y = ydest;
+ double w = dstWidth;
+ double h = dstHeight;
+ // adjust dest rect if source rect is clipped
+ if (subrect.width != subrectOrig.width || subrect.height != subrectOrig.height)
+ {
+ x += (subrect.x - subrectOrig.x) / double(subrectOrig.width) * dstWidth;
+ y += (subrect.y - subrectOrig.y) / double(subrectOrig.height) * dstHeight;
+ w *= double(subrect.width) / subrectOrig.width;
+ h *= double(subrect.height) / subrectOrig.height;
+ }
+ m_graphicContext->DrawBitmap(blit, x, y, w, h);
}
else
{
m_graphicContext->SetPen(*wxTRANSPARENT_PEN);
m_graphicContext->DrawRectangle(rect.x,rect.y,rect.width,rect.height);
m_graphicContext->SetPen(m_pen);
+ m_graphicContext->SetBrush(m_brush);
}
void wxGCDCImpl::DoGradientFillConcentric(const wxRect& rect,
m_graphicContext->DrawRectangle(rect.x,rect.y,rect.width,rect.height);
m_graphicContext->SetPen(m_pen);
+ m_graphicContext->SetBrush(m_brush);
}
void wxGCDCImpl::DoDrawCheckMark(wxCoord x, wxCoord y,