diff options
author | Chris Sherlock <chris.sherlock79@gmail.com> | 2016-01-01 17:52:50 +1100 |
---|---|---|
committer | Chris Sherlock <chris.sherlock79@gmail.com> | 2016-01-01 18:51:23 +0000 |
commit | 264e6c04afaff96dda6cd510c1da90bb519a1f66 (patch) | |
tree | 8ad63fa1ad70136ee105b91a054f128bd4522281 /vcl/source/gdi/pdfwriter_impl.cxx | |
parent | 820eeba6772a356cf57b9d1f4d114122f6a63abb (diff) |
vcl: remove poor-man's RTTI in PhysicalFontFace
The *only* things relying on the in-built magic number are PDFFontCache
and PDFWriterImpl. PDFWriterImpl::emitBuiltinFont has as its first
parameter a const PhysicalFontFace*, but this is only called upon by
PDFWriterImpl::emitFonts, which instantiates an ImplPdfBuiltinFontData
object from a built-in font map... so basically it is always guaranteed
to get a ImplPdfBuiltinFontData object. ImplPdfBuiltinFontData derives
from PhysicalFontFace, so to prevent the need to check the class being
used is a ImplPdfBuiltinFontData, just make emitBuiltinFont require as
it's first parameter ImplPdfBuiltinFontData!
Unfortunately, we can't get around RTTI completely, because
PDFFontCache::FontIdentifier requires a way of distinguishing between
two different PhysicalFontFaces...
Change-Id: I74c8cd294580bbecd12dd2427ac405f97a7e7f7e
Reviewed-on: https://gerrit.libreoffice.org/21030
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com>
Diffstat (limited to 'vcl/source/gdi/pdfwriter_impl.cxx')
-rw-r--r-- | vcl/source/gdi/pdfwriter_impl.cxx | 28 |
1 files changed, 2 insertions, 26 deletions
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index 9e8428f372a9..9ccdbd091125 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -2239,29 +2239,6 @@ OutputDevice* PDFWriterImpl::getReferenceDevice() return m_pReferenceDevice; } -class ImplPdfBuiltinFontData : public PhysicalFontFace -{ -private: - const PDFWriterImpl::BuiltinFont& mrBuiltin; - -public: - static int const PDF_FONT_MAGIC = int(0xBDFF0A1C); - explicit ImplPdfBuiltinFontData( const PDFWriterImpl::BuiltinFont& ); - const PDFWriterImpl::BuiltinFont& GetBuiltinFont() const { return mrBuiltin; } - - virtual PhysicalFontFace* Clone() const override { return new ImplPdfBuiltinFontData(*this); } - virtual ImplFontEntry* CreateFontInstance( FontSelectPattern& ) const override; - virtual sal_IntPtr GetFontId() const override { return reinterpret_cast<sal_IntPtr>(&mrBuiltin); } -}; - -inline const ImplPdfBuiltinFontData* GetPdfFontData( const PhysicalFontFace* pFontData ) -{ - const ImplPdfBuiltinFontData* pFD = nullptr; - if( pFontData && pFontData->CheckMagic( ImplPdfBuiltinFontData::PDF_FONT_MAGIC ) ) - pFD = static_cast<const ImplPdfBuiltinFontData*>( pFontData ); - return pFD; -} - static ImplFontAttributes GetDevFontAttributes( const PDFWriterImpl::BuiltinFont& rBuiltin ) { ImplFontAttributes aDFA; @@ -2283,7 +2260,7 @@ static ImplFontAttributes GetDevFontAttributes( const PDFWriterImpl::BuiltinFont } ImplPdfBuiltinFontData::ImplPdfBuiltinFontData( const PDFWriterImpl::BuiltinFont& rBuiltin ) -: PhysicalFontFace( GetDevFontAttributes(rBuiltin), PDF_FONT_MAGIC ), +: PhysicalFontFace( GetDevFontAttributes(rBuiltin) ), mrBuiltin( rBuiltin ) {} @@ -2938,9 +2915,8 @@ bool PDFWriterImpl::emitTilings() return true; } -sal_Int32 PDFWriterImpl::emitBuiltinFont( const PhysicalFontFace* pFont, sal_Int32 nFontObject ) +sal_Int32 PDFWriterImpl::emitBuiltinFont( const ImplPdfBuiltinFontData* pFD, sal_Int32 nFontObject ) { - const ImplPdfBuiltinFontData* pFD = GetPdfFontData( pFont ); if( !pFD ) return 0; const BuiltinFont& rBuiltinFont = pFD->GetBuiltinFont(); |