]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/imagfill.cpp
added wxString ctor from std::string (inside #ifdef wxUSE_STD_STRING); removed pragma...
[wxWidgets.git] / src / common / imagfill.cpp
index 78fd8d316074445629228a3a8c31bf1a965c7d61..129c63c168aafc230d60a529019f4c1d7d77b71a 100644 (file)
@@ -273,6 +273,37 @@ wxImageFloodFill(wxImage *image,
 }
 
 
-#endif // wxUSE_IMAGE
+bool wxDoFloodFill(wxDC *dc, wxCoord x, wxCoord y,
+                   const wxColour& col, int style)
+{
+    if (dc->GetBrush().GetStyle() == wxTRANSPARENT)
+        return true;
 
+    int height = 0;
+    int width  = 0;
+    dc->GetSize(&width, &height);
+
+    //it would be nice to fail if we don't get a sensible size...
+    wxCHECK_MSG(width >= 1 && height >= 1, false,
+                wxT("In FloodFill, dc.GetSize routine failed, method not supported by this DC"));
+
+    //this is much faster than doing the individual pixels
+    wxMemoryDC memdc;
+    wxBitmap bitmap(width, height);
+    memdc.SelectObject(bitmap);
+    memdc.Blit(0, 0, width, height, dc, 0, 0);
+    memdc.SelectObject(wxNullBitmap);
+
+    wxImage image = bitmap.ConvertToImage();
+    wxImageFloodFill(&image, x,y, dc->GetBrush(), col, style,
+                     dc->GetLogicalFunction());
+    bitmap = wxBitmap(image);
+    memdc.SelectObject(bitmap);
+    dc->Blit(0, 0, width, height, &memdc, 0, 0);
+    memdc.SelectObject(wxNullBitmap);
+
+    return true;
+}
+
+#endif // wxUSE_IMAGE