X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f50a1c3d667fb948bfbdcbd4b3021d896c6635cd..b11729f1496ef0bba192a00af430eb46a581e97d:/src/generic/dcpsg.cpp diff --git a/src/generic/dcpsg.cpp b/src/generic/dcpsg.cpp index c978aa2b24..293699c8ca 100644 --- a/src/generic/dcpsg.cpp +++ b/src/generic/dcpsg.cpp @@ -40,6 +40,7 @@ #include "wx/paper.h" #include "wx/filefn.h" #include "wx/math.h" +#include "wx/stdpaths.h" #ifdef __WXMSW__ @@ -744,7 +745,7 @@ void wxPostScriptDC::DoDrawRoundedRectangle (wxCoord x, wxCoord y, wxCoord width /* 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") @@ -754,7 +755,7 @@ void wxPostScriptDC::DoDrawRoundedRectangle (wxCoord x, wxCoord y, wxCoord width 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), @@ -773,7 +774,7 @@ void wxPostScriptDC::DoDrawRoundedRectangle (wxCoord x, wxCoord y, wxCoord width /* 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") @@ -783,7 +784,7 @@ void wxPostScriptDC::DoDrawRoundedRectangle (wxCoord x, wxCoord y, wxCoord width 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), @@ -1561,7 +1562,7 @@ bool wxPostScriptDC::StartDoc( const wxString& message ) m_printData.SetFilename(filename); } - m_pstream = wxFopen( m_printData.GetFilename().fn_str(), wxT("w+") ); + m_pstream = wxFopen( m_printData.GetFilename(), wxT("w+") ); if (!m_pstream) { @@ -1962,22 +1963,39 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string, 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.fn_str(),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 @@ -1985,9 +2003,8 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string, << wxT("afm") << wxFILE_SEP_PATH #endif << name; - afmFile = wxFopen(afmName.fn_str(),wxT("r")); + afmFile = wxFopen(afmName,wxT("r")); } -#endif /* 2. open and process the file / a short explanation of the AFM format: