]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/dcpsg.cpp
restored defaults in switchs removed in the last commit
[wxWidgets.git] / src / generic / dcpsg.cpp
index a4e87ee3d9c7913a9e98813260a9defa86a03ae8..e3025e3f243cbfe6072412200401f1ad96f16310 100644 (file)
@@ -564,7 +564,7 @@ void wxPostScriptDC::DoDrawPoint (wxCoord x, wxCoord y)
     CalcBoundingBox( x, y );
 }
 
-void wxPostScriptDC::DoDrawPolygon (int n, wxPoint points[], wxCoord xoffset, wxCoord yoffset, int WXUNUSED(fillStyle))
+void wxPostScriptDC::DoDrawPolygon (int n, wxPoint points[], wxCoord xoffset, wxCoord yoffset, int fillStyle)
 {
     wxCHECK_RET( m_ok, wxT("invalid postscript dc") );
 
@@ -597,7 +597,7 @@ void wxPostScriptDC::DoDrawPolygon (int n, wxPoint points[], wxCoord xoffset, wx
         }
 
         if ( m_pstream )
-            fprintf( m_pstream, "fill\n" );
+            fprintf( m_pstream, (fillStyle == wxODDEVEN_RULE ? "eofill\n" : "fill\n"));
     }
 
     if (m_pen.GetStyle () != wxTRANSPARENT)
@@ -634,6 +634,72 @@ void wxPostScriptDC::DoDrawPolygon (int n, wxPoint points[], wxCoord xoffset, wx
     }
 }
 
+void wxPostScriptDC::DoDrawPolyPolygon (int n, int start[], wxPoint points[], wxCoord xoffset, wxCoord yoffset, int fillStyle)
+{
+    wxCHECK_RET( m_ok && m_pstream, wxT("invalid postscript dc") );
+
+    if (n <= 0) return;
+
+    if (m_brush.GetStyle () != wxTRANSPARENT)
+    {
+        SetBrush( m_brush );
+
+        fprintf( m_pstream, "newpath\n" );
+
+        int ofs = 0;
+        for (int i = 0; i < n; ofs += start[i++])
+        {
+            wxCoord xx = LogicalToDeviceX(points[ofs].x + xoffset);
+            wxCoord yy = LogicalToDeviceY(points[ofs].y + yoffset);
+
+            fprintf( m_pstream, "%d %d moveto\n", xx, yy );
+
+            CalcBoundingBox( points[ofs].x + xoffset, points[ofs].y + yoffset );
+
+            for (int j = 1; j < start[i]; j++)
+            {
+                xx = LogicalToDeviceX(points[ofs+j].x + xoffset);
+                yy = LogicalToDeviceY(points[ofs+j].y + yoffset);
+
+                fprintf( m_pstream, "%d %d lineto\n", xx, yy );
+
+                CalcBoundingBox( points[ofs+j].x + xoffset, points[ofs+j].y + yoffset);
+            }
+        }
+        fprintf( m_pstream, (fillStyle == wxODDEVEN_RULE ? "eofill\n" : "fill\n"));
+    }
+
+    if (m_pen.GetStyle () != wxTRANSPARENT)
+    {
+        SetPen( m_pen );
+
+        fprintf( m_pstream, "newpath\n" );
+
+        int ofs = 0;
+        for (int i = 0; i < n; ofs += start[i++])
+        {
+            wxCoord xx = LogicalToDeviceX(points[ofs].x + xoffset);
+            wxCoord yy = LogicalToDeviceY(points[ofs].y + yoffset);
+
+            fprintf( m_pstream, "%d %d moveto\n", xx, yy );
+
+            CalcBoundingBox( points[ofs].x + xoffset, points[ofs].y + yoffset );
+
+            for (int j = 1; j < start[i]; j++)
+            {
+                xx = LogicalToDeviceX(points[ofs+j].x + xoffset);
+                yy = LogicalToDeviceY(points[ofs+j].y + yoffset);
+
+                fprintf( m_pstream, "%d %d lineto\n", xx, yy );
+
+                CalcBoundingBox( points[ofs+j].x + xoffset, points[ofs+j].y + yoffset);
+            }
+        }
+        fprintf( m_pstream, "closepath\n" );
+        fprintf( m_pstream, "stroke\n" );
+    }
+}
+
 void wxPostScriptDC::DoDrawLines (int n, wxPoint points[], wxCoord xoffset, wxCoord yoffset)
 {
     wxCHECK_RET( m_ok, wxT("invalid postscript dc") );