//-------------------------------------------------------------------------------
-void wxPostScriptDC::SetResolution(int ppi)
+void wxPostScriptDC::SetResolution(int WXUNUSED(ppi))
{
}
// this calculates m_pageHeight required for
// taking the inverted Y axis into account
SetPrintData( printData );
-
+
m_ok = true;
}
"%f %f lineto\n"
"closepath\n"
"fill\n",
- XLOG2DEV(xc), YLOG2DEV(yc),
- XLOG2DEVREL(i_radius), YLOG2DEVREL(i_radius),
+ XLOG2DEV(xc), YLOG2DEV(yc),
+ XLOG2DEVREL(i_radius), YLOG2DEVREL(i_radius),
alpha1, alpha2,
XLOG2DEV(xc), YLOG2DEV(yc) );
buffer.Replace( ",", "." );
if (m_pen.GetStyle() != wxTRANSPARENT)
{
SetPen( m_pen );
-
+
wxString buffer;
buffer.Printf( "newpath\n"
"%f %f %f %f %f %f ellipse\n"
"%f %f lineto\n"
- "stroke\n"
- "fill\n",
- XLOG2DEV(xc), YLOG2DEV(yc),
- XLOG2DEVREL(i_radius), YLOG2DEVREL(i_radius),
+ "closepath\n"
+ "stroke\n",
+ XLOG2DEV(xc), YLOG2DEV(yc),
+ XLOG2DEVREL(i_radius), YLOG2DEVREL(i_radius),
alpha1, alpha2,
XLOG2DEV(xc), YLOG2DEV(yc) );
buffer.Replace( ",", "." );
"%f %f %f %f %f %f false ellipticarc\n",
XLOG2DEV(x+w/2), YLOG2DEV(y+h/2),
XLOG2DEVREL(w/2), YLOG2DEVREL(h/2),
- wxRound(sa), wxRound(ea) );
+ sa, ea );
buffer.Replace( ",", "." );
PsPrint( buffer );
YLOG2DEV(points[0].y+yoffset) );
buffer.Replace( ",", "." );
PsPrint( buffer );
-
+
for (i = 1; i < n; i++)
{
buffer.Printf( "%f %f lineto\n",
{
wxCHECK_RET( m_ok, wxT("invalid postscript dc") );
+ width--;
+ height--;
+
if (m_brush.GetStyle () != wxTRANSPARENT)
{
SetBrush( m_brush );
{
wxCHECK_RET( m_ok, wxT("invalid postscript dc") );
+ width--;
+ height--;
+
if (radius < 0.0)
{
// Now, a negative radius is interpreted to mean
{
wxCHECK_RET( m_ok, wxT("invalid postscript dc") );
+ width--;
+ height--;
+
if (m_brush.GetStyle () != wxTRANSPARENT)
{
SetBrush (m_brush);
wxString buffer;
buffer.Printf( "/origstate save def\n"
"20 dict begin\n"
- "/pix %f string def\n"
- "/grays %f string def\n"
+ "/pix %d string def\n"
+ "/grays %d string def\n"
"/npixels 0 def\n"
"/rgbindx 0 def\n"
"%f %f translate\n"
"%f %f scale\n"
- "%f %f 8\n"
- "[%f 0 0 %f 0 %f]\n"
+ "%d %d 8\n"
+ "[%d 0 0 %d 0 %d]\n"
"{currentfile pix readhexstring pop}\n"
"false 3 colorimage\n",
w, w, xx, yy, ww, hh, w, h, w, -h, h );
}
*(bufferindex++) = '\n';
*bufferindex = 0;
- PsPrint( charbuffer );
+
+ if (m_pstream)
+ fwrite( charbuffer, 1, strlen( charbuffer ), m_pstream );
+ else
+ PsPrint( charbuffer );
}
PsPrint( "end\n" );
PsPrint( name );
PsPrint( " findfont\n" );
-
+
double size = (double) m_font.GetPointSize();
wxString buffer;
buffer.Printf( "%f scalefont setfont\n", size * DEV2PS * m_scaleX );
m_pen = pen;
double width;
-
+
if (m_pen.GetWidth() <= 0)
width = 0.1;
else
wxCHECK_RET( m_ok, wxT("invalid postscript dc") );
const wxWX2MBbuf textbuf = text.mb_str();
- if (textbuf.data() == NULL)
+ if ( !textbuf )
return;
-
+
if (m_textForegroundColour.Ok())
{
unsigned char red = m_textForegroundColour.Red();
GetTextExtent(text, &text_w, &text_h, &text_descent);
- // VZ: this seems to be unnecessary, so taking it out for now, if it
- // doesn't create any problems, remove this comment entirely
- //SetFont( m_font );
-
-
int size = m_font.GetPointSize();
// wxCoord by = y + (wxCoord)floor( double(size) * 2.0 / 3.0 ); // approximate baseline
if (m_font.GetUnderlined())
{
wxCoord uy = (wxCoord)(y + size - m_underlinePosition);
-
+
buffer.Printf( "gsave\n"
"%f %f moveto\n"
"%f setlinewidth\n"
buffer.Printf( "%f %f %f setrgbcolor\n", redPS, greenPS, bluePS );
buffer.Replace( ",", "." );
PsPrint( buffer );
-
+
m_currentRed = red;
m_currentBlue = blue;
m_currentGreen = green;
wxCoord w, h;
GetTextExtent(text, &w, &h);
- buffer.Printf(
+ buffer.Printf(
"gsave\n"
"%f %f moveto\n"
"%f setlinewidth\n"
}
#if wxUSE_SPLINES
-void wxPostScriptDC::DoDrawSpline( wxList *points )
+void wxPostScriptDC::DoDrawSpline( const wxPointList *points )
{
wxCHECK_RET( m_ok, wxT("invalid postscript dc") );
double c, d, x1, y1, x2, y2, x3, y3;
wxPoint *p, *q;
- wxList::compatibility_iterator node = points->GetFirst();
- p = (wxPoint *)node->GetData();
+ wxPointList::compatibility_iterator node = points->GetFirst();
+ p = node->GetData();
x1 = p->x;
y1 = p->y;
node = node->GetNext();
- p = (wxPoint *)node->GetData();
+ p = node->GetData();
c = p->x;
d = p->y;
x3 =
node = node->GetNext();
while (node)
{
- q = (wxPoint *)node->GetData();
+ q = node->GetData();
x1 = x3;
y1 = y3;
void wxPostScriptDC::SetPrintData(const wxPrintData& data)
{
- m_printData = data;
+ m_printData = data;
wxPaperSize id = m_printData.GetPaperId();
wxPrintPaperType *paper = wxThePrintPaperDatabase->FindPaperType(id);
}
#endif
+void wxPostScriptDC::ComputeScaleAndOrigin()
+{
+ const wxRealPoint origScale(m_scaleX, m_scaleY);
+
+#if wxUSE_NEW_DC
+ wxImplDC::ComputeScaleAndOrigin();
+#else
+ wxDC::ComputeScaleAndOrigin();
+#endif
+
+ // If scale has changed call SetPen to recalulate the line width
+ // and SetFont to recalculate font size
+ if ( wxRealPoint(m_scaleX, m_scaleY) != origScale && m_pen.IsOk() )
+ {
+ SetPen( m_pen );
+ SetFont( m_font );
+ }
+}
+
void wxPostScriptDC::DoGetSize(int* width, int* height) const
{
wxPaperSize id = m_printData.GetPaperId();
h = tmp;
}
- if (width)
+ if (width)
*width = wxRound( w * PS2DEV );
-
- if (height)
+
+ if (height)
*height = wxRound( h * PS2DEV );
}
wxString buffer;
PsPrint( "%!PS-Adobe-2.0\n" );
-
+
buffer.Printf( "%%%%Title: %s\n", m_title );
PsPrint( buffer );
PsPrint( "%%Creator: wxWidgets PostScript renderer\n" );
-
+
buffer.Printf( "%%%%CreationDate: %s\n", wxNow() );
PsPrint( buffer );
-
+
if (m_printData.GetOrientation() == wxLANDSCAPE)
PsPrint( "%%Orientation: Landscape\n" );
else
case wxPAPER_10X14: paper = wxT("10x14"); break; // 10-by-14-inch sheet
default: paper = wxT("A4");
}
-
+
buffer.Printf( "%%%%DocumentPaperSizes: %s\n", paper );
PsPrint( buffer );
-
+
PsPrint( "%%EndComments\n\n" );
PsPrint( "%%BeginProlog\n" );
buffer.Printf( "%d %d translate\n", translate_x, translate_y );
PsPrint( buffer );
-
+
double scale_x = data->GetPrinterScaleX();
double scale_y = data->GetPrinterScaleY();
-
+
buffer.Printf( "%f %f scale\n", scale_x, scale_y );
buffer.Replace( ",", "." );
PsPrint( buffer );
-
+
#endif
// Each page starts with an "initgraphics" which resets the
- // transformation and so we need to rotate the page for
+ // transformation and so we need to rotate the page for
// landscape printing)
// I copied this one from a PostScript tutorial, but to no avail. RR.
// PsPrint( "90 rotate llx neg ury nef translate\n" );
-
+
if (m_printData.GetOrientation() == wxLANDSCAPE)
PsPrint( "90 rotate\n" );
}
// GTK 2.0
const wxWX2MBbuf strbuf = string.mb_str();
-
+
// conversion failed (non e.g. ISO characters)
- if (strbuf.data() == NULL)
+ if ( !strbuf )
return;
#if !wxUSE_AFM_FOR_POSTSCRIPT