wxDC::StretchBlit() for wxMac and wxMSW (patch 1611973)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44892 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		| @@ -70,6 +70,7 @@ enum ScreenToShow | ||||
|     Show_Brushes, | ||||
|     Show_Polygons, | ||||
|     Show_Mask, | ||||
|     Show_Mask_Stretch, | ||||
|     Show_Ops, | ||||
|     Show_Regions, | ||||
|     Show_Circles, | ||||
| @@ -178,11 +179,17 @@ public: | ||||
| #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); | ||||
| @@ -227,6 +234,7 @@ enum | ||||
|     File_ShowBrushes, | ||||
|     File_ShowPolygons, | ||||
|     File_ShowMask, | ||||
|     File_ShowMaskStretch, | ||||
|     File_ShowOps, | ||||
|     File_ShowRegions, | ||||
|     File_ShowCircles, | ||||
| @@ -310,6 +318,7 @@ bool MyApp::LoadImages() | ||||
|     wxPathList pathList; | ||||
|     pathList.Add(_T(".")); | ||||
|     pathList.Add(_T("..")); | ||||
|     pathList.Add(_T("../..")); | ||||
|  | ||||
|     wxString path = pathList.FindValidPath(_T("pat4.bmp")); | ||||
|     if ( !path ) | ||||
| @@ -835,7 +844,7 @@ static const struct | ||||
|     { 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); | ||||
| @@ -857,7 +866,15 @@ void MyCanvas::DrawImages(wxDC& dc) | ||||
|  | ||||
|         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); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -912,32 +929,32 @@ void MyCanvas::DrawAlpha(wxDC& dc) | ||||
|     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 ); | ||||
| @@ -976,9 +993,9 @@ void MyCanvas::DrawCircles(wxDC& dc) | ||||
|     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 ); | ||||
|  | ||||
| @@ -1005,7 +1022,7 @@ void MyCanvas::DrawCircles(wxDC& dc) | ||||
|     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) | ||||
| @@ -1280,13 +1297,17 @@ void MyCanvas::OnPaint(wxPaintEvent &WXUNUSED(event)) | ||||
|             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); | ||||
| @@ -1355,6 +1376,7 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) | ||||
|     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")); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user