]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/dcbase.cpp
make construct simpler
[wxWidgets.git] / src / common / dcbase.cpp
index 73653ffc7d26ae2a717c2e1472554e5242c0ac96..88612bfdb10948ec573bfe2ee830dad90c7c2f86 100644 (file)
@@ -106,6 +106,49 @@ void wxDCBase::DrawPolygon(const wxList *list,
     delete [] points;
 }
 
+void
+wxDCBase::DoDrawPolyPolygon(int n,
+                            int count[],
+                            wxPoint points[],
+                            wxCoord xoffset, wxCoord yoffset,
+                            int fillStyle)
+{
+    if ( n == 1 )
+    {
+        DoDrawPolygon(count[0], points, xoffset, yoffset, fillStyle);
+        return;
+    }
+
+    int      i, j, lastOfs;
+    wxPoint* pts;
+    wxPen    pen;
+
+    for (i = j = lastOfs = 0; i < n; i++)
+    {
+        lastOfs = j;
+        j      += count[i];
+    }
+    pts = new wxPoint[j+n-1];
+    for (i = 0; i < j; i++)
+        pts[i] = points[i];
+    for (i = 2; i <= n; i++)
+    {
+        lastOfs -= count[n-i];
+        pts[j++] = pts[lastOfs];
+    }
+
+    pen = GetPen();
+    SetPen(wxPen(*wxBLACK, 0, wxTRANSPARENT));
+    DoDrawPolygon(j, pts, xoffset, yoffset, fillStyle);
+    SetPen(pen);
+    for (i = j = 0; i < n; i++)
+    {
+        DoDrawLines(count[i], pts+j, xoffset, yoffset);
+        j += count[i];
+    }
+    delete[] pts;
+}
+
 // ----------------------------------------------------------------------------
 // splines
 // ----------------------------------------------------------------------------
@@ -322,6 +365,36 @@ void wxDCBase::DoDrawSpline( wxList *points )
 
 #endif // wxUSE_SPLINES
 
+// ----------------------------------------------------------------------------
+// Partial Text Extents
+// ----------------------------------------------------------------------------
+
+
+// Each element of the array will be the width of the string up to and
+// including the coresoponding character in text.  This is the generic
+// implementation, the port-specific classes should do this with native APIs
+// if available.
+
+bool wxDCBase::DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const
+{
+    int totalWidth = 0;
+    size_t i;
+
+    widths.Empty();
+    widths.Add(0, text.Length());
+    
+    // Calculate the position of each character based on the widths of
+    // the previous characters
+    for (i=0; i<text.Length(); i++) {
+        int w, h;
+        GetTextExtent(text[i], &w, &h);
+        totalWidth += w;
+        widths[i] = totalWidth;
+    }
+    return true;
+}
+
+
 // ----------------------------------------------------------------------------
 // enhanced text drawing
 // ----------------------------------------------------------------------------
@@ -617,7 +690,7 @@ void wxDCBase::DoDrawEllipticArcRot( wxCoord x, wxCoord y,
     }
 
     // first draw the pie without pen, if necessary
-       if( GetBrush() != *wxTRANSPARENT_BRUSH )
+    if( GetBrush() != *wxTRANSPARENT_BRUSH )
     {
         wxPen tempPen( GetPen() );
         SetPen( *wxTRANSPARENT_PEN );
@@ -626,7 +699,7 @@ void wxDCBase::DoDrawEllipticArcRot( wxCoord x, wxCoord y,
     }
 
     // then draw the arc without brush, if necessary
-       if( GetPen() != *wxTRANSPARENT_PEN )
+    if( GetPen() != *wxTRANSPARENT_PEN )
     {
         // without center
         DoDrawLines( n-1, points, 0, 0 );