Show_Brushes,
Show_Polygons,
Show_Mask,
+ Show_Mask_Stretch,
Show_Ops,
Show_Regions,
Show_Circles,
#endif
protected:
+ enum DrawMode
+ {
+ Draw_Normal,
+ Draw_Stretch
+ };
+
void DrawTestLines( int x, int y, int width, wxDC &dc );
void DrawTestPoly(wxDC& dc);
void DrawTestBrushes(wxDC& dc);
void DrawText(wxDC& dc);
- void DrawImages(wxDC& dc);
+ void DrawImages(wxDC& dc, DrawMode mode);
void DrawWithLogicalOps(wxDC& dc);
#if wxUSE_GRAPHICS_CONTEXT
void DrawAlpha(wxDC& dc);
File_ShowBrushes,
File_ShowPolygons,
File_ShowMask,
+ File_ShowMaskStretch,
File_ShowOps,
File_ShowRegions,
File_ShowCircles,
wxPathList pathList;
pathList.Add(_T("."));
pathList.Add(_T(".."));
+ pathList.Add(_T("../.."));
wxString path = pathList.FindValidPath(_T("pat4.bmp"));
if ( !path )
// `Main program' equivalent: the program execution "starts" here
bool MyApp::OnInit()
{
+ if ( !wxApp::OnInit() )
+ return false;
+
// Create the main application window
MyFrame *frame = new MyFrame(_T("Drawing sample"),
wxPoint(50, 50), wxSize(550, 340));
dc.DrawText( _T("This is Swiss 18pt text."), 110, 40 );
- long length;
- long height;
- long descent;
+ wxCoord length;
+ wxCoord height;
+ wxCoord descent;
dc.GetTextExtent( _T("This is Swiss 18pt text."), &length, &height, &descent );
text.Printf( wxT("Dimensions are length %ld, height %ld, descent %ld"), length, height, descent );
dc.DrawText( text, 110, 80 );
{ wxT("wxXOR"), wxXOR },
};
-void MyCanvas::DrawImages(wxDC& dc)
+void MyCanvas::DrawImages(wxDC& dc, DrawMode mode)
{
dc.DrawText(_T("original image"), 0, 0);
dc.DrawBitmap(*gs_bmpNoMask, 0, 20, 0);
dc.DrawText(rasterOperations[n].name, x, y - 20);
memDC.SelectObject(*gs_bmpWithColMask);
- dc.Blit(x, y, cx, cy, &memDC, 0, 0, rasterOperations[n].rop, true);
+ if ( mode == Draw_Stretch )
+ {
+ dc.StretchBlit(x, y, cx, cy, &memDC, 0, 0, cx/2, cy/2,
+ rasterOperations[n].rop, true);
+ }
+ else
+ {
+ dc.Blit(x, y, cx, cy, &memDC, 0, 0, rasterOperations[n].rop, true);
+ }
}
}
wxDouble margin = 20 ;
wxDouble width = 180 ;
wxDouble radius = 30 ;
-
+
dc.SetPen( wxPen( wxColour( 128, 0, 0, 255 ),12, wxSOLID));
dc.SetBrush( wxBrush( wxColour( 255, 0, 0, 255),wxSOLID));
-
+
wxRect r(margin,margin+width*0.66,width,width) ;
-
+
dc.DrawRoundedRectangle( r.x, r.y, r.width, r.width, radius ) ;
-
+
dc.SetPen( wxPen( wxColour( 0, 0, 128, 255 ),12, wxSOLID));
dc.SetBrush( wxBrush( wxColour( 0, 0, 255, 255),wxSOLID));
-
+
r.Offset( width * 0.8 , - width * 0.66 ) ;
-
+
dc.DrawRoundedRectangle( r.x, r.y, r.width, r.width, radius ) ;
-
+
dc.SetPen( wxPen( wxColour( 128, 128, 0, 255 ),12, wxSOLID));
dc.SetBrush( wxBrush( wxColour( 192, 192, 0, 255),wxSOLID));
r.Offset( width * 0.8 , width *0.5 ) ;
-
+
dc.DrawRoundedRectangle( r.x, r.y, r.width, r.width, radius ) ;
-
+
dc.SetPen( *wxTRANSPARENT_PEN ) ;
dc.SetBrush( wxBrush( wxColour(255,255,128,128) ) );
dc.DrawRoundedRectangle( 0 , margin + width / 2 , width * 3 , 100 , radius) ;
-
+
dc.SetTextForeground( wxColour(255,255,0,128) );
dc.SetFont( wxFont( 40, wxFONTFAMILY_SWISS, wxFONTSTYLE_ITALIC, wxFONTWEIGHT_NORMAL ) );
dc.DrawText( wxT("Hello!"), 120, 80 );
dc.DrawEllipticArc(x + r, y, 2*r, r, 90, 180);
dc.DrawEllipticArc(x + 3*r, y, 2*r, r, 180, 270);
dc.DrawEllipticArc(x + 5*r, y, 2*r, r, 270, 360);
-
+
// same as above, just transparent brush
-
+
dc.SetPen( *wxRED_PEN );
dc.SetBrush( *wxTRANSPARENT_BRUSH );
dc.DrawEllipticArc(x + r, y, 2*r, r, 90, 180);
dc.DrawEllipticArc(x + 3*r, y, 2*r, r, 180, 270);
dc.DrawEllipticArc(x + 5*r, y, 2*r, r, 270, 360);
-
+
}
void MyCanvas::DrawSplines(wxDC& dc)
break;
case Show_Mask:
- DrawImages(dc);
+ DrawImages(dc, Draw_Normal);
+ break;
+
+ case Show_Mask_Stretch:
+ DrawImages(dc, Draw_Stretch);
break;
case Show_Ops:
DrawWithLogicalOps(dc);
break;
-
+
#if wxUSE_GRAPHICS_CONTEXT
case Show_Alpha:
DrawAlpha(dc);
menuFile->Append(File_ShowBrushes, _T("&Brushes screen\tF4"));
menuFile->Append(File_ShowPolygons, _T("&Polygons screen\tF5"));
menuFile->Append(File_ShowMask, _T("&Mask screen\tF6"));
+ menuFile->Append(File_ShowMaskStretch, _T("1/&2 scaled mask\tShift-F6"));
menuFile->Append(File_ShowOps, _T("&ROP screen\tF7"));
menuFile->Append(File_ShowRegions, _T("Re&gions screen\tF8"));
menuFile->Append(File_ShowCircles, _T("&Circles screen\tF9"));