[Libreoffice-commits] core.git: vcl/inc vcl/qt5 vcl/source
Jan-Marek Glogowski (via logerrit)
logerrit at kemper.freedesktop.org
Fri Sep 11 17:42:52 UTC 2020
vcl/inc/sft.hxx | 16 ++++++++++++++++
vcl/qt5/Qt5Graphics_Text.cxx | 7 ++++++-
vcl/source/fontsubset/sft.cxx | 26 +++++++++++++++++---------
3 files changed, 39 insertions(+), 10 deletions(-)
New commits:
commit e9b9044f7b7b44b45dd582885cad0b0a7d44f88b
Author: Jan-Marek Glogowski <glogow at fbihome.de>
AuthorDate: Mon Sep 7 23:59:13 2020 +0200
Commit: Jan-Marek Glogowski <glogow at fbihome.de>
CommitDate: Fri Sep 11 19:42:09 2020 +0200
tdf#125234 Qt5 set glpyh font bounding box
Not sure if this is strictly needed, and obviously it will be
"wrong" for a sub font containing just some of the glyphs, but
since other backends also do this, follow suit.
Change-Id: Ib83542b685b38d800d09b7a19780f9ac619c7ad0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102487
Tested-by: Jenkins
Reviewed-by: Jan-Marek Glogowski <glogow at fbihome.de>
diff --git a/vcl/inc/sft.hxx b/vcl/inc/sft.hxx
index 2aef3a67d2e5..89853335db54 100644
--- a/vcl/inc/sft.hxx
+++ b/vcl/inc/sft.hxx
@@ -674,6 +674,22 @@ class TrueTypeFont;
*/
VCL_DLLPUBLIC void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info);
+/**
+ * Returns part of the head table info, normally collected by GetTTGlobalFontInfo.
+ *
+ * Just implemented separate, because this info not available via Qt API.
+ *
+ * @param ttf pointer to a AbstractTrueTypeFont structure
+ * @param xMin global glyph bounding box min X
+ * @param yMin global glyph bounding box min Y
+ * @param xMax global glyph bounding box max X
+ * @param yMax global glyph bounding box max Y
+ * @param macStyle encoded Mac style flags of the font
+ * @return true, if table data could be decoded
+ * @ingroup sft
+ */
+ VCL_DLLPUBLIC bool GetTTGlobalFontHeadInfo(AbstractTrueTypeFont *ttf, int& xMin, int& yMin, int& xMax, int& yMax, sal_uInt16& macStyle);
+
/**
* Returns fonts metrics.
* @see TTGlobalFontInfo
diff --git a/vcl/qt5/Qt5Graphics_Text.cxx b/vcl/qt5/Qt5Graphics_Text.cxx
index a42d35ae6391..c533ad1d599a 100644
--- a/vcl/qt5/Qt5Graphics_Text.cxx
+++ b/vcl/qt5/Qt5Graphics_Text.cxx
@@ -238,6 +238,12 @@ bool Qt5Graphics::CreateFontSubset(const OUString& rToFile, const PhysicalFontFa
rInfo.m_nAscent = aRawFont.ascent();
rInfo.m_nDescent = aRawFont.descent();
+ Qt5TrueTypeFont aTTF(aRawFont);
+ int nXmin, nYmin, nXmax, nYmax;
+ sal_uInt16 nMacStyleFlags;
+ if (GetTTGlobalFontHeadInfo(&aTTF, nXmin, nYmin, nXmax, nYmax, nMacStyleFlags))
+ rInfo.m_aFontBBox = tools::Rectangle(Point(nXmin, nYmin), Point(nXmax, nYmax));
+
sal_uInt16 aShortIDs[nGlyphCount + 1];
sal_uInt8 aTempEncs[nGlyphCount + 1];
@@ -278,7 +284,6 @@ bool Qt5Graphics::CreateFontSubset(const OUString& rToFile, const PhysicalFontFa
pGlyphWidths[i] = pGlyphMetrics[i];
// write subset into destination file
- Qt5TrueTypeFont aTTF(aRawFont);
vcl::SFErrCodes nRC
= vcl::CreateTTFromTTGlyphs(&aTTF, aToFile.getStr(), aShortIDs, aTempEncs, nGlyphCount);
return (nRC == vcl::SFErrCodes::Ok);
diff --git a/vcl/source/fontsubset/sft.cxx b/vcl/source/fontsubset/sft.cxx
index 30a6e37d1745..6eabe8480608 100644
--- a/vcl/source/fontsubset/sft.cxx
+++ b/vcl/source/fontsubset/sft.cxx
@@ -2364,6 +2364,22 @@ void GetTTFontMetrics(const uint8_t *pHhea, size_t nHhea,
}
}
+bool GetTTGlobalFontHeadInfo(AbstractTrueTypeFont *ttf, int& xMin, int& yMin, int& xMax, int& yMax, sal_uInt16& macStyle)
+{
+ sal_uInt32 table_size;
+ const sal_uInt8* table = ttf->table(O_head, table_size);
+ if (table_size < 46)
+ return false;
+
+ const int UPEm = ttf->unitsPerEm();
+ xMin = XUnits(UPEm, GetInt16(table, HEAD_xMin_offset));
+ yMin = XUnits(UPEm, GetInt16(table, HEAD_yMin_offset));
+ xMax = XUnits(UPEm, GetInt16(table, HEAD_xMax_offset));
+ yMax = XUnits(UPEm, GetInt16(table, HEAD_yMax_offset));
+ macStyle = GetUInt16(table, HEAD_macStyle_offset);
+ return true;
+}
+
void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info)
{
int UPEm = ttf->unitsPerEm();
@@ -2406,15 +2422,7 @@ void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info)
info->italicAngle = GetInt32(table, POST_italicAngle_offset);
}
- table = ttf->table(O_head, table_size); /* 'head' tables is always there */
- if (table_size >= 46)
- {
- info->xMin = XUnits(UPEm, GetInt16(table, HEAD_xMin_offset));
- info->yMin = XUnits(UPEm, GetInt16(table, HEAD_yMin_offset));
- info->xMax = XUnits(UPEm, GetInt16(table, HEAD_xMax_offset));
- info->yMax = XUnits(UPEm, GetInt16(table, HEAD_yMax_offset));
- info->macStyle = GetUInt16(table, HEAD_macStyle_offset);
- }
+ GetTTGlobalFontHeadInfo(ttf, info->xMin, info->yMin, info->xMax, info->yMax, info->macStyle);
table = ttf->table(O_hhea, table_size);
if (table_size >= 10)
More information about the Libreoffice-commits
mailing list