/////////////////////////////////////////////////////////////////////////////
-// Name: dcpsg.cpp
+// Name: src/generic/dcpsg.cpp
// Purpose: Generic wxPostScriptDC implementation
// Author: Julian Smart, Robert Roebling, Markus Holzhem
// Modified by:
#include "wx/paper.h"
#include "wx/filefn.h"
#include "wx/math.h"
+#include "wx/stdpaths.h"
#ifdef __WXMSW__
/* Draw rectangle anticlockwise */
PsPrintf( wxT("newpath\n")
wxT("%d %d %d 90 180 arc\n")
- wxT("%d %d moveto\n")
+ wxT("%d %d lineto\n")
wxT("%d %d %d 180 270 arc\n")
wxT("%d %d lineto\n")
wxT("%d %d %d 270 0 arc\n")
wxT("closepath\n")
wxT("fill\n"),
LogicalToDeviceX(x + rad), LogicalToDeviceY(y + rad), LogicalToDeviceXRel(rad),
- LogicalToDeviceX(x), LogicalToDeviceY(y + rad),
+ LogicalToDeviceX(x), LogicalToDeviceY(y + height - rad),
LogicalToDeviceX(x + rad), LogicalToDeviceY(y + height - rad), LogicalToDeviceXRel(rad),
LogicalToDeviceX(x + width - rad), LogicalToDeviceY(y + height),
LogicalToDeviceX(x + width - rad), LogicalToDeviceY(y + height - rad), LogicalToDeviceXRel(rad),
/* Draw rectangle anticlockwise */
PsPrintf( wxT("newpath\n")
wxT("%d %d %d 90 180 arc\n")
- wxT("%d %d moveto\n")
+ wxT("%d %d lineto\n")
wxT("%d %d %d 180 270 arc\n")
wxT("%d %d lineto\n")
wxT("%d %d %d 270 0 arc\n")
wxT("closepath\n")
wxT("stroke\n"),
LogicalToDeviceX(x + rad), LogicalToDeviceY(y + rad), LogicalToDeviceXRel(rad),
- LogicalToDeviceX(x), LogicalToDeviceY(y + rad),
+ LogicalToDeviceX(x), LogicalToDeviceY(y + height - rad),
LogicalToDeviceX(x + rad), LogicalToDeviceY(y + height - rad), LogicalToDeviceXRel(rad),
LogicalToDeviceX(x + width - rad), LogicalToDeviceY(y + height),
LogicalToDeviceX(x + width - rad), LogicalToDeviceY(y + height - rad), LogicalToDeviceXRel(rad),
wxFAIL_MSG( wxT("wxPostScriptDC::SetLogicalFunction not implemented.") );
}
+#if wxUSE_SPLINES
void wxPostScriptDC::DoDrawSpline( wxList *points )
{
wxCHECK_RET( m_ok, wxT("invalid postscript dc") );
wxT("stroke\n"),
LogicalToDeviceX((wxCoord)c), LogicalToDeviceY((wxCoord)d) );
}
+#endif // wxUSE_SPLINES
wxCoord wxPostScriptDC::GetCharWidth() const
{
m_signX = (xLeftRight ? 1 : -1);
m_signY = (yBottomUp ? 1 : -1);
- // FIXME there is no such function in MSW nor in OS2/PM
-#if !defined(__WXMSW__) && !defined(__WXPM__)
ComputeScaleAndOrigin();
-#endif
}
void wxPostScriptDC::SetDeviceOrigin( wxCoord x, wxCoord y )
m_printData.SetFilename(filename);
}
- // FIXME: use fn_str() here under Unicode?
- m_pstream = wxFopen( m_printData.GetFilename().c_str(), wxT("w+") );
+ m_pstream = wxFopen( m_printData.GetFilename(), wxT("w+") );
if (!m_pstream)
{
FILE *afmFile = NULL;
+ // Get the directory of the AFM files
+ wxString afmName;
+
+ // VZ: I don't know if the cast always works under Unix but it clearly
+ // never does under Windows where the pointer is
+ // wxWindowsPrintNativeData and so calling GetFontMetricPath() on
+ // it just crashes
+#ifndef __WIN32__
wxPostScriptPrintNativeData *data =
(wxPostScriptPrintNativeData *) m_printData.GetNativeData();
- // Get the directory of the AFM files
- wxString afmName;
if (!data->GetFontMetricPath().empty())
{
afmName = data->GetFontMetricPath();
afmName << wxFILE_SEP_PATH << name;
- afmFile = wxFopen(afmName,wxT("r"));
}
+#endif // __WIN32__
-#if defined(__UNIX__) && !defined(__VMS__)
- if (afmFile==NULL)
+ if ( !afmName.empty() )
+ afmFile = wxFopen(afmName, wxT("r"));
+
+ if ( !afmFile )
{
+ }
+
+ if ( !afmFile )
+ {
+#if defined(__UNIX__) && !defined(__VMS__)
afmName = wxGetDataDir();
+#else // !__UNIX__
+ afmName = wxStandardPaths::Get().GetDataDir();
+#endif // __UNIX__/!__UNIX__
+
afmName << wxFILE_SEP_PATH
#if defined(__LINUX__) || defined(__FREEBSD__)
<< wxT("gs_afm") << wxFILE_SEP_PATH
<< name;
afmFile = wxFopen(afmName,wxT("r"));
}
-#endif
/* 2. open and process the file
/ a short explanation of the AFM format: