X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b610cc76ee60b50d89f21cacb1bbfe3e90b2c235..27c78e4552aaefac9a4db0d4453eff09cdfef2ad:/src/common/dcbase.cpp diff --git a/src/common/dcbase.cpp b/src/common/dcbase.cpp index 3156558ff1..4cb7b53482 100644 --- a/src/common/dcbase.cpp +++ b/src/common/dcbase.cpp @@ -13,10 +13,6 @@ // declarations // ============================================================================ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "dcbase.h" -#endif - // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- @@ -29,6 +25,7 @@ #endif #include "wx/dc.h" +#include "wx/math.h" // bool wxDCBase::sm_cacheing = false; @@ -373,7 +370,7 @@ void wxDCBase::DoDrawSpline( wxList *points ) // Each element of the widths array will be the width of the string up to and -// including the coresponding character in text. This is the generic +// including the corresponding character in text. This is the generic // implementation, the port-specific classes should do this with native APIs // if available and if faster. Note: pango_layout_index_to_pos is much slower // than calling GetTextExtent!! @@ -405,15 +402,14 @@ bool wxDCBase::DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) { int totalWidth = 0; - size_t i, len = text.Length(); + const size_t len = text.Length(); widths.Empty(); widths.Add(0, len); - int w, h; // reset the cache if font or horizontal scale have changed - if (!s_fontWidthCache.m_widths || - (s_fontWidthCache.m_scaleX != m_scaleX) || - (s_fontWidthCache.m_font != GetFont())) + if ( !s_fontWidthCache.m_widths || + !wxIsSameDouble(s_fontWidthCache.m_scaleX, m_scaleX) || + (s_fontWidthCache.m_font != GetFont()) ) { s_fontWidthCache.Reset(); s_fontWidthCache.m_font = GetFont(); @@ -422,7 +418,8 @@ bool wxDCBase::DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) // Calculate the position of each character based on the widths of // the previous characters - for (i=0; iGetBrush().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; -#else - return false; -#endif -}