vcl/inc/unx/fc_fontoptions.hxx | 3 -- vcl/unx/generic/fontmanager/fontconfig.cxx | 29 +++++++++++-------------- vcl/unx/generic/gdi/cairotextrender.cxx | 29 +++---------------------- vcl/unx/generic/glyphs/freetype_glyphcache.cxx | 2 - 4 files changed, 19 insertions(+), 44 deletions(-)
New commits: commit 47e1fcac22af9c772a3abbd0ba270cb5eef18416 Author: Khaled Hosny <[email protected]> AuthorDate: Mon Mar 2 01:14:46 2026 +0200 Commit: Khaled Hosny <[email protected]> CommitDate: Mon Mar 2 01:14:46 2026 +0200 yy Change-Id: I368c9a0bfa28a348eeec954daa4a5246c2a3292e diff --git a/vcl/inc/unx/fc_fontoptions.hxx b/vcl/inc/unx/fc_fontoptions.hxx index 51bec972f3a5..c9ea936164b2 100644 --- a/vcl/inc/unx/fc_fontoptions.hxx +++ b/vcl/inc/unx/fc_fontoptions.hxx @@ -32,8 +32,7 @@ public: mpPattern(pPattern) {} ~FontConfigFontOptions(); - void SyncPattern(const OString& rFileName, sal_uInt32 nFontFace, sal_uInt32 nFontVariation, bool bEmbolden); - static void AddVariations(FcPattern* pPattern, const std::vector<hb_variation_t>& rVariations); + void SyncPattern(const OString& rFileName, sal_uInt32 nFontFace, sal_uInt32 nFontVariation, bool bEmbolden, const std::vector<hb_variation_t>& rVariations); FcPattern* GetPattern() const; static void cairo_font_options_substitute(FcPattern* pPattern); private: diff --git a/vcl/unx/generic/fontmanager/fontconfig.cxx b/vcl/unx/generic/fontmanager/fontconfig.cxx index 0ee9ecfa8284..9836670eb29c 100644 --- a/vcl/unx/generic/fontmanager/fontconfig.cxx +++ b/vcl/unx/generic/fontmanager/fontconfig.cxx @@ -1299,7 +1299,7 @@ FcPattern *FontConfigFontOptions::GetPattern() const #define FC_FONT_VARIATIONS "fontvariations" #endif -void FontConfigFontOptions::SyncPattern(const OString& rFileName, sal_uInt32 nIndex, sal_uInt32 nVariation, bool bEmbolden) +void FontConfigFontOptions::SyncPattern(const OString& rFileName, sal_uInt32 nIndex, sal_uInt32 nVariation, bool bEmbolden, const std::vector<hb_variation_t>& rVariations) { FcPatternDel(mpPattern, FC_FILE); FcPatternAddString(mpPattern, FC_FILE, reinterpret_cast<FcChar8 const *>(rFileName.getStr())); @@ -1308,24 +1308,21 @@ void FontConfigFontOptions::SyncPattern(const OString& rFileName, sal_uInt32 nIn FcPatternAddInteger(mpPattern, FC_INDEX, nFcIndex); FcPatternDel(mpPattern, FC_EMBOLDEN); FcPatternAddBool(mpPattern, FC_EMBOLDEN, bEmbolden ? FcTrue : FcFalse); -} - -void FontConfigFontOptions::AddVariations(FcPattern* pPattern, const std::vector<hb_variation_t>& rVariations) -{ - if (rVariations.empty()) - return; - OStringBuffer aVarStr; - for (const auto& var : rVariations) + FcPatternDel(mpPattern, FC_FONT_VARIATIONS); + if (!rVariations.empty()) { - if (!aVarStr.isEmpty()) - aVarStr.append(','); - char tag[4]; - hb_tag_to_string(var.tag, tag); - aVarStr.append(tag, 4).append('=').append(OString::number(var.value)); + OStringBuffer aVarStr; + for (const auto& var : rVariations) + { + if (!aVarStr.isEmpty()) + aVarStr.append(','); + char tag[4]; + hb_tag_to_string(var.tag, tag); + aVarStr.append(tag, 4).append('=').append(OString::number(var.value)); + } + FcPatternAddString(mpPattern, FC_FONT_VARIATIONS, reinterpret_cast<const FcChar8*>(aVarStr.getStr())); } - FcPatternDel(pPattern, FC_FONT_VARIATIONS); - FcPatternAddString(pPattern, FC_FONT_VARIATIONS, reinterpret_cast<const FcChar8*>(aVarStr.getStr())); } std::unique_ptr<FontConfigFontOptions> PrintFontManager::getFontOptions(const FontAttributes& rInfo, int nSize) diff --git a/vcl/unx/generic/gdi/cairotextrender.cxx b/vcl/unx/generic/gdi/cairotextrender.cxx index 03617b91cc9c..14ee838df33d 100644 --- a/vcl/unx/generic/gdi/cairotextrender.cxx +++ b/vcl/unx/generic/gdi/cairotextrender.cxx @@ -29,10 +29,8 @@ #include <sallayout.hxx> #include <salinst.hxx> -#include <hb.h> #include <cairo.h> #include <cairo-ft.h> -#include <fontconfig/fontconfig.h> #if defined(CAIRO_HAS_SVG_SURFACE) #include <cairo-svg.h> #elif defined(CAIRO_HAS_PDF_SURFACE) @@ -45,7 +43,6 @@ namespace { typedef struct FT_FaceRec_* FT_Face; - class CairoFontsCache : public CacheOwner { public: @@ -55,22 +52,12 @@ public: const FontConfigFontOptions *mpOptions; bool mbEmbolden; bool mbVerticalMetrics; - std::vector<hb_variation_t> maVariations; bool operator ==(const CacheId& rOther) const { - if (maFace != rOther.maFace || - mpOptions != rOther.mpOptions || - mbEmbolden != rOther.mbEmbolden || - mbVerticalMetrics != rOther.mbVerticalMetrics || - maVariations.size() != rOther.maVariations.size()) - return false; - for (size_t i = 0; i < maVariations.size(); ++i) - { - if (maVariations[i].tag != rOther.maVariations[i].tag || - maVariations[i].value != rOther.maVariations[i].value) - return false; - } - return true; + return maFace == rOther.maFace && + mpOptions == rOther.mpOptions && + mbEmbolden == rOther.mbEmbolden && + mbVerticalMetrics == rOther.mbVerticalMetrics; } }; @@ -240,14 +227,7 @@ static void ApplyFont(cairo_t* cr, const CairoFontsCache::CacheId& rId, double n { const FontConfigFontOptions *pOptions = rId.mpOptions; FcPattern *pPattern = pOptions->GetPattern(); - if (!rId.maVariations.empty()) - { - pPattern = FcPatternDuplicate(pPattern); - FontConfigFontOptions::AddVariations(pPattern, rId.maVariations); - } font_face = cairo_ft_font_face_create_for_pattern(pPattern); - if (!rId.maVariations.empty()) - FcPatternDestroy(pPattern); rCache.CacheFont(font_face, rId); } cairo_set_font_face(cr, font_face); @@ -288,7 +268,6 @@ static CairoFontsCache::CacheId makeCacheId(const GenericSalLayout& rLayout) aId.mpOptions = rFont.GetFontOptions(); aId.mbEmbolden = rInstance.NeedsArtificialBold(); aId.mbVerticalMetrics = false; - aId.maVariations = rInstance.GetVariations(); return aId; } diff --git a/vcl/unx/generic/glyphs/freetype_glyphcache.cxx b/vcl/unx/generic/glyphs/freetype_glyphcache.cxx index b2d47f717ed3..20836be4750c 100644 --- a/vcl/unx/generic/glyphs/freetype_glyphcache.cxx +++ b/vcl/unx/generic/glyphs/freetype_glyphcache.cxx @@ -476,7 +476,7 @@ const FontConfigFontOptions* FreetypeFont::GetFontOptions() const if (!mxFontOptions) { mxFontOptions = GetFCFontOptions(mxFontInfo->GetFontAttributes(), mrFontInstance.GetFontSelectPattern().mnHeight); - mxFontOptions->SyncPattern(GetFontFileName(), GetFontFaceIndex(), GetFontFaceVariation(), mrFontInstance.NeedsArtificialBold()); + mxFontOptions->SyncPattern(GetFontFileName(), GetFontFaceIndex(), GetFontFaceVariation(), mrFontInstance.NeedsArtificialBold(), mrFontInstance.GetVariations()); } return mxFontOptions.get(); }
