m_signY = -1; // default y-axis bottom up -> top down
m_printData = printData;
+
+ m_ok = TRUE;
}
wxPostScriptDC::~wxPostScriptDC ()
// For PS_PRINTER action this depends on a Unix-style print spooler
// since the wx_printer_file can be destroyed during a session
// @@@ TODO: a Windows-style answer for non-Unix
- char userId[256];
+ wxChar userId[256];
wxGetUserId (userId, sizeof (userId) / sizeof (char));
- char tmp[256];
- strcpy (tmp, "/tmp/preview_");
- strcat (tmp, userId);
+ wxChar tmp[256];
+ wxStrcpy (tmp, _T("/tmp/preview_"));
+ wxStrcat (tmp, userId);
m_printData.SetFilename(tmp);
#endif
- char tmp2[256];
- strcpy(tmp2, m_printData.GetFilename());
- strcat (tmp2, ".ps");
+ wxChar tmp2[256];
+ wxStrcpy(tmp2, m_printData.GetFilename());
+ wxStrcat (tmp2, _T(".ps"));
m_printData.SetFilename(tmp2);
}
- else if ((m_printData.GetFilename() == "") && (m_printData.GetPrintMode() == wxPRINT_MODE_FILE))
+ else if ((m_printData.GetFilename() == _T("")) && (m_printData.GetPrintMode() == wxPRINT_MODE_FILE))
{
- wxString file = wxSaveFileSelector (_("PostScript"), "ps");
+ wxString file = wxSaveFileSelector (_("PostScript"), _T("ps"));
if ( file.IsEmpty() )
{
m_ok = FALSE;
void wxPostScriptDC::SetClippingRegion (long x, long y, long w, long h)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (m_clipping) return;
void wxPostScriptDC::DestroyClippingRegion()
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
wxDC::DestroyClippingRegion();
void wxPostScriptDC::Clear()
{
- wxFAIL_MSG( "wxPostScriptDC::Clear not implemented." );
+ wxFAIL_MSG( _T("wxPostScriptDC::Clear not implemented.") );
}
-void wxPostScriptDC::FloodFill (long WXUNUSED(x), long WXUNUSED(y), const wxColour &WXUNUSED(col), int WXUNUSED(style))
+void wxPostScriptDC::DoFloodFill (long WXUNUSED(x), long WXUNUSED(y), const wxColour &WXUNUSED(col), int WXUNUSED(style))
{
- wxFAIL_MSG( "wxPostScriptDC::FloodFill not implemented." );
+ wxFAIL_MSG( _T("wxPostScriptDC::FloodFill not implemented.") );
}
-bool wxPostScriptDC::GetPixel (long WXUNUSED(x), long WXUNUSED(y), wxColour * WXUNUSED(col)) const
+bool wxPostScriptDC::DoGetPixel (long WXUNUSED(x), long WXUNUSED(y), wxColour * WXUNUSED(col)) const
{
- wxFAIL_MSG( "wxPostScriptDC::GetPixel not implemented." );
+ wxFAIL_MSG( _T("wxPostScriptDC::GetPixel not implemented.") );
return FALSE;
}
-void wxPostScriptDC::CrossHair (long WXUNUSED(x), long WXUNUSED(y))
+void wxPostScriptDC::DoCrossHair (long WXUNUSED(x), long WXUNUSED(y))
{
- wxFAIL_MSG( "wxPostScriptDC::CrossHair not implemented." );
+ wxFAIL_MSG( _T("wxPostScriptDC::CrossHair not implemented.") );
}
-void wxPostScriptDC::DrawLine (long x1, long y1, long x2, long y2)
+void wxPostScriptDC::DoDrawLine (long x1, long y1, long x2, long y2)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (m_pen.GetStyle() == wxTRANSPARENT) return;
#define RAD2DEG 57.29577951308
-void wxPostScriptDC::DrawArc (long x1, long y1, long x2, long y2, long xc, long yc)
+void wxPostScriptDC::DoDrawArc (long x1, long y1, long x2, long y2, long xc, long yc)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
long dx = x1 - xc;
long dy = y1 - yc;
CalcBoundingBox( xc+radius, yc+radius );
}
-void wxPostScriptDC::DrawEllipticArc(long x,long y,long w,long h,double sa,double ea)
+void wxPostScriptDC::DoDrawEllipticArc(long x,long y,long w,long h,double sa,double ea)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (sa>=360 || sa<=-360) sa=sa-int(sa/360)*360;
if (ea>=360 || ea<=-360) ea=ea-int(ea/360)*360;
}
}
-void wxPostScriptDC::DrawPoint (long x, long y)
+void wxPostScriptDC::DoDrawPoint (long x, long y)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (m_pen.GetStyle() == wxTRANSPARENT) return;
CalcBoundingBox( x, y );
}
-void wxPostScriptDC::DrawPolygon (int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle))
+void wxPostScriptDC::DoDrawPolygon (int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle))
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (n <= 0) return;
}
}
-void wxPostScriptDC::DrawLines (int n, wxPoint points[], long xoffset, long yoffset)
+void wxPostScriptDC::DoDrawLines (int n, wxPoint points[], long xoffset, long yoffset)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (m_pen.GetStyle() == wxTRANSPARENT)
return;
*m_pstream << "stroke\n";
}
-void wxPostScriptDC::DrawRectangle (long x, long y, long width, long height)
+void wxPostScriptDC::DoDrawRectangle (long x, long y, long width, long height)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (m_brush.GetStyle () != wxTRANSPARENT)
{
}
}
-void wxPostScriptDC::DrawRoundedRectangle (long x, long y, long width, long height, double radius)
+void wxPostScriptDC::DoDrawRoundedRectangle (long x, long y, long width, long height, double radius)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (radius < 0.0)
{
}
}
-void wxPostScriptDC::DrawEllipse (long x, long y, long width, long height)
+void wxPostScriptDC::DoDrawEllipse (long x, long y, long width, long height)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (m_brush.GetStyle () != wxTRANSPARENT)
{
}
}
-void wxPostScriptDC::DrawIcon( const wxIcon& icon, long x, long y )
+void wxPostScriptDC::DoDrawIcon( const wxIcon& icon, long x, long y )
{
DrawBitmap( icon, x, y, TRUE );
}
-void wxPostScriptDC::DrawBitmap( const wxBitmap& bitmap, long x, long y, bool WXUNUSED(useMask) )
+void wxPostScriptDC::DoDrawBitmap( const wxBitmap& bitmap, long x, long y, bool WXUNUSED(useMask) )
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (!bitmap.Ok()) return;
{
for (int i = 0; i < ww; i++)
{
- char buffer[5];
+ wxChar buffer[5];
buffer[2] = 0;
wxDecToHex( image.GetRed(i,j), buffer );
*m_pstream << buffer;
void wxPostScriptDC::SetFont( const wxFont& font )
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (!font.Ok()) return;
void wxPostScriptDC::SetPen( const wxPen& pen )
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (!pen.Ok()) return;
if (!(red == m_currentRed && green == m_currentGreen && blue == m_currentBlue))
{
- long redPS = (long) (((int) red) / 255.0);
- long bluePS = (long) (((int) blue) / 255.0);
- long greenPS = (long) (((int) green) / 255.0);
-
+ float redPS = (float)(red) / 255.0;
+ float bluePS = (float)(blue) / 255.0;
+ float greenPS = (float)(green) / 255.0;
*m_pstream << redPS << " " << greenPS << " " << bluePS << " setrgbcolor\n";
m_currentRed = red;
void wxPostScriptDC::SetBrush( const wxBrush& brush )
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (!brush.Ok()) return;
m_brush = brush;
// Brush colour
- unsigned char red = m_brush.GetColour ().Red ();
- unsigned char blue = m_brush.GetColour ().Blue ();
- unsigned char green = m_brush.GetColour ().Green ();
+ unsigned char red = m_brush.GetColour().Red();
+ unsigned char blue = m_brush.GetColour().Blue();
+ unsigned char green = m_brush.GetColour().Green();
if (!m_colour)
{
if (!(red == m_currentRed && green == m_currentGreen && blue == m_currentBlue))
{
- long redPS = (long) (((int) red) / 255.0);
- long bluePS = (long) (((int) blue) / 255.0);
- long greenPS = (long) (((int) green) / 255.0);
+ float redPS = (float)(red) / 255.0;
+ float bluePS = (float)(blue) / 255.0;
+ float greenPS = (float)(green) / 255.0;
*m_pstream << redPS << " " << greenPS << " " << bluePS << " setrgbcolor\n";
m_currentRed = red;
m_currentBlue = blue;
}
}
-void wxPostScriptDC::DrawText( const wxString& text, long x, long y, bool WXUNUSED(use16bit) )
+void wxPostScriptDC::DoDrawText( const wxString& text, long x, long y )
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
SetFont( m_font );
if (!(red == m_currentRed && green == m_currentGreen && blue == m_currentBlue))
{
- long redPS = (long) (((int) red) / 255.0);
- long bluePS = (long) (((int) blue) / 255.0);
- long greenPS = (long) (((int) green) / 255.0);
+ float redPS = (float)(red) / 255.0;
+ float bluePS = (float)(blue) / 255.0;
+ float greenPS = (float)(green) / 255.0;
*m_pstream << redPS << " " << greenPS << " " << bluePS << " setrgbcolor\n";
m_currentRed = red;
*m_pstream << XLOG2DEV(x) << " " << YLOG2DEV(by) << " moveto\n";
*m_pstream << "(";
- int len = strlen ((char *)(const char *)text);
+ const wxWX2MBbuf textbuf = text.mb_str();
+ int len = strlen (textbuf);
int i;
for (i = 0; i < len; i++)
{
- int c = (unsigned char) text[i];
+ int c = (unsigned char) textbuf[i];
if ( c == ')' || c == '(' || c == '\\')
{
*m_pstream << "\\" << (char) c;
void wxPostScriptDC::SetLogicalFunction (int WXUNUSED(function))
{
- wxFAIL_MSG( "wxPostScriptDC::SetLogicalFunction not implemented." );
+ wxFAIL_MSG( _T("wxPostScriptDC::SetLogicalFunction not implemented.") );
}
-void wxPostScriptDC::DrawSpline( wxList *points )
+void wxPostScriptDC::DoDrawSpline( wxList *points )
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
SetPen( m_pen );
*m_pstream << XLOG2DEV((long)c) << " " << YLOG2DEV((long)d) << " lineto stroke\n";
}
-long wxPostScriptDC::GetCharWidth ()
+long wxPostScriptDC::GetCharWidth() const
{
// Chris Breeze: reasonable approximation using wxMODERN/Courier
return (long) (GetCharHeight() * 72.0 / 120.0);
void wxPostScriptDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
m_signX = (xLeftRight ? 1 : -1);
m_signY = (yBottomUp ? 1 : -1);
void wxPostScriptDC::SetDeviceOrigin( long x, long y )
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
int h = 0;
int w = 0;
wxDC::SetDeviceOrigin( x, h-y );
}
-void wxPostScriptDC::GetSize(int* width, int* height) const
+void wxPostScriptDC::DoGetSize(int* width, int* height) const
{
wxPaperSize id = m_printData.GetPaperId();
}
}
-void wxPostScriptDC::GetSizeMM(int *width, int *height) const
+void wxPostScriptDC::DoGetSizeMM(int *width, int *height) const
{
wxPaperSize id = m_printData.GetPaperId();
bool wxPostScriptDC::StartDoc (const wxString& message)
{
- wxCHECK_MSG( m_ok, FALSE, "invalid postscript dc" );
+ wxCHECK_MSG( m_ok, FALSE, _T("invalid postscript dc") );
if (m_printData.GetFilename() == "")
{
m_ok = TRUE;
}
- m_pstream = new ofstream (m_printData.GetFilename());
+ m_pstream = new ofstream (m_printData.GetFilename().fn_str());
if (!m_pstream || !m_pstream->good())
{
void wxPostScriptDC::EndDoc ()
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (m_clipping)
{
m_pstream = (ofstream *) NULL;
}
- char *header_file = wxGetTempFileName("ps");
+ wxChar *header_file = wxGetTempFileName("ps");
- m_pstream = new ofstream( header_file );
+ m_pstream = new ofstream( wxConv_file.cWX2MB(header_file) );
*m_pstream << "%!PS-Adobe-2.0\n"; /* PostScript magic strings */
- *m_pstream << "%%Title: " << (const char *) m_title << "\n";
+ *m_pstream << "%%Title: " << m_title.mb_str() << "\n";
*m_pstream << "%%Creator: " << wxTheApp->argv[0] << "\n";
- *m_pstream << "%%CreationDate: " << wxNow() << "\n";
+ *m_pstream << "%%CreationDate: " << wxNow().mb_str() << "\n";
- char userID[256];
+ wxChar userID[256];
if ( wxGetEmailAddress(userID, sizeof(userID)) )
{
- *m_pstream << "%%For: " << (char *)userID;
- char userName[245];
+ *m_pstream << "%%For: " << MBSTRINGCAST wxConv_libc.cWX2MB(userID);
+ wxChar userName[245];
if (wxGetUserName(userName, sizeof(userName)))
- *m_pstream << " (" << (char *)userName << ")";
+ *m_pstream << " (" << MBSTRINGCAST wxConv_libc.cWX2MB(userName) << ")";
*m_pstream << "\n";
}
else if ( wxGetUserName(userID, sizeof(userID)) )
{
- *m_pstream << "%%For: " << (char *)userID << "\n";
+ *m_pstream << "%%For: " << MBSTRINGCAST wxConv_libc.cWX2MB(userID) << "\n";
}
// THE FOLLOWING HAS BEEN CONTRIBUTED BY Andy Fyfe <andy@hyperparallel.com>
delete m_pstream;
m_pstream = (ofstream *) NULL;
- char *tmp_file = wxGetTempFileName("ps");
+ wxChar *tmp_file = wxGetTempFileName("ps");
// Paste header Before wx_printer_file
wxConcatFiles (header_file, m_printData.GetFilename(), tmp_file);
case wxPRINT_MODE_PREVIEW:
{
- char *argv[3];
- argv[0] = (char*) (const char*) previewCommand;
- argv[1] = (char*) (const char*) filename;
- argv[2] = (char*) (char *) NULL;
+ wxChar *argv[3];
+ argv[0] = WXSTRINGCAST previewCommand;
+ argv[1] = WXSTRINGCAST filename;
+ argv[2] = (wxChar*) NULL;
wxExecute (argv, TRUE);
wxRemoveFile(m_printData.GetFilename());
}
case wxPRINT_MODE_PRINTER:
{
- char *argv[4];
+ wxChar *argv[4];
int argc = 0;
- argv[argc++] = (char*) (const char*) printerCommand;
+ argv[argc++] = WXSTRINGCAST printerCommand;
// !SM! If we simply assign to argv[1] here, if printer options
// are blank, we get an annoying and confusing message from lpr.
- char * opts = (char*) (const char*) printerOptions;
+ wxChar * opts = WXSTRINGCAST printerOptions;
if (opts && *opts)
argv[argc++] = opts;
- argv[argc++] = (char*) (const char*) filename;
- argv[argc++] = (char *) NULL;
+ argv[argc++] = WXSTRINGCAST filename;
+ argv[argc++] = (wxChar *) NULL;
wxExecute (argv, TRUE);
wxRemoveFile(filename);
}
void wxPostScriptDC::StartPage ()
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
*m_pstream << "%%Page: " << (wxPageNumber++) << "\n";
void wxPostScriptDC::EndPage ()
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
*m_pstream << "showpage\n";
}
-bool wxPostScriptDC::Blit( long xdest, long ydest,
+bool wxPostScriptDC::DoBlit( long xdest, long ydest,
long fwidth, long fheight,
wxDC *source,
long xsrc, long ysrc,
int rop, bool WXUNUSED(useMask) )
{
- wxCHECK_MSG( m_ok && m_pstream, FALSE, "invalid postscript dc" );
+ wxCHECK_MSG( m_ok && m_pstream, FALSE, _T("invalid postscript dc") );
- wxCHECK_MSG( source, FALSE, "invalid source dc" );
+ wxCHECK_MSG( source, FALSE, _T("invalid source dc") );
/* blit into a bitmap */
return TRUE;
}
-long wxPostScriptDC::GetCharHeight()
+long wxPostScriptDC::GetCharHeight() const
{
if (m_font.Ok())
return m_font.GetPointSize();
}
void wxPostScriptDC::GetTextExtent( const wxString& string, long *x, long *y,
- long *descent, long *externalLeading, wxFont *theFont,
- bool WXUNUSED(use16) )
+ long *descent, long *externalLeading, wxFont *theFont ) const
{
wxFont *fontToUse = theFont;
if (!fontToUse) fontToUse = (wxFont*) &m_font;
- wxCHECK_RET( fontToUse, "GetTextExtent: no font defined" );
- wxCHECK_RET( x, "GetTextExtent: x == NULL" );
- wxCHECK_RET( y, "GetTextExtent: y == NULL" );
+ wxCHECK_RET( fontToUse, _T("GetTextExtent: no font defined") );
+ wxCHECK_RET( x, _T("GetTextExtent: x == NULL") );
+ wxCHECK_RET( y, _T("GetTextExtent: y == NULL") );
+
+ const wxWX2MBbuf strbuf = string.mb_str();
#if !USE_AFM_FOR_POSTSCRIPT
/* Provide a VERY rough estimate (avoid using it).
{
height = fontToUse->GetPointSize();
}
- *x = strlen (string) * height * 72 / 120;
+ *x = strlen (strbuf) * height * 72 / 120;
*y = (long) (height * 1.32); /* allow for descender */
if (descent) *descent = 0;
if (externalLeading) *externalLeading = 0;
/* get the directory of the AFM files */
char afmName[256];
afmName[0] = 0;
- wxString fmPath(m_printData.GetFontMetricPath());
- if (fmPath != "") strcpy( afmName, (const char*) fmPath );
+
+ if (!m_printData.GetFontMetricPath().IsEmpty())
+ {
+ strcpy( afmName, m_printData.GetFontMetricPath().mb_str() )
+ }
/* 2. open and process the file
/ a short explanation of the AFM format:
strcat(afmName,name);
strcat(afmName,".afm");
FILE *afmFile = fopen(afmName,"r");
- if ( afmFile==NULL )
+
+#ifdef __UNIX__
+ if (afmFile==NULL)
+ {
+ strcpy( afmName, "/usr/local/share/wx/gs_afm/" );
+ strcat(afmName,name);
+ strcat(afmName,".afm");
+ FILE *afmFile = fopen(afmName,"r");
+ }
+
+ if (afmFile==NULL)
+ {
+ strcpy( afmName, "/usr/share/wx/gs_afm/" );
+ strcat(afmName,name);
+ strcat(afmName,".afm");
+ FILE *afmFile = fopen(afmName,"r");
+ }
+#endif
+
+ if (afmFile==NULL)
{
wxLogDebug( "GetTextExtent: can't open AFM file '%s'\n", afmName );
wxLogDebug( " using approximate values\n");
long widthSum=0;
long height=Size; /* by default */
unsigned char *p;
- for(p=(unsigned char *)(const char *)string; *p; p++)
+ for(p=(unsigned char *)strbuf; *p; p++)
{
if(lastWidths[*p]== INT_MIN)
{