void DrawCircles(wxDC& dc);
void DrawDefault(wxDC& dc);
+ void DrawRegionsHelper(wxDC& dc, wxCoord x);
+
private:
MyFrame *m_owner;
dc.DrawText("You should see a red rect partly covered by a cyan one "
"on the left", 10, 5);
dc.DrawText("and 5 smileys from which 4 are partially clipped on the "
- "right", 10, 5 + dc.GetCharHeight());
+ "right (2 copies should be identical)",
+ 10, 5 + dc.GetCharHeight());
+
+ DrawRegionsHelper(dc, 10);
+ DrawRegionsHelper(dc, 350);
+}
+void MyCanvas::DrawRegionsHelper(wxDC& dc, wxCoord x)
+{
+ dc.DestroyClippingRegion();
dc.SetBrush( *wxWHITE_BRUSH );
dc.SetPen( *wxTRANSPARENT_PEN );
- dc.DrawRectangle( 10,50,310,310 );
+ dc.DrawRectangle( x,50,310,310 );
- dc.SetClippingRegion( 20,60,100,270 );
+ dc.SetClippingRegion( x+10,60,100,270 );
dc.SetBrush( *wxRED_BRUSH );
- dc.DrawRectangle( 10,50,310,310 );
+ dc.DrawRectangle( x,50,310,310 );
- dc.SetClippingRegion( 20,60,100,100 );
+ dc.SetClippingRegion( x+10,60,100,100 );
dc.SetBrush( *wxCYAN_BRUSH );
- dc.DrawRectangle( 10,50,310,310 );
+ dc.DrawRectangle( x,50,310,310 );
- dc.DestroyClippingRegion();
- dc.SetClippingRegion( 120,70,100,270 );
+ // when drawing the left half, destroy the clipping region, when drawing
+ // the right one - leave it
+ //
+ // normally it shouldn't make any difference as SetClippingRegion()
+ // replaces the old clipping region
+ if ( x < 300 )
+ dc.DestroyClippingRegion();
+ dc.SetClippingRegion( x+110,70,100,270 );
dc.SetBrush( *wxGREY_BRUSH );
- dc.DrawRectangle( 10,50,310,310 );
+ dc.DrawRectangle( x,50,310,310 );
if (m_smile_bmp.Ok())
{
- dc.DrawBitmap( m_smile_bmp, 160, 200, TRUE );
- dc.DrawBitmap( m_smile_bmp, 140, 60, TRUE );
- dc.DrawBitmap( m_smile_bmp, 140, 330, TRUE );
- dc.DrawBitmap( m_smile_bmp, 110, 120, TRUE );
- dc.DrawBitmap( m_smile_bmp, 210, 120, TRUE );
+ dc.DrawBitmap( m_smile_bmp, x+150, 200, TRUE );
+ dc.DrawBitmap( m_smile_bmp, x+130, 60, TRUE );
+ dc.DrawBitmap( m_smile_bmp, x+130, 330, TRUE );
+ dc.DrawBitmap( m_smile_bmp, x+100, 120, TRUE );
+ dc.DrawBitmap( m_smile_bmp, x+200, 120, TRUE );
}
}