+ if (buffer[i] == ',') buffer[i] = '.';
+ }
+ PsPrint( buffer);
+
+ PsPrint( "(" );
+ const wxWX2MBbuf textbuf = text.mb_str();
+ size_t len = strlen(textbuf);
+ for (i = 0; i < len; i++)
+ {
+ int c = (unsigned char) textbuf[i];
+ if (c == ')' || c == '(' || c == '\\')
+ {
+ /* Cope with special characters */
+ PsPrint( "\\" );
+ PsPrint(c);
+ }
+ else if ( c >= 128 )
+ {
+ /* Cope with character codes > 127 */
+ PsPrintf( wxT("\\%o"), c);
+ }
+ else
+ {
+ PsPrint(c);
+ }
+ }
+
+ PsPrint( ") show\n" );
+
+ sprintf( buffer, "%.8f rotate\n", -angle );
+ for (i = 0; i < 100; i++)
+ {
+ if (buffer[i] == ',') buffer[i] = '.';
+ }
+ PsPrint( buffer );
+
+ if (m_font.GetUnderlined())
+ {
+ wxCoord uy = (wxCoord)(y + size - m_underlinePosition);
+ wxCoord w, h;
+ GetTextExtent(text, &w, &h);
+
+ sprintf( buffer,
+ "gsave\n"
+ "%d %d moveto\n"
+ "%f setlinewidth\n"
+ "%d %d lineto\n"
+ "stroke\n"
+ "grestore\n",
+ LogicalToDeviceX(x), LogicalToDeviceY(uy),
+ m_underlineThickness,
+ LogicalToDeviceX(x + w), LogicalToDeviceY(uy) );
+ for (i = 0; i < 100; i++)
+ {
+ if (buffer[i] == ',') buffer[i] = '.';
+ }
+ PsPrint( buffer );
+ }
+
+ CalcBoundingBox( x, y );
+ CalcBoundingBox( x + size * text.Length() * 2/3 , y );
+}
+
+void wxPostScriptDC::SetBackground (const wxBrush& brush)
+{
+ m_backgroundBrush = brush;
+}
+
+void wxPostScriptDC::SetLogicalFunction (int WXUNUSED(function))
+{
+ wxFAIL_MSG( wxT("wxPostScriptDC::SetLogicalFunction not implemented.") );
+}
+
+#if wxUSE_SPLINES
+void wxPostScriptDC::DoDrawSpline( wxList *points )
+{
+ wxCHECK_RET( m_ok, wxT("invalid postscript dc") );
+
+ SetPen( m_pen );
+
+ // a and b are not used
+ //double a, b;
+ double c, d, x1, y1, x2, y2, x3, y3;
+ wxPoint *p, *q;
+
+ wxList::compatibility_iterator node = points->GetFirst();
+ p = (wxPoint *)node->GetData();
+ x1 = p->x;
+ y1 = p->y;
+
+ node = node->GetNext();
+ p = (wxPoint *)node->GetData();
+ c = p->x;
+ d = p->y;
+ x3 =
+ #if 0
+ a =
+ #endif
+ (double)(x1 + c) / 2;
+ y3 =
+ #if 0
+ b =
+ #endif
+ (double)(y1 + d) / 2;
+
+ PsPrintf( wxT("newpath\n")
+ wxT("%d %d moveto\n")
+ wxT("%d %d lineto\n"),
+ LogicalToDeviceX((wxCoord)x1), LogicalToDeviceY((wxCoord)y1),
+ LogicalToDeviceX((wxCoord)x3), LogicalToDeviceY((wxCoord)y3) );
+
+ CalcBoundingBox( (wxCoord)x1, (wxCoord)y1 );
+ CalcBoundingBox( (wxCoord)x3, (wxCoord)y3 );
+
+ node = node->GetNext();
+ while (node)
+ {
+ q = (wxPoint *)node->GetData();
+
+ x1 = x3;
+ y1 = y3;
+ x2 = c;
+ y2 = d;
+ c = q->x;
+ d = q->y;
+ x3 = (double)(x2 + c) / 2;