X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/01b5396fcee869baf17192225451c9e310fe53c2..4979a56c780fceaa115d055d3c09f5980531c5d3:/src/generic/dcpsg.cpp diff --git a/src/generic/dcpsg.cpp b/src/generic/dcpsg.cpp index f59a161f7a..293699c8ca 100644 --- a/src/generic/dcpsg.cpp +++ b/src/generic/dcpsg.cpp @@ -39,8 +39,8 @@ #include "wx/generic/prntdlgg.h" #include "wx/paper.h" #include "wx/filefn.h" - -#include +#include "wx/math.h" +#include "wx/stdpaths.h" #ifdef __WXMSW__ @@ -745,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") @@ -755,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), @@ -774,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") @@ -784,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), @@ -1474,10 +1474,7 @@ void wxPostScriptDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp ) 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 ) @@ -1556,7 +1553,7 @@ wxSize wxPostScriptDC::GetPPI(void) const bool wxPostScriptDC::StartDoc( const wxString& message ) { wxCHECK_MSG( m_ok, false, wxT("invalid postscript dc") ); - + if (m_printData.GetPrintMode() != wxPRINT_MODE_STREAM ) { if (m_printData.GetFilename() == wxEmptyString) @@ -1565,8 +1562,7 @@ bool wxPostScriptDC::StartDoc( const wxString& message ) 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) { @@ -1718,7 +1714,7 @@ void wxPostScriptDC::EndDoc () #endif #ifndef __WXMSW__ - wxPostScriptPrintNativeData *data = + wxPostScriptPrintNativeData *data = (wxPostScriptPrintNativeData *) m_printData.GetNativeData(); if (m_ok && (m_printData.GetPrintMode() == wxPRINT_MODE_PRINTER)) @@ -1755,7 +1751,7 @@ void wxPostScriptDC::StartPage() wxCoord translate_x, translate_y; double scale_x, scale_y; - wxPostScriptPrintNativeData *data = + wxPostScriptPrintNativeData *data = (wxPostScriptPrintNativeData *) m_printData.GetNativeData(); translate_x = (wxCoord)data->GetPrinterTranslateX(); @@ -1833,7 +1829,7 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string, wxCHECK_RET( fontToUse, wxT("GetTextExtent: no font defined") ); - if (string.IsEmpty()) + if (string.empty()) { if (x) (*x) = 0; if (y) (*y) = 0; @@ -1967,22 +1963,39 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string, FILE *afmFile = NULL; - wxPostScriptPrintNativeData *data = - (wxPostScriptPrintNativeData *) m_printData.GetNativeData(); - // Get the directory of the AFM files wxString afmName; - if (!data->GetFontMetricPath().IsEmpty()) + + // 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(); + + 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 @@ -1992,7 +2005,6 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string, << name; afmFile = wxFopen(afmName,wxT("r")); } -#endif /* 2. open and process the file / a short explanation of the AFM format: @@ -2019,8 +2031,10 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string, /* init the widths array */ for(int i=0; i<256; i++) lastWidths[i] = INT_MIN; /* some variables for holding parts of a line */ - char cString[10],semiString[10],WXString[10],descString[20]; - char upString[30], utString[30], encString[50]; + char cString[10], semiString[10], WXString[10]; + char descString[20]; + char upString[30], utString[30]; + char encString[50]; char line[256]; int ascii,cWidth; /* read in the file and parse it */ @@ -2187,9 +2201,9 @@ void wxPostScriptDC::PsPrintf( const wxChar* fmt, ... ) void wxPostScriptDC::PsPrint( const char* psdata ) { - wxPostScriptPrintNativeData *data = + wxPostScriptPrintNativeData *data = (wxPostScriptPrintNativeData *) m_printData.GetNativeData(); - + switch (m_printData.GetPrintMode()) { #if wxUSE_STREAMS @@ -2212,9 +2226,9 @@ void wxPostScriptDC::PsPrint( const char* psdata ) void wxPostScriptDC::PsPrint( int ch ) { - wxPostScriptPrintNativeData *data = + wxPostScriptPrintNativeData *data = (wxPostScriptPrintNativeData *) m_printData.GetNativeData(); - + switch (m_printData.GetPrintMode()) { #if wxUSE_STREAMS @@ -2223,7 +2237,7 @@ void wxPostScriptDC::PsPrint( int ch ) { wxOutputStream* outputstream = data->GetOutputStream(); wxCHECK_RET( outputstream, wxT("invalid outputstream") ); - outputstream->PutC( ch ); + outputstream->PutC( (char)ch ); } break; #endif // wxUSE_STREAMS