X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/733b25e1a9be8b029db5aa0ca16f58d9991efdd4..c97e7fa8dbda704c9c9cdb61c22ebdf9b692e114:/src/generic/dcpsg.cpp diff --git a/src/generic/dcpsg.cpp b/src/generic/dcpsg.cpp index 0db195a934..963735393b 100644 --- a/src/generic/dcpsg.cpp +++ b/src/generic/dcpsg.cpp @@ -1176,7 +1176,9 @@ void wxPostScriptDC::DoDrawText( const wxString& text, wxCoord x, wxCoord y ) GetTextExtent(text, &text_w, &text_h, &text_descent); - SetFont( m_font ); + // VZ: this seems to be unnecessary, so taking it out for now, if it + // doesn't create any problems, remove this comment entirely + //SetFont( m_font ); if (m_textForegroundColour.Ok()) { @@ -1226,10 +1228,6 @@ void wxPostScriptDC::DoDrawText( const wxString& text, wxCoord x, wxCoord y ) wxCoord by = y + size - text_descent; // baseline fprintf( m_pstream, "%d %d moveto\n", XLOG2DEV(x), YLOG2DEV(by) ); - /* I don't know how to write char to a stream, so I use a mini string */ - char tmpbuf[2]; - tmpbuf[1] = 0; - fprintf( m_pstream, "(" ); const wxWX2MBbuf textbuf = text.mb_str(); int len = strlen(textbuf); @@ -1241,8 +1239,7 @@ void wxPostScriptDC::DoDrawText( const wxString& text, wxCoord x, wxCoord y ) { /* Cope with special characters */ fprintf( m_pstream, "\\" ); - tmpbuf[0] = (char) c; - fprintf( m_pstream, tmpbuf ); + fputc(c, m_pstream); } else if ( c >= 128 ) { @@ -1251,8 +1248,7 @@ void wxPostScriptDC::DoDrawText( const wxString& text, wxCoord x, wxCoord y ) } else { - tmpbuf[0] = (char) c; - fprintf( m_pstream, tmpbuf ); + fputc(c, m_pstream); } } @@ -1349,10 +1345,6 @@ void wxPostScriptDC::DoDrawRotatedText( const wxString& text, wxCoord x, wxCoord if (buffer[i] == ',') buffer[i] = '.'; fprintf(m_pstream, buffer); - /* I don't know how to write char to a stream, so I use a mini string */ - char tmpbuf[2]; - tmpbuf[1] = 0; - fprintf( m_pstream, "(" ); const wxWX2MBbuf textbuf = text.mb_str(); int len = strlen(textbuf); @@ -1363,8 +1355,7 @@ void wxPostScriptDC::DoDrawRotatedText( const wxString& text, wxCoord x, wxCoord { /* Cope with special characters */ fprintf( m_pstream, "\\" ); - tmpbuf[0] = (char) c; - fprintf( m_pstream, tmpbuf ); + fputc(c, m_pstream); } else if ( c >= 128 ) { @@ -1373,8 +1364,7 @@ void wxPostScriptDC::DoDrawRotatedText( const wxString& text, wxCoord x, wxCoord } else { - tmpbuf[0] = (char) c; - fprintf( m_pstream, tmpbuf ); + fputc(c, m_pstream); } } @@ -1678,10 +1668,26 @@ void wxPostScriptDC::EndDoc () // Compute the bounding box. Note that it is in the default user // coordinate system, thus we have to convert the values. - wxCoord llx = (wxCoord) ((XLOG2DEV(m_minX)+wx_printer_translate_x)*wx_printer_scale_x); - wxCoord lly = (wxCoord) ((YLOG2DEV(m_minY)+wx_printer_translate_y)*wx_printer_scale_y); - wxCoord urx = (wxCoord) ((XLOG2DEV(m_maxX)+wx_printer_translate_x)*wx_printer_scale_x); - wxCoord ury = (wxCoord) ((YLOG2DEV(m_maxY)+wx_printer_translate_y)*wx_printer_scale_y); + wxCoord minX = (wxCoord) XLOG2DEV(m_minX); + wxCoord minY = (wxCoord) YLOG2DEV(m_minY); + wxCoord maxX = (wxCoord) XLOG2DEV(m_maxX); + wxCoord maxY = (wxCoord) YLOG2DEV(m_maxY); + + // LOG2DEV may have changed the minimum to maximum vice versa + if ( minX > maxX ) { wxCoord tmp = minX; minX = maxX; maxX = tmp; } + if ( minY > maxY ) { wxCoord tmp = minY; minY = maxY; maxY = tmp; } + + // account for used scaling (boundingbox is before scaling in ps-file) + double scale_x = m_printData.GetPrinterScaleX() / ms_PSScaleFactor; + double scale_y = m_printData.GetPrinterScaleY() / ms_PSScaleFactor; + + wxCoord llx, lly, urx, ury; + llx = (wxCoord) ((minX+wx_printer_translate_x)*scale_x); + lly = (wxCoord) ((minY+wx_printer_translate_y)*scale_y); + urx = (wxCoord) ((maxX+wx_printer_translate_x)*scale_x); + ury = (wxCoord) ((maxY+wx_printer_translate_y)*scale_y); + // (end of bounding box computation) + // If we're landscape, our sense of "x" and "y" is reversed. if (m_printData.GetOrientation() == wxLANDSCAPE)