vcl/inc/PhysicalFontFace.hxx                   |    8 +++
 vcl/inc/qt5/Qt5FontFace.hxx                    |    4 -
 vcl/inc/quartz/salgdi.h                        |    4 -
 vcl/inc/unx/freetype_glyphcache.hxx            |   13 ++++-
 vcl/inc/win/salgdi.h                           |    4 -
 vcl/qt5/Qt5FontFace.cxx                        |    2 
 vcl/qt5/Qt5Graphics_Text.cxx                   |    5 --
 vcl/source/gdi/pdfbuildin_fonts.cxx            |   56 +++++++++++++++++--------
 vcl/source/gdi/pdfbuildin_fonts.hxx            |    5 +-
 vcl/unx/generic/glyphs/freetype_glyphcache.cxx |   11 +++-
 10 files changed, 79 insertions(+), 33 deletions(-)

New commits:
commit fb50c96b4207f7effb9e656ae9c8ec8d25d625ca
Author:     Jan-Marek Glogowski <glo...@fbihome.de>
AuthorDate: Mon Sep 7 23:56:20 2020 +0200
Commit:     Jan-Marek Glogowski <glo...@fbihome.de>
CommitDate: Tue Sep 15 06:41:41 2020 +0200

    VCL register common functions in PhysicalFontFace
    
    This makes GetFontCapabilities and GetFontChatMap members of the
    PhysicalFontFace. These are implemented in all the real font face
    classes anyway. Also provide dummies for the PDF buildin fonts.
    
    Change-Id: Icb8cb14480ce1e020977b8f69892095d787982ce
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102683
    Reviewed-by: Jan-Marek Glogowski <glo...@fbihome.de>
    Tested-by: Jenkins

diff --git a/vcl/inc/PhysicalFontFace.hxx b/vcl/inc/PhysicalFontFace.hxx
index 23af5be9169e..b6c0be37d99c 100644
--- a/vcl/inc/PhysicalFontFace.hxx
+++ b/vcl/inc/PhysicalFontFace.hxx
@@ -23,6 +23,7 @@
 #include <salhelper/simplereferenceobject.hxx>
 #include <rtl/ref.hxx>
 #include <vcl/dllapi.h>
+#include <vcl/fontcharmap.hxx>
 
 #include "fontattributes.hxx"
 
@@ -31,6 +32,11 @@ struct FontMatchStatus;
 class FontSelectPattern;
 class PhysicalFontFamily;
 
+namespace vcl
+{
+struct FontCapabilities;
+}
+
 struct FontMatchStatus
 {
 public:
@@ -59,6 +65,8 @@ public:
     int                     GetHeight() const           { return mnHeight; }
     int                     GetWidth() const            { return mnWidth; }
     virtual sal_IntPtr      GetFontId() const = 0;
+    virtual FontCharMapRef GetFontCharMap() const = 0;
+    virtual bool GetFontCapabilities(vcl::FontCapabilities&) const = 0;
 
     bool                    IsBetterMatch( const FontSelectPattern&, 
FontMatchStatus& ) const;
     sal_Int32               CompareWithSize( const PhysicalFontFace& ) const;
diff --git a/vcl/inc/qt5/Qt5FontFace.hxx b/vcl/inc/qt5/Qt5FontFace.hxx
index f9853af0f8c9..9c893d4f88c8 100644
--- a/vcl/inc/qt5/Qt5FontFace.hxx
+++ b/vcl/inc/qt5/Qt5FontFace.hxx
@@ -48,8 +48,8 @@ public:
     QFont CreateFont() const;
     int GetFontTable(const char pTagName[5], unsigned char*) const;
 
-    const FontCharMapRef& GetFontCharMap() const;
-    bool GetFontCapabilities(vcl::FontCapabilities& rFontCapabilities) const;
+    FontCharMapRef GetFontCharMap() const override;
+    bool GetFontCapabilities(vcl::FontCapabilities&) const override;
     bool HasChar(sal_uInt32 cChar) const;
 
     rtl::Reference<LogicalFontInstance>
diff --git a/vcl/inc/quartz/salgdi.h b/vcl/inc/quartz/salgdi.h
index a5c74c17705c..8058b68378b6 100644
--- a/vcl/inc/quartz/salgdi.h
+++ b/vcl/inc/quartz/salgdi.h
@@ -67,8 +67,8 @@ public:
     int                             GetFontTable( uint32_t nTagCode, unsigned 
char* ) const;
     int                             GetFontTable( const char pTagName[5], 
unsigned char* ) const;
 
-    FontCharMapRef                  GetFontCharMap() const;
-    bool                            GetFontCapabilities(vcl::FontCapabilities 
&rFontCapabilities) const;
+    FontCharMapRef GetFontCharMap() const override;
+    bool GetFontCapabilities(vcl::FontCapabilities&) const override;
     bool                            HasChar( sal_uInt32 cChar ) const;
 
     rtl::Reference<LogicalFontInstance> CreateFontInstance(const 
FontSelectPattern&) const override;
diff --git a/vcl/inc/unx/freetype_glyphcache.hxx 
b/vcl/inc/unx/freetype_glyphcache.hxx
index c375ba2ff5d4..4586c6fd2e6d 100644
--- a/vcl/inc/unx/freetype_glyphcache.hxx
+++ b/vcl/inc/unx/freetype_glyphcache.hxx
@@ -72,7 +72,8 @@ public:
 
     void                  AnnounceFont( PhysicalFontCollection* );
 
-    const FontCharMapRef& GetFontCharMap();
+    FontCharMapRef GetFontCharMap() const;
+    bool GetFontCapabilities(vcl::FontCapabilities&) const;
 
 private:
     friend class FreetypeManager;
@@ -87,7 +88,7 @@ private:
     sal_IntPtr      mnFontId;
     FontAttributes  maDevFontAttributes;
 
-    FontCharMapRef  mxFontCharMap;
+    mutable FontCharMapRef mxFontCharMap;
 };
 
 class FreetypeFontFace : public PhysicalFontFace
@@ -100,8 +101,16 @@ public:
 
     virtual rtl::Reference<LogicalFontInstance> CreateFontInstance( const 
FontSelectPattern& ) const override;
     virtual sal_IntPtr      GetFontId() const override { return 
mpFreetypeFontInfo->GetFontId(); }
+
+    FontCharMapRef GetFontCharMap() const override { return 
mpFreetypeFontInfo->GetFontCharMap(); }
+    inline bool GetFontCapabilities(vcl::FontCapabilities&) const override;
 };
 
+bool FreetypeFontFace::GetFontCapabilities(vcl::FontCapabilities& 
rFontCapabilities) const
+{
+    return mpFreetypeFontInfo->GetFontCapabilities(rFontCapabilities);
+}
+
 class SAL_DLLPUBLIC_RTTI FreetypeFontInstance : public LogicalFontInstance
 {
     friend rtl::Reference<LogicalFontInstance> 
FreetypeFontFace::CreateFontInstance(const FontSelectPattern&) const;
diff --git a/vcl/inc/win/salgdi.h b/vcl/inc/win/salgdi.h
index 5fe6645e7d2c..bf89853e1a8e 100644
--- a/vcl/inc/win/salgdi.h
+++ b/vcl/inc/win/salgdi.h
@@ -72,8 +72,8 @@ public:
     BYTE                    GetCharSet() const          { return meWinCharSet; 
}
     BYTE                    GetPitchAndFamily() const   { return 
mnPitchAndFamily; }
 
-    FontCharMapRef          GetFontCharMap() const;
-    bool GetFontCapabilities(vcl::FontCapabilities &rFontCapabilities) const;
+    FontCharMapRef GetFontCharMap() const override;
+    bool GetFontCapabilities(vcl::FontCapabilities&) const override;
 
 private:
     sal_IntPtr              mnId;
diff --git a/vcl/qt5/Qt5FontFace.cxx b/vcl/qt5/Qt5FontFace.cxx
index d02e61955103..ce349099030a 100644
--- a/vcl/qt5/Qt5FontFace.cxx
+++ b/vcl/qt5/Qt5FontFace.cxx
@@ -162,7 +162,7 @@ Qt5FontFace::CreateFontInstance(const FontSelectPattern& 
rFSD) const
     return new Qt5Font(*this, rFSD);
 }
 
-const FontCharMapRef& Qt5FontFace::GetFontCharMap() const
+FontCharMapRef Qt5FontFace::GetFontCharMap() const
 {
     if (m_xCharMap.is())
         return m_xCharMap;
diff --git a/vcl/qt5/Qt5Graphics_Text.cxx b/vcl/qt5/Qt5Graphics_Text.cxx
index 26b53ff694b8..0fe602d1ce3f 100644
--- a/vcl/qt5/Qt5Graphics_Text.cxx
+++ b/vcl/qt5/Qt5Graphics_Text.cxx
@@ -72,15 +72,14 @@ FontCharMapRef Qt5Graphics::GetFontCharMap() const
 {
     if (!m_pTextStyle[0])
         return FontCharMapRef(new FontCharMap());
-    return static_cast<const 
Qt5FontFace*>(m_pTextStyle[0]->GetFontFace())->GetFontCharMap();
+    return m_pTextStyle[0]->GetFontFace()->GetFontCharMap();
 }
 
 bool Qt5Graphics::GetFontCapabilities(vcl::FontCapabilities& 
rFontCapabilities) const
 {
     if (!m_pTextStyle[0])
         return false;
-    return static_cast<const Qt5FontFace*>(m_pTextStyle[0]->GetFontFace())
-        ->GetFontCapabilities(rFontCapabilities);
+    return 
m_pTextStyle[0]->GetFontFace()->GetFontCapabilities(rFontCapabilities);
 }
 
 void Qt5Graphics::GetDevFontList(PhysicalFontCollection* pPFC)
diff --git a/vcl/source/gdi/pdfbuildin_fonts.cxx 
b/vcl/source/gdi/pdfbuildin_fonts.cxx
index 41c208b93b67..4d74cf899069 100644
--- a/vcl/source/gdi/pdfbuildin_fonts.cxx
+++ b/vcl/source/gdi/pdfbuildin_fonts.cxx
@@ -21,8 +21,6 @@
 
 #include <rtl/strbuf.hxx>
 
-using namespace vcl;
-
 namespace vcl::pdf
 {
 OString BuildinFont::getNameObject() const
@@ -43,6 +41,16 @@ OString BuildinFont::getNameObject() const
     return aBuf.makeStringAndClear();
 }
 
+FontCharMapRef BuildinFont::GetFontCharMap() const
+{
+    assert(false && "pdf::BuildinFont doesn't provide correct char maps!");
+    if (m_xFontCharMap.is())
+        return m_xFontCharMap;
+
+    m_xFontCharMap = FontCharMap::GetDefaultMap(m_eCharSet != 
RTL_TEXTENCODING_MS_1252);
+    return m_xFontCharMap;
+}
+
 FontAttributes BuildinFont::GetFontAttributes() const
 {
     FontAttributes aDFA;
@@ -103,7 +111,8 @@ const BuildinFont BuildinFontFace::m_aBuildinFonts[14]
               600, 600, 600, 600, 600, 600, 600, 600, // 232 - 239
               600, 600, 600, 600, 600, 600, 600, 600, // 240 - 247
               600, 600, 600, 600, 600, 600, 600, 600 // 248 - 255
-          } },
+          },
+          nullptr },
 
         { "Courier", // family name
           "Italic", // style
@@ -149,7 +158,8 @@ const BuildinFont BuildinFontFace::m_aBuildinFonts[14]
               600, 600, 600, 600, 600, 600, 600, 600, // 232 - 239
               600, 600, 600, 600, 600, 600, 600, 600, // 240 - 247
               600, 600, 600, 600, 600, 600, 600, 600 // 248 - 255
-          } },
+          },
+          nullptr },
 
         { "Courier", // family name
           "Bold", // style
@@ -195,7 +205,8 @@ const BuildinFont BuildinFontFace::m_aBuildinFonts[14]
               600, 600, 600, 600, 600, 600, 600, 600, // 232 - 239
               600, 600, 600, 600, 600, 600, 600, 600, // 240 - 247
               600, 600, 600, 600, 600, 600, 600, 600 // 248 - 255
-          } },
+          },
+          nullptr },
 
         { "Courier", // family name
           "Bold Italic", // style
@@ -241,7 +252,8 @@ const BuildinFont BuildinFontFace::m_aBuildinFonts[14]
               600, 600, 600, 600, 600, 600, 600, 600, // 232 - 239
               600, 600, 600, 600, 600, 600, 600, 600, // 240 - 247
               600, 600, 600, 600, 600, 600, 600, 600 // 248 - 255
-          } },
+          },
+          nullptr },
 
         { "Helvetica", // family name
           "Normal", // style
@@ -287,7 +299,8 @@ const BuildinFont BuildinFontFace::m_aBuildinFonts[14]
               556,  556,  556, 556, 278,  278,  278,  278, // 232 - 239
               556,  556,  556, 556, 556,  556,  556,  584, // 240 - 247
               611,  556,  556, 556, 556,  500,  556,  500 // 248 - 255
-          } },
+          },
+          nullptr },
 
         { "Helvetica", // family name
           "Italic", // style
@@ -333,7 +346,8 @@ const BuildinFont BuildinFontFace::m_aBuildinFonts[14]
               556,  556,  556, 556, 278,  278,  278,  278, // 232 - 239
               556,  556,  556, 556, 556,  556,  556,  584, // 240 - 247
               611,  556,  556, 556, 556,  500,  556,  500 // 248 - 255
-          } },
+          },
+          nullptr },
 
         { "Helvetica", // family name
           "Bold", // style
@@ -379,7 +393,8 @@ const BuildinFont BuildinFontFace::m_aBuildinFonts[14]
               556, 556,  556, 556, 278,  278,  278,  278, // 232 - 239
               611, 611,  611, 611, 611,  611,  611,  584, // 240 - 247
               611, 611,  611, 611, 611,  556,  611,  556 // 248 - 255
-          } },
+          },
+          nullptr },
 
         { "Helvetica", // family name
           "Bold Italic", // style
@@ -425,7 +440,8 @@ const BuildinFont BuildinFontFace::m_aBuildinFonts[14]
               556, 556,  556, 556, 278,  278,  278,  278, // 232 - 239
               611, 611,  611, 611, 611,  611,  611,  584, // 240 - 247
               611, 611,  611, 611, 611,  556,  611,  556 // 248 - 255
-          } },
+          },
+          nullptr },
 
         { "Times", // family name
           "Normal", // style
@@ -471,7 +487,8 @@ const BuildinFont BuildinFontFace::m_aBuildinFonts[14]
               444, 444,  444, 444, 278, 278,  278, 278, // 232 - 239
               500, 500,  500, 500, 500, 500,  500, 564, // 240 - 247
               500, 500,  500, 500, 500, 500,  500, 500 // 248 - 255
-          } },
+          },
+          nullptr },
 
         { "Times", // family name
           "Italic", // style
@@ -517,7 +534,8 @@ const BuildinFont BuildinFontFace::m_aBuildinFonts[14]
               444, 444,  444, 444, 278, 278, 278, 278, // 232 - 239
               500, 500,  500, 500, 500, 500, 500, 675, // 240 - 247
               500, 500,  500, 500, 500, 444, 500, 444 // 248 - 255
-          } },
+          },
+          nullptr },
 
         { "Times", // family name
           "Bold", // style
@@ -563,7 +581,8 @@ const BuildinFont BuildinFontFace::m_aBuildinFonts[14]
               444, 444,  444, 444, 278,  278,  278,  278, // 232 - 239
               500, 556,  500, 500, 500,  500,  500,  570, // 240 - 247
               500, 556,  556, 556, 556,  500,  556,  500 // 248 - 255
-          } },
+          },
+          nullptr },
 
         { "Times", // family name
           "Bold Italic", // style
@@ -609,7 +628,8 @@ const BuildinFont BuildinFontFace::m_aBuildinFonts[14]
               444, 444,  444, 444, 278, 278,  278, 278, // 232 - 239
               500, 556,  500, 500, 500, 500,  500, 570, // 240 - 247
               500, 556,  556, 556, 556, 444,  500, 444 // 248 - 255
-          } },
+          },
+          nullptr },
 
         // The font name "Symbol" is too generic and causes plenty of trouble.
         // To ensure WYSIWIG the PDF-Base14 variant gets a not-confusable name
@@ -657,7 +677,8 @@ const BuildinFont BuildinFontFace::m_aBuildinFonts[14]
               384, 384, 384, 384,  494,  494, 494,  494, // 232 - 239
               0,   329, 274, 686,  686,  686, 384,  384, // 240 - 247
               384, 384, 384, 384,  494,  494, 494,  0 // 248 - 255
-          } },
+          },
+          nullptr },
 
         { "ZapfDingbats", // family name
           "Normal", // style
@@ -703,7 +724,8 @@ const BuildinFont BuildinFontFace::m_aBuildinFonts[14]
               883, 836, 836, 867, 867, 696, 696,  874, // 232 - 239
               0,   874, 760, 946, 771, 865, 771,  888, // 240 - 247
               967, 888, 831, 873, 927, 970, 918,  0 // 248 - 255
-          } }
+          },
+          nullptr }
 
       };
 
@@ -735,6 +757,6 @@ BuildinFontFace::CreateFontInstance(const 
FontSelectPattern& rFSP) const
     return new BuildinFontInstance(*this, rFSP);
 }
 
-} // namespace vcl
+} // namespace vcl::pdf
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/gdi/pdfbuildin_fonts.hxx 
b/vcl/source/gdi/pdfbuildin_fonts.hxx
index 8e91cbcb95b4..b7bf17fdb405 100644
--- a/vcl/source/gdi/pdfbuildin_fonts.hxx
+++ b/vcl/source/gdi/pdfbuildin_fonts.hxx
@@ -38,8 +38,10 @@ struct BuildinFont
     FontWeight const m_eWeight;
     FontItalic const m_eItalic;
     int const m_aWidths[256];
+    mutable FontCharMapRef m_xFontCharMap;
 
     OString getNameObject() const;
+    FontCharMapRef GetFontCharMap() const;
     FontAttributes GetFontAttributes() const;
 };
 
@@ -55,7 +57,6 @@ public:
 
 class BuildinFontFace final : public PhysicalFontFace
 {
-private:
     static const BuildinFont m_aBuildinFonts[14];
     const BuildinFont& mrBuildin;
 
@@ -67,6 +68,8 @@ public:
 
     const BuildinFont& GetBuildinFont() const { return mrBuildin; }
     sal_IntPtr GetFontId() const override { return 
reinterpret_cast<sal_IntPtr>(&mrBuildin); }
+    FontCharMapRef GetFontCharMap() const override { return 
mrBuildin.GetFontCharMap(); }
+    bool GetFontCapabilities(vcl::FontCapabilities&) const override { return 
false; }
 
     static const BuildinFont& Get(int nId) { return m_aBuildinFonts[nId]; }
 };
diff --git a/vcl/unx/generic/glyphs/freetype_glyphcache.cxx 
b/vcl/unx/generic/glyphs/freetype_glyphcache.cxx
index 9ddf206572ac..6d8fec490c11 100644
--- a/vcl/unx/generic/glyphs/freetype_glyphcache.cxx
+++ b/vcl/unx/generic/glyphs/freetype_glyphcache.cxx
@@ -670,7 +670,12 @@ FontCharMapRef FreetypeFont::GetFontCharMap() const
     return mxFontInfo->GetFontCharMap();
 }
 
-const FontCharMapRef& FreetypeFontInfo::GetFontCharMap()
+bool FreetypeFont::GetFontCapabilities(vcl::FontCapabilities 
&rFontCapabilities) const
+{
+    return mxFontInfo->GetFontCapabilities(rFontCapabilities);
+}
+
+FontCharMapRef FreetypeFontInfo::GetFontCharMap() const
 {
     // check if the charmap is already cached
     if( mxFontCharMap.is() )
@@ -696,14 +701,14 @@ const FontCharMapRef& FreetypeFontInfo::GetFontCharMap()
     return mxFontCharMap;
 }
 
-bool FreetypeFont::GetFontCapabilities(vcl::FontCapabilities 
&rFontCapabilities) const
+bool FreetypeFontInfo::GetFontCapabilities(vcl::FontCapabilities 
&rFontCapabilities) const
 {
     bool bRet = false;
 
     sal_uLong nLength = 0;
 
     // load OS/2 table
-    const FT_Byte* pOS2 = mxFontInfo->GetTable("OS/2", &nLength);
+    const FT_Byte* pOS2 = GetTable("OS/2", &nLength);
     if (pOS2)
     {
         bRet = vcl::getTTCoverage(
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to