summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorJan-Marek Glogowski <glogow@fbihome.de>2020-09-07 23:56:20 +0200
committerJan-Marek Glogowski <glogow@fbihome.de>2020-09-15 06:41:41 +0200
commitfb50c96b4207f7effb9e656ae9c8ec8d25d625ca (patch)
tree863edc818b69587be952d3c76331bb6ca74ec2c9 /vcl
parent574eec9036c5f185b3572ba1e0ca9d111eb361dc (diff)
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 <glogow@fbihome.de> Tested-by: Jenkins
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/PhysicalFontFace.hxx8
-rw-r--r--vcl/inc/qt5/Qt5FontFace.hxx4
-rw-r--r--vcl/inc/quartz/salgdi.h4
-rw-r--r--vcl/inc/unx/freetype_glyphcache.hxx13
-rw-r--r--vcl/inc/win/salgdi.h4
-rw-r--r--vcl/qt5/Qt5FontFace.cxx2
-rw-r--r--vcl/qt5/Qt5Graphics_Text.cxx5
-rw-r--r--vcl/source/gdi/pdfbuildin_fonts.cxx56
-rw-r--r--vcl/source/gdi/pdfbuildin_fonts.hxx5
-rw-r--r--vcl/unx/generic/glyphs/freetype_glyphcache.cxx11
10 files changed, 79 insertions, 33 deletions
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(