avoid using wxDC::Blit() and wxDC::GetPixel() on window that is being painted, results are unpredictable on wxGTK
see #14067 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70823 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -554,19 +554,29 @@ void MyCanvas::DrawTestLines( int x, int y, int width, wxDC &dc )
|
|||||||
|
|
||||||
void MyCanvas::DrawDefault(wxDC& dc)
|
void MyCanvas::DrawDefault(wxDC& dc)
|
||||||
{
|
{
|
||||||
// mark the origin
|
// Draw circle centered at the origin, then flood fill it with a different
|
||||||
dc.DrawCircle(0, 0, 10);
|
// color. Done with a wxMemoryDC because Blit (used by generic
|
||||||
|
// wxDoFloodFill) from a window that is being painted gives unpredictable
|
||||||
#if !defined(wxMAC_USE_CORE_GRAPHICS) || !wxMAC_USE_CORE_GRAPHICS
|
// results on wxGTK
|
||||||
// GetPixel and FloodFill not supported by Mac OS X CoreGraphics
|
{
|
||||||
// (FloodFill uses Blit from a non-wxMemoryDC)
|
wxImage img(21, 21, false);
|
||||||
//flood fill using brush, starting at 1,1 and replacing whatever colour we find there
|
img.Clear(1);
|
||||||
dc.SetBrush(wxBrush(wxColour(128,128,0), wxSOLID));
|
wxBitmap bmp(img);
|
||||||
|
{
|
||||||
wxColour tmpColour ;
|
wxMemoryDC mdc(bmp);
|
||||||
dc.GetPixel(1,1, &tmpColour);
|
mdc.SetBrush(dc.GetBrush());
|
||||||
dc.FloodFill(1,1, tmpColour, wxFLOOD_SURFACE);
|
mdc.SetPen(dc.GetPen());
|
||||||
#endif
|
mdc.DrawCircle(10, 10, 10);
|
||||||
|
wxColour c;
|
||||||
|
if (mdc.GetPixel(11, 11, &c))
|
||||||
|
{
|
||||||
|
mdc.SetBrush(wxColour(128, 128, 0));
|
||||||
|
mdc.FloodFill(11, 11, c, wxFLOOD_SURFACE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bmp.SetMask(new wxMask(bmp, wxColour(1, 1, 1)));
|
||||||
|
dc.DrawBitmap(bmp, -10, -10, true);
|
||||||
|
}
|
||||||
|
|
||||||
dc.DrawCheckMark(5, 80, 15, 15);
|
dc.DrawCheckMark(5, 80, 15, 15);
|
||||||
dc.DrawCheckMark(25, 80, 30, 30);
|
dc.DrawCheckMark(25, 80, 30, 30);
|
||||||
|
Reference in New Issue
Block a user