X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8cce89407079e4a25bffdf466777af89f943f5b2..40de795fb9d55f137a94ff607db9641a7383b558:/src/gtk/dcclient.cpp diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index 2d4299ad5a..929d71bfb9 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -19,6 +19,7 @@ #include "wx/dcmemory.h" #include "wx/image.h" #include "wx/module.h" +#include "wx/log.h" #include "wx/gtk/win_gtk.h" @@ -400,10 +401,37 @@ void wxWindowDC::DoGetSize( int* width, int* height ) const m_owner->GetSize(width, height); } -void wxWindowDC::DoFloodFill( wxCoord WXUNUSED(x), wxCoord WXUNUSED(y), - const wxColour &WXUNUSED(col), int WXUNUSED(style) ) +void wxWindowDC::DoFloodFill( wxCoord x, wxCoord y, + const wxColour & col, int style ) { - wxFAIL_MSG( wxT("wxWindowDC::DoFloodFill not implemented") ); + if (GetBrush().GetStyle() == wxTRANSPARENT) + { + wxLogDebug(wxT("In FloodFill, current Brush is transparent, no filling done")); + return ; + } + int height = 0; + int width = 0; + this->GetSize(&width, &height); + //it would be nice to fail if we don't get a sensible size... + if (width < 1 || height < 1) + { + wxLogError(wxT("In FloodFill, dc.GetSize routine failed, method not supported by this DC")); + return ; + } + + //this is much faster than doing the individual pixels + wxMemoryDC memdc; + wxBitmap bitmap(width, height); + memdc.SelectObject(bitmap); + memdc.Blit(0, 0, width, height, (wxDC*) this, 0, 0); + memdc.SelectObject(wxNullBitmap); + + wxImage image = bitmap.ConvertToImage(); + image.DoFloodFill (x,y, GetBrush(), col, style, GetLogicalFunction()); + bitmap = wxBitmap(image); + memdc.SelectObject(bitmap); + Blit(0, 0, width, height, &memdc, 0, 0); + memdc.SelectObject(wxNullBitmap); } bool wxWindowDC::DoGetPixel( wxCoord x1, wxCoord y1, wxColour *col ) const