Optimize PostScript code generated by wxPostScriptDC

PostScript code to register (and re-encode) given font should be emitted only once. Once registered, the font is available in the entire document and there is no need to register it again.
This commit is contained in:
Artur Wieczorek
2017-02-20 21:56:33 +01:00
parent ef3c0c83af
commit b37884b2cb
3 changed files with 15 additions and 2 deletions

View File

@@ -126,6 +126,7 @@ All (GUI):
- Fix drawing rotated and/or underlined text on wxPostScriptDC.
- Support multiline strings in wxPostScriptDC::DrawText(), DrawRotatedText().
- Deprecate wxEVT_STC_KEY and wxEVT_STC_URIDROPPED events (NewPagodi).
- Optimize font registration in PostScript code emitted by wxPostScriptDC.
wxGTK:

View File

@@ -150,6 +150,7 @@ protected:
double m_underlineThickness;
wxPrintData m_printData;
double m_pageHeight;
wxArrayString m_definedPSFonts;
private:
wxDECLARE_DYNAMIC_CLASS(wxPostScriptDCImpl);

View File

@@ -1124,8 +1124,13 @@ void wxPostScriptDCImpl::SetFont( const wxFont& font )
if (!m_pstream)
return;
PsPrint( name );
PsPrint( " reencodeISO def\n" );
// Generate PS code to register the font only once.
if ( m_definedPSFonts.Index(name) == wxNOT_FOUND )
{
PsPrint( name );
PsPrint( " reencodeISO def\n" );
m_definedPSFonts.Add(name);
}
PsPrint( name );
PsPrint( " findfont\n" );
@@ -1784,6 +1789,9 @@ bool wxPostScriptDCImpl::StartDoc( const wxString& WXUNUSED(message) )
SetDeviceOrigin( 0,0 );
m_pageNumber = 1;
// Reset the list of fonts for which PS font registration code was generated.
m_definedPSFonts.Empty();
return true;
}
@@ -1802,6 +1810,9 @@ void wxPostScriptDCImpl::EndDoc ()
m_pstream = NULL;
}
// Reset the list of fonts for which PS font registration code was generated.
m_definedPSFonts.Empty();
#if 0
// THE FOLLOWING HAS BEEN CONTRIBUTED BY Andy Fyfe <andy@hyperparallel.com>
wxCoord wx_printer_translate_x, wx_printer_translate_y;