X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c8dbe0aee2a10e468fad01a25e2ce041d992d62a..fe77cf604a21504f06c1d667a64676af4b257c4c:/src/gtk/dcclient.cpp diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index 929d71bfb9..5af43d6f27 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -401,37 +401,13 @@ void wxWindowDC::DoGetSize( int* width, int* height ) const m_owner->GetSize(width, height); } -void wxWindowDC::DoFloodFill( wxCoord x, wxCoord y, - const wxColour & col, int style ) -{ - 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); +extern bool wxDoFloodFill(wxDC *dc, wxCoord x, wxCoord y, + const wxColour & col, int style); - 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::DoFloodFill(wxCoord x, wxCoord y, + const wxColour& col, int style) +{ + return wxDoFloodFill(this, x, y, col, style); } bool wxWindowDC::DoGetPixel( wxCoord x1, wxCoord y1, wxColour *col ) const @@ -1584,6 +1560,11 @@ void wxWindowDC::Clear() if (!m_window) return; + // VZ: the code below results in infinite recursion and crashes when + // dc.Clear() is done from OnPaint() so I disable it for now. + // I don't know what the correct fix is but Clear() surely should not + // reenter OnPaint()! +#if 0 /* - we either are a memory dc or have a window as the owner. anything else shouldn't happen. - we don't use gdk_window_clear() as we don't set @@ -1593,9 +1574,7 @@ void wxWindowDC::Clear() if (m_owner) { - int width,height; - m_owner->GetSize( &width, &height ); - gdk_draw_rectangle( m_window, m_bgGC, TRUE, 0, 0, width, height ); + m_owner->Clear(); return; } @@ -1606,11 +1585,18 @@ void wxWindowDC::Clear() gdk_draw_rectangle( m_window, m_bgGC, TRUE, 0, 0, width, height ); return; } +#else // 1 + int width,height; + GetSize( &width, &height ); + gdk_draw_rectangle( m_window, m_bgGC, TRUE, 0, 0, width, height ); +#endif // 0/1 } void wxWindowDC::SetFont( const wxFont &font ) { - wxCHECK_RET( font.Ok(), _T("invalid font in wxWindowDC::SetFont") ); + // It is common practice to set the font to wxNullFont, so + // don't consider it to be an error + // wxCHECK_RET( font.Ok(), _T("invalid font in wxWindowDC::SetFont") ); m_font = font; #ifdef __WXGTK20__