X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2aaa050c33fd66beecaf93c8f502e6c00d864eab..7fc65a0384df4007a96cd5bab98b0f7abef0af52:/src/common/dcbase.cpp diff --git a/src/common/dcbase.cpp b/src/common/dcbase.cpp index e44a8063f4..4cb7b53482 100644 --- a/src/common/dcbase.cpp +++ b/src/common/dcbase.cpp @@ -5,7 +5,7 @@ // Modified by: // Created: 05/25/99 // RCS-ID: $Id$ -// Copyright: (c) wxWindows team +// Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -13,10 +13,6 @@ // declarations // ============================================================================ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "dcbase.h" -#endif - // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- @@ -29,10 +25,9 @@ #endif #include "wx/dc.h" +#include "wx/math.h" -#include - -// bool wxDCBase::sm_cacheing = FALSE; +// bool wxDCBase::sm_cacheing = false; // ============================================================================ // implementation @@ -291,7 +286,7 @@ static bool wx_spline_add_point(double x, double y) point->x = (int) x; point->y = (int) y; wx_spline_point_list.Append((wxObject*)point); - return TRUE; + return true; } static void wx_spline_draw_point_array(wxDCBase *dc) @@ -316,6 +311,10 @@ void wxDCBase::DoDrawSpline( wxList *points ) double x1, y1, x2, y2; wxList::compatibility_iterator node = points->GetFirst(); + if (node == wxList::compatibility_iterator()) + // empty list + return; + p = (wxPoint *)node->GetData(); x1 = p->x; @@ -371,12 +370,12 @@ void wxDCBase::DoDrawSpline( wxList *points ) // Each element of the widths array will be the width of the string up to and -// including the coresoponding 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!! -#define FWC_SIZE 128 +#define FWC_SIZE 256 class FontWidthCache { @@ -403,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(); @@ -420,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; iFirst(); node; node = node->Next() ) @@ -790,7 +789,7 @@ void wxDCBase::CalculateEllipticPoints( wxList* points, wxCoord w, wxCoord h, double sa, double ea ) { - double pi = 3.1415926535; + double pi = M_PI; double sar = 0; double ear = 0; int xsa = 0;