added wxDC::DrawPolyPolygon() (patch 882189)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25549 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2004-02-07 13:12:31 +00:00
parent 77e7c55642
commit 6e76b35d73
6 changed files with 216 additions and 7 deletions

View 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") );