vcl/inc/fontattributes.hxx | 19 ---- vcl/inc/unx/fontmanager.hxx | 62 ++-------------- vcl/inc/unx/genpspgraphics.h | 4 - vcl/qa/cppunit/physicalfontfamily.cxx | 3 vcl/qt5/QtFrame.cxx | 39 ++++------ vcl/qt5/QtGraphics_Text.cxx | 19 ++-- vcl/unx/generic/fontmanager/fontconfig.cxx | 40 ++++++---- vcl/unx/generic/fontmanager/fontmanager.cxx | 108 ++++++++-------------------- vcl/unx/generic/gdi/freetypetextrender.cxx | 39 +++++----- vcl/unx/generic/print/genpspgraphics.cxx | 27 ------- vcl/unx/gtk3/salnativewidgets-gtk.cxx | 68 +++++++++-------- 11 files changed, 152 insertions(+), 276 deletions(-)
New commits: commit 444e246535a7cf56b94143823845ec4bd2628236 Author: Khaled Hosny <kha...@libreoffice.org> AuthorDate: Tue Aug 1 16:38:14 2023 +0000 Commit: خالد حسني <kha...@libreoffice.org> CommitDate: Wed Aug 2 11:58:01 2023 +0200 vcl: Drop the PrintFont -> FastPrintFontInfo -> FontAttributes indirection We want FontAttributes at the end, so lets have them up front instead of the intermediary structures. Change-Id: Iafdf17f4a7615f0c3d972e6080cebea0183840b7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155191 Tested-by: Jenkins Reviewed-by: خالد حسني <kha...@libreoffice.org> diff --git a/vcl/inc/unx/fontmanager.hxx b/vcl/inc/unx/fontmanager.hxx index 8010c17aabd8..a81975f21931 100644 --- a/vcl/inc/unx/fontmanager.hxx +++ b/vcl/inc/unx/fontmanager.hxx @@ -59,31 +59,6 @@ class PPDParser; typedef int fontID; -struct FastPrintFontInfo -{ - fontID m_nID; // FontID - - // font attributes - OUString m_aFamilyName; - OUString m_aStyleName; - FontFamily m_eFamilyStyle; - FontItalic m_eItalic; - FontWidth m_eWidth; - FontWeight m_eWeight; - FontPitch m_ePitch; - rtl_TextEncoding m_aEncoding; - - FastPrintFontInfo() - : m_nID(0) - , m_eFamilyStyle(FAMILY_DONTKNOW) - , m_eItalic(ITALIC_DONTKNOW) - , m_eWidth(WIDTH_DONTKNOW) - , m_eWeight(WEIGHT_DONTKNOW) - , m_ePitch(PITCH_DONTKNOW) - , m_aEncoding(RTL_TEXTENCODING_DONTKNOW) - {} -}; - // a class to manage printable fonts class VCL_PLUGIN_PUBLIC PrintFontManager @@ -93,15 +68,7 @@ class VCL_PLUGIN_PUBLIC PrintFontManager struct VCL_DLLPRIVATE PrintFont { - // font attributes - OUString m_aFamilyName; - OUString m_aStyleName; - FontFamily m_eFamilyStyle; - FontItalic m_eItalic; - FontWidth m_eWidth; - FontWeight m_eWeight; - FontPitch m_ePitch; - rtl_TextEncoding m_aEncoding; + FontAttributes m_aFontAttributes; int m_nDirectory; // atom containing system dependent path OString m_aFontFile; // relative to directory @@ -137,13 +104,6 @@ class VCL_PLUGIN_PUBLIC PrintFontManager static FontFamily matchFamilyName( std::u16string_view rFamily ); - const PrintFont* getFont( fontID nID ) const - { - auto it = m_aFonts.find( nID ); - return it == m_aFonts.end() ? nullptr : &it->second; - } - static void fillPrintFontInfo(const PrintFont& rFont, FastPrintFontInfo& rInfo); - OString getDirectory( int nAtom ) const; int getDirectoryAtom( const OString& rDirectory ); @@ -184,12 +144,15 @@ public: void initialize(); + const PrintFont* getFont( fontID nID ) const + { + auto it = m_aFonts.find( nID ); + return it == m_aFonts.end() ? nullptr : &it->second; + } + // returns the ids of all managed fonts. void getFontList( std::vector< fontID >& rFontIDs ); - // get fast font info for a specific font - bool getFontFastInfo( fontID nFontID, FastPrintFontInfo& rInfo ) const; - // routines to get font info in small pieces // get a specific fonts system dependent filename @@ -211,16 +174,15 @@ public: <p> <code>matchFont</code> matches a pattern of font characteristics and returns the closest match if possible. If a match was found - the <code>FastPrintFontInfo</code> passed in as parameter - will be update to the found matching font. + it will update rDFA to the found matching font. </p> <p> implementation note: currently the function is only implemented for fontconfig. </p> - @param rInfo - out of the FastPrintFontInfo structure the following + @param rDFA + out of the FontAttributes structure the following fields will be used for the match: <ul> <li>family name</li> @@ -235,7 +197,7 @@ public: locale will be used for font matching also; e.g. "Sans" can result in different fonts in e.g. english and japanese */ - void matchFont( FastPrintFontInfo& rInfo, const css::lang::Locale& rLocale ); + bool matchFont(FontAttributes& rDFA, const css::lang::Locale& rLocale); static std::unique_ptr<FontConfigFontOptions> getFontOptions(const FontAttributes& rFontAttributes, int nSize); diff --git a/vcl/inc/unx/genpspgraphics.h b/vcl/inc/unx/genpspgraphics.h index 81734cd9988f..2a9c6aefcfda 100644 --- a/vcl/inc/unx/genpspgraphics.h +++ b/vcl/inc/unx/genpspgraphics.h @@ -24,7 +24,6 @@ #include <vcl/vclenum.hxx> #include <config_cairo_canvas.h> -#include <unx/fontmanager.hxx> #include <salgdi.hxx> #include <sallayout.hxx> @@ -61,9 +60,6 @@ public: void Init(psp::JobData* pJob); - // helper methods - static FontAttributes Info2FontAttributes(const psp::FastPrintFontInfo&); - // override all pure virtual methods virtual SalGraphicsImpl* GetImpl() const override { diff --git a/vcl/qt5/QtFrame.cxx b/vcl/qt5/QtFrame.cxx index 5c9947922f47..179d4369a242 100644 --- a/vcl/qt5/QtFrame.cxx +++ b/vcl/qt5/QtFrame.cxx @@ -1028,37 +1028,32 @@ static Color toColor(const QColor& rColor) static bool toVclFont(const QFont& rQFont, const css::lang::Locale& rLocale, vcl::Font& rVclFont) { - psp::FastPrintFontInfo aInfo; - QFontInfo qFontInfo(rQFont); - - OUString sFamilyName = toOUString(rQFont.family()); - aInfo.m_aFamilyName = sFamilyName; - aInfo.m_eItalic = QtFontFace::toFontItalic(qFontInfo.style()); - aInfo.m_eWeight = QtFontFace::toFontWeight(qFontInfo.weight()); - aInfo.m_eWidth = QtFontFace::toFontWidth(rQFont.stretch()); + FontAttributes aFA; + QtFontFace::fillAttributesFromQFont(rQFont, aFA); - psp::PrintFontManager::get().matchFont(aInfo, rLocale); + bool bFound = psp::PrintFontManager::get().matchFont(aFA, rLocale); SAL_INFO("vcl.qt", "font match result for '" - << sFamilyName << "': " - << (aInfo.m_nID != 0 ? OUString::Concat("'") + aInfo.m_aFamilyName + "'" - : OUString("failed"))); + << rQFont.family() << "': " + << (bFound ? OUString::Concat("'") + aFA.GetFamilyName() + "'" + : OUString("failed"))); - if (aInfo.m_nID == 0) + if (!bFound) return false; + QFontInfo qFontInfo(rQFont); int nPointHeight = qFontInfo.pointSize(); if (nPointHeight <= 0) nPointHeight = rQFont.pointSize(); - vcl::Font aFont(aInfo.m_aFamilyName, Size(0, nPointHeight)); - if (aInfo.m_eWeight != WEIGHT_DONTKNOW) - aFont.SetWeight(aInfo.m_eWeight); - if (aInfo.m_eWidth != WIDTH_DONTKNOW) - aFont.SetWidthType(aInfo.m_eWidth); - if (aInfo.m_eItalic != ITALIC_DONTKNOW) - aFont.SetItalic(aInfo.m_eItalic); - if (aInfo.m_ePitch != PITCH_DONTKNOW) - aFont.SetPitch(aInfo.m_ePitch); + vcl::Font aFont(aFA.GetFamilyName(), Size(0, nPointHeight)); + if (aFA.GetWeight() != WEIGHT_DONTKNOW) + aFont.SetWeight(aFA.GetWeight()); + if (aFA.GetWidthType() != WIDTH_DONTKNOW) + aFont.SetWidthType(aFA.GetWidthType()); + if (aFA.GetItalic() != ITALIC_DONTKNOW) + aFont.SetItalic(aFA.GetItalic()); + if (aFA.GetPitch() != PITCH_DONTKNOW) + aFont.SetPitch(aFA.GetPitch()); rVclFont = aFont; return true; diff --git a/vcl/qt5/QtGraphics_Text.cxx b/vcl/qt5/QtGraphics_Text.cxx index f189a04e005d..c7486da26d2e 100644 --- a/vcl/qt5/QtGraphics_Text.cxx +++ b/vcl/qt5/QtGraphics_Text.cxx @@ -28,7 +28,6 @@ #include <unx/geninst.h> #include <unx/fontmanager.hxx> #include <unx/glyphcache.hxx> -#include <unx/genpspgraphics.h> #include <sallayout.hxx> #include <font/PhysicalFontCollection.hxx> @@ -94,23 +93,23 @@ void QtGraphics::GetDevFontList(vcl::font::PhysicalFontCollection* pPFC) FreetypeManager& rFontManager = FreetypeManager::get(); psp::PrintFontManager& rMgr = psp::PrintFontManager::get(); ::std::vector<psp::fontID> aList; - psp::FastPrintFontInfo aInfo; rMgr.getFontList(aList); - for (auto const& elem : aList) + for (auto const& nFontId : aList) { - if (!rMgr.getFontFastInfo(elem, aInfo)) + auto const* pFont = rMgr.getFont(nFontId); + if (!pFont) continue; // normalize face number to the FreetypeManager - int nFaceNum = rMgr.getFontFaceNumber(aInfo.m_nID); - int nVariantNum = rMgr.getFontFaceVariation(aInfo.m_nID); + int nFaceNum = rMgr.getFontFaceNumber(nFontId); + int nVariantNum = rMgr.getFontFaceVariation(nFontId); // inform FreetypeManager about this font provided by the PsPrint subsystem - FontAttributes aDFA = GenPspGraphics::Info2FontAttributes(aInfo); - aDFA.IncreaseQualityBy(4096); - const OString& rFileName = rMgr.getFontFileSysPath(aInfo.m_nID); - rFontManager.AddFontFile(rFileName, nFaceNum, nVariantNum, aInfo.m_nID, aDFA); + FontAttributes aFA = pFont->m_aFontAttributes; + aFA.IncreaseQualityBy(4096); + const OString& rFileName = rMgr.getFontFileSysPath(nFontId); + rFontManager.AddFontFile(rFileName, nFaceNum, nVariantNum, nFontId, aFA); } if (bUseFontconfig) diff --git a/vcl/unx/generic/fontmanager/fontconfig.cxx b/vcl/unx/generic/fontmanager/fontconfig.cxx index 57af5949bfe1..ad9bf6c268ab 100644 --- a/vcl/unx/generic/fontmanager/fontconfig.cxx +++ b/vcl/unx/generic/fontmanager/fontconfig.cxx @@ -706,17 +706,18 @@ void PrintFontManager::countFontconfigFonts() if (xUpdate) { + auto& rDFA = xUpdate->m_aFontAttributes; // set family name if( eWeightRes == FcResultMatch ) - xUpdate->m_eWeight = convertWeight(weight); + rDFA.SetWeight(convertWeight(weight)); if( eWidthRes == FcResultMatch ) - xUpdate->m_eWidth = convertWidth(width); + rDFA.SetWidthType(convertWidth(width)); if( eSpacRes == FcResultMatch ) - xUpdate->m_ePitch = convertSpacing(spacing); + rDFA.SetPitch(convertSpacing(spacing)); if( eSlantRes == FcResultMatch ) - xUpdate->m_eItalic = convertSlant(slant); + rDFA.SetItalic(convertSlant(slant)); if( eStyleRes == FcResultMatch ) - xUpdate->m_aStyleName = OStringToOUString( std::string_view( reinterpret_cast<char*>(style) ), RTL_TEXTENCODING_UTF8 ); + rDFA.SetStyleName(OStringToOUString( std::string_view( reinterpret_cast<char*>(style) ), RTL_TEXTENCODING_UTF8 )); if( eIndexRes == FcResultMatch ) xUpdate->m_nVariationEntry = GetVariationIndex(nEntryId); @@ -1076,12 +1077,12 @@ void PrintFontManager::Substitute(vcl::font::FontSelectPattern &rPattern, OUStri OString aDir, aBase, aOrgPath( reinterpret_cast<char*>(file) ); splitPath( aOrgPath, aDir, aBase ); int nDirID = getDirectoryAtom( aDir ); - fontID aFont = findFontFileID(nDirID, aBase, GetCollectionIndex(nEntryId), GetVariationIndex(nEntryId)); - if( aFont > 0 ) + fontID nFontID = findFontFileID(nDirID, aBase, GetCollectionIndex(nEntryId), GetVariationIndex(nEntryId)); + auto const* pFont = getFont(nFontID); + if (pFont) { - FastPrintFontInfo aInfo; - bRet = getFontFastInfo( aFont, aInfo ); - rPattern.maSearchName = aInfo.m_aFamilyName; + rPattern.maSearchName = pFont->m_aFontAttributes.GetFamilyName(); + bRet = true; } } @@ -1269,8 +1270,9 @@ std::unique_ptr<FontConfigFontOptions> PrintFontManager::getFontOptions(const Fo } -void PrintFontManager::matchFont( FastPrintFontInfo& rInfo, const css::lang::Locale& rLocale ) +bool PrintFontManager::matchFont(FontAttributes& rDFA, const css::lang::Locale& rLocale) { + bool bFound = false; FontCfgWrapper& rWrapper = FontCfgWrapper::get(); FcConfig* pConfig = FcConfigGetCurrent(); @@ -1282,11 +1284,11 @@ void PrintFontManager::matchFont( FastPrintFontInfo& rInfo, const css::lang::Loc if (!aLangAttrib.isEmpty()) FcPatternAddString(pPattern, FC_LANG, reinterpret_cast<FcChar8 const *>(aLangAttrib.getStr())); - OString aFamily = OUStringToOString( rInfo.m_aFamilyName, RTL_TEXTENCODING_UTF8 ); + OString aFamily = OUStringToOString(rDFA.GetFamilyName(), RTL_TEXTENCODING_UTF8); if( !aFamily.isEmpty() ) FcPatternAddString(pPattern, FC_FAMILY, reinterpret_cast<FcChar8 const *>(aFamily.getStr())); - addtopattern(pPattern, rInfo.m_eItalic, rInfo.m_eWeight, rInfo.m_eWidth, rInfo.m_ePitch); + addtopattern(pPattern, rDFA.GetItalic(), rDFA.GetWeight(), rDFA.GetWidthType(), rDFA.GetPitch()); FcConfigSubstitute(pConfig, pPattern, FcMatchPattern); FcDefaultSubstitute(pPattern); @@ -1311,11 +1313,15 @@ void PrintFontManager::matchFont( FastPrintFontInfo& rInfo, const css::lang::Loc OString aDir, aBase, aOrgPath( reinterpret_cast<char*>(file) ); splitPath( aOrgPath, aDir, aBase ); int nDirID = getDirectoryAtom( aDir ); - fontID aFont = findFontFileID(nDirID, aBase, + fontID nFontID = findFontFileID(nDirID, aBase, GetCollectionIndex(nEntryId), GetVariationIndex(nEntryId)); - if( aFont > 0 ) - getFontFastInfo( aFont, rInfo ); + auto const* pFont = getFont(nFontID); + if (pFont) + { + rDFA = pFont->m_aFontAttributes; + bFound = true; + } } } // info: destroying the pSet destroys pResult implicitly @@ -1325,6 +1331,8 @@ void PrintFontManager::matchFont( FastPrintFontInfo& rInfo, const css::lang::Loc // cleanup FcPatternDestroy( pPattern ); + + return bFound; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/generic/fontmanager/fontmanager.cxx b/vcl/unx/generic/fontmanager/fontmanager.cxx index 2a6333f6d93e..a3d77c6ae99e 100644 --- a/vcl/unx/generic/fontmanager/fontmanager.cxx +++ b/vcl/unx/generic/fontmanager/fontmanager.cxx @@ -81,13 +81,7 @@ static sal_uInt16 getUInt16BE( const sal_uInt8*& pBuffer ) * PrintFont implementations */ PrintFontManager::PrintFont::PrintFont() -: m_eFamilyStyle(FAMILY_DONTKNOW) -, m_eItalic(ITALIC_DONTKNOW) -, m_eWidth(WIDTH_DONTKNOW) -, m_eWeight(WEIGHT_DONTKNOW) -, m_ePitch(PITCH_DONTKNOW) -, m_aEncoding(RTL_TEXTENCODING_DONTKNOW) -, m_nDirectory(0) +: m_nDirectory(0) , m_nCollectionEntry(0) , m_nVariationEntry(0) { @@ -514,20 +508,23 @@ bool PrintFontManager::analyzeSfntFile( PrintFont& rFont ) const OString aFile = getFontFile( rFont ); TrueTypeFont* pTTFont = nullptr; + auto& rDFA = rFont.m_aFontAttributes; + rDFA.SetQuality(512); + auto const e = OpenTTFontFile( aFile.getStr(), rFont.m_nCollectionEntry, &pTTFont ); if( e == SFErrCodes::Ok ) { TTGlobalFontInfo aInfo; GetTTGlobalFontInfo( pTTFont, & aInfo ); - if (rFont.m_aFamilyName.isEmpty()) + if (rDFA.GetFamilyName().isEmpty()) { ::std::vector< OUString > aNames; analyzeSfntFamilyName( pTTFont, aNames ); if( !aNames.empty() ) { - rFont.m_aFamilyName = aNames.front(); + rDFA.SetFamilyName(aNames.front()); aNames.erase(aNames.begin()); } else @@ -540,53 +537,53 @@ bool PrintFontManager::analyzeSfntFile( PrintFont& rFont ) const if ( dotIndex == -1 ) dotIndex = rFont.m_aFontFile.getLength(); - rFont.m_aFamilyName = OStringToOUString(rFont.m_aFontFile.subView(0, dotIndex), aEncoding); + rDFA.SetFamilyName(OStringToOUString(rFont.m_aFontFile.subView(0, dotIndex), aEncoding)); } } if( !aInfo.usubfamily.isEmpty() ) - rFont.m_aStyleName = aInfo.usubfamily; + rDFA.SetStyleName(aInfo.usubfamily); - rFont.m_eFamilyStyle = matchFamilyName(rFont.m_aFamilyName); + rDFA.SetFamilyType(matchFamilyName(rDFA.GetFamilyName())); switch( aInfo.weight ) { - case FW_THIN: rFont.m_eWeight = WEIGHT_THIN; break; - case FW_EXTRALIGHT: rFont.m_eWeight = WEIGHT_ULTRALIGHT; break; - case FW_LIGHT: rFont.m_eWeight = WEIGHT_LIGHT; break; - case FW_MEDIUM: rFont.m_eWeight = WEIGHT_MEDIUM; break; - case FW_SEMIBOLD: rFont.m_eWeight = WEIGHT_SEMIBOLD; break; - case FW_BOLD: rFont.m_eWeight = WEIGHT_BOLD; break; - case FW_EXTRABOLD: rFont.m_eWeight = WEIGHT_ULTRABOLD; break; - case FW_BLACK: rFont.m_eWeight = WEIGHT_BLACK; break; + case FW_THIN: rDFA.SetWeight(WEIGHT_THIN); break; + case FW_EXTRALIGHT: rDFA.SetWeight(WEIGHT_ULTRALIGHT); break; + case FW_LIGHT: rDFA.SetWeight(WEIGHT_LIGHT); break; + case FW_MEDIUM: rDFA.SetWeight(WEIGHT_MEDIUM); break; + case FW_SEMIBOLD: rDFA.SetWeight(WEIGHT_SEMIBOLD); break; + case FW_BOLD: rDFA.SetWeight(WEIGHT_BOLD); break; + case FW_EXTRABOLD: rDFA.SetWeight(WEIGHT_ULTRABOLD); break; + case FW_BLACK: rDFA.SetWeight(WEIGHT_BLACK); break; case FW_NORMAL: - default: rFont.m_eWeight = WEIGHT_NORMAL; break; + default: rDFA.SetWeight(WEIGHT_NORMAL); break; } switch( aInfo.width ) { - case FWIDTH_ULTRA_CONDENSED: rFont.m_eWidth = WIDTH_ULTRA_CONDENSED; break; - case FWIDTH_EXTRA_CONDENSED: rFont.m_eWidth = WIDTH_EXTRA_CONDENSED; break; - case FWIDTH_CONDENSED: rFont.m_eWidth = WIDTH_CONDENSED; break; - case FWIDTH_SEMI_CONDENSED: rFont.m_eWidth = WIDTH_SEMI_CONDENSED; break; - case FWIDTH_SEMI_EXPANDED: rFont.m_eWidth = WIDTH_SEMI_EXPANDED; break; - case FWIDTH_EXPANDED: rFont.m_eWidth = WIDTH_EXPANDED; break; - case FWIDTH_EXTRA_EXPANDED: rFont.m_eWidth = WIDTH_EXTRA_EXPANDED; break; - case FWIDTH_ULTRA_EXPANDED: rFont.m_eWidth = WIDTH_ULTRA_EXPANDED; break; + case FWIDTH_ULTRA_CONDENSED: rDFA.SetWidthType(WIDTH_ULTRA_CONDENSED); break; + case FWIDTH_EXTRA_CONDENSED: rDFA.SetWidthType(WIDTH_EXTRA_CONDENSED); break; + case FWIDTH_CONDENSED: rDFA.SetWidthType(WIDTH_CONDENSED); break; + case FWIDTH_SEMI_CONDENSED: rDFA.SetWidthType(WIDTH_SEMI_CONDENSED); break; + case FWIDTH_SEMI_EXPANDED: rDFA.SetWidthType(WIDTH_SEMI_EXPANDED); break; + case FWIDTH_EXPANDED: rDFA.SetWidthType(WIDTH_EXPANDED); break; + case FWIDTH_EXTRA_EXPANDED: rDFA.SetWidthType(WIDTH_EXTRA_EXPANDED); break; + case FWIDTH_ULTRA_EXPANDED: rDFA.SetWidthType(WIDTH_ULTRA_EXPANDED); break; case FWIDTH_NORMAL: - default: rFont.m_eWidth = WIDTH_NORMAL; break; + default: rDFA.SetWidthType(WIDTH_NORMAL); break; } - rFont.m_ePitch = aInfo.pitch ? PITCH_FIXED : PITCH_VARIABLE; - rFont.m_eItalic = aInfo.italicAngle == 0 ? ITALIC_NONE : ( aInfo.italicAngle < 0 ? ITALIC_NORMAL : ITALIC_OBLIQUE ); + rDFA.SetPitch(aInfo.pitch ? PITCH_FIXED : PITCH_VARIABLE); + rDFA.SetItalic(aInfo.italicAngle == 0 ? ITALIC_NONE : (aInfo.italicAngle < 0 ? ITALIC_NORMAL : ITALIC_OBLIQUE)); // #104264# there are fonts that set italic angle 0 although they are // italic; use macstyle bit here if( aInfo.italicAngle == 0 && (aInfo.macStyle & 2) ) - rFont.m_eItalic = ITALIC_NORMAL; + rDFA.SetItalic(ITALIC_NORMAL); - rFont.m_aEncoding = aInfo.microsoftSymbolEncoded ? RTL_TEXTENCODING_SYMBOL : RTL_TEXTENCODING_UCS2; + rDFA.SetMicrosoftSymbolEncoded(aInfo.microsoftSymbolEncoded); CloseTTFont( pTTFont ); bSuccess = true; @@ -675,29 +672,6 @@ void PrintFontManager::getFontList( ::std::vector< fontID >& rFontIDs ) rFontIDs.push_back(font.first); } -void PrintFontManager::fillPrintFontInfo(const PrintFont& rFont, FastPrintFontInfo& rInfo) -{ - rInfo.m_aFamilyName = rFont.m_aFamilyName; - rInfo.m_aStyleName = rFont.m_aStyleName; - rInfo.m_eFamilyStyle = rFont.m_eFamilyStyle; - rInfo.m_eItalic = rFont.m_eItalic; - rInfo.m_eWidth = rFont.m_eWidth; - rInfo.m_eWeight = rFont.m_eWeight; - rInfo.m_ePitch = rFont.m_ePitch; - rInfo.m_aEncoding = rFont.m_aEncoding; -} - -bool PrintFontManager::getFontFastInfo( fontID nFontID, FastPrintFontInfo& rInfo ) const -{ - const PrintFont* pFont = getFont( nFontID ); - if( pFont ) - { - rInfo.m_nID = nFontID; - fillPrintFontInfo( *pFont, rInfo ); - } - return pFont != nullptr; -} - int PrintFontManager::getFontFaceNumber( fontID nFontID ) const { int nRet = 0; diff --git a/vcl/unx/generic/gdi/freetypetextrender.cxx b/vcl/unx/generic/gdi/freetypetextrender.cxx index e8eb6c4febab..b524a45ee73b 100644 --- a/vcl/unx/generic/gdi/freetypetextrender.cxx +++ b/vcl/unx/generic/gdi/freetypetextrender.cxx @@ -28,7 +28,7 @@ #include <vcl/fontcharmap.hxx> #include <sal/log.hxx> -#include <unx/genpspgraphics.h> +#include <unx/fontmanager.hxx> #include <unx/geninst.h> #include <unx/glyphcache.hxx> #include <unx/fc_fontoptions.hxx> @@ -103,23 +103,24 @@ bool FreeTypeTextRenderImpl::AddTempDevFont(vcl::font::PhysicalFontCollection* p return false; FreetypeManager& rFreetypeManager = FreetypeManager::get(); - for (auto const& elem : aFontIds) + for (auto const& nFontId : aFontIds) { // prepare font data - psp::FastPrintFontInfo aInfo; - rMgr.getFontFastInfo(elem, aInfo); - if (!rFontName.isEmpty()) - aInfo.m_aFamilyName = rFontName; + auto const* pFont = rMgr.getFont(nFontId); + if (!pFont) + continue; // inform glyph cache of new font - FontAttributes aDFA = GenPspGraphics::Info2FontAttributes(aInfo); + FontAttributes aDFA = pFont->m_aFontAttributes; aDFA.IncreaseQualityBy(5800); + if (!rFontName.isEmpty()) + aDFA.SetFamilyName(rFontName); - int nFaceNum = rMgr.getFontFaceNumber(aInfo.m_nID); - int nVariantNum = rMgr.getFontFaceVariation(aInfo.m_nID); + int nFaceNum = rMgr.getFontFaceNumber(nFontId); + int nVariantNum = rMgr.getFontFaceVariation(nFontId); - const OString& rFileName = rMgr.getFontFileSysPath(aInfo.m_nID); - rFreetypeManager.AddFontFile(rFileName, nFaceNum, nVariantNum, aInfo.m_nID, aDFA); + const OString& rFileName = rMgr.getFontFileSysPath(nFontId); + rFreetypeManager.AddFontFile(rFileName, nFaceNum, nVariantNum, nFontId, aDFA); } // announce new font to device's font list @@ -139,22 +140,22 @@ void FreeTypeTextRenderImpl::GetDevFontList(vcl::font::PhysicalFontCollection* p psp::PrintFontManager& rMgr = psp::PrintFontManager::get(); ::std::vector<psp::fontID> aList; - psp::FastPrintFontInfo aInfo; rMgr.getFontList(aList); - for (auto const& elem : aList) + for (auto const& nFontId : aList) { - if (!rMgr.getFontFastInfo(elem, aInfo)) + auto const* pFont = rMgr.getFont(nFontId); + if (!pFont) continue; // normalize face number to the FreetypeManager - int nFaceNum = rMgr.getFontFaceNumber(aInfo.m_nID); - int nVariantNum = rMgr.getFontFaceVariation(aInfo.m_nID); + int nFaceNum = rMgr.getFontFaceNumber(nFontId); + int nVariantNum = rMgr.getFontFaceVariation(nFontId); // inform FreetypeManager about this font provided by the PsPrint subsystem - FontAttributes aDFA = GenPspGraphics::Info2FontAttributes(aInfo); + FontAttributes aDFA = pFont->m_aFontAttributes; aDFA.IncreaseQualityBy(4096); - const OString& rFileName = rMgr.getFontFileSysPath(aInfo.m_nID); - rFreetypeManager.AddFontFile(rFileName, nFaceNum, nVariantNum, aInfo.m_nID, aDFA); + const OString& rFileName = rMgr.getFontFileSysPath(nFontId); + rFreetypeManager.AddFontFile(rFileName, nFaceNum, nVariantNum, nFontId, aDFA); } // announce glyphcache fonts diff --git a/vcl/unx/generic/print/genpspgraphics.cxx b/vcl/unx/generic/print/genpspgraphics.cxx index 9ffc75826b50..66bf4524748f 100644 --- a/vcl/unx/generic/print/genpspgraphics.cxx +++ b/vcl/unx/generic/print/genpspgraphics.cxx @@ -138,22 +138,6 @@ std::unique_ptr<GenericSalLayout> GenPspGraphics::GetTextLayout(int nFallbackLev return m_aTextRenderImpl.GetTextLayout(nFallbackLevel); } -FontAttributes GenPspGraphics::Info2FontAttributes( const psp::FastPrintFontInfo& rInfo ) -{ - FontAttributes aDFA; - aDFA.SetFamilyName( rInfo.m_aFamilyName ); - aDFA.SetStyleName( rInfo.m_aStyleName ); - aDFA.SetFamilyType( rInfo.m_eFamilyStyle ); - aDFA.SetWeight( rInfo.m_eWeight ); - aDFA.SetItalic( rInfo.m_eItalic ); - aDFA.SetWidthType( rInfo.m_eWidth ); - aDFA.SetPitch( rInfo.m_ePitch ); - aDFA.SetMicrosoftSymbolEncoded( rInfo.m_aEncoding == RTL_TEXTENCODING_SYMBOL ); - aDFA.SetQuality(512); - - return aDFA; -} - namespace vcl { const char* getLangBoost() diff --git a/vcl/unx/gtk3/salnativewidgets-gtk.cxx b/vcl/unx/gtk3/salnativewidgets-gtk.cxx index a531a59527db..a3a82edaa1ac 100644 --- a/vcl/unx/gtk3/salnativewidgets-gtk.cxx +++ b/vcl/unx/gtk3/salnativewidgets-gtk.cxx @@ -2219,39 +2219,43 @@ vcl::Font pango_to_vcl(const PangoFontDescription* font, const css::lang::Locale PangoWeight eWeight = pango_font_description_get_weight( font ); PangoStretch eStretch = pango_font_description_get_stretch( font ); - psp::FastPrintFontInfo aInfo; + FontAttributes aDFA; + // set family name - aInfo.m_aFamilyName = OStringToOUString( aFamily, RTL_TEXTENCODING_UTF8 ); + aDFA.SetFamilyName(OStringToOUString(aFamily, RTL_TEXTENCODING_UTF8)); + // set italic switch( eStyle ) { - case PANGO_STYLE_NORMAL: aInfo.m_eItalic = ITALIC_NONE;break; - case PANGO_STYLE_ITALIC: aInfo.m_eItalic = ITALIC_NORMAL;break; - case PANGO_STYLE_OBLIQUE: aInfo.m_eItalic = ITALIC_OBLIQUE;break; + case PANGO_STYLE_NORMAL: aDFA.SetItalic(ITALIC_NONE);break; + case PANGO_STYLE_ITALIC: aDFA.SetItalic(ITALIC_NORMAL);break; + case PANGO_STYLE_OBLIQUE: aDFA.SetItalic(ITALIC_OBLIQUE);break; } + // set weight if( eWeight <= PANGO_WEIGHT_ULTRALIGHT ) - aInfo.m_eWeight = WEIGHT_ULTRALIGHT; + aDFA.SetWeight(WEIGHT_ULTRALIGHT); else if( eWeight <= PANGO_WEIGHT_LIGHT ) - aInfo.m_eWeight = WEIGHT_LIGHT; + aDFA.SetWeight(WEIGHT_LIGHT); else if( eWeight <= PANGO_WEIGHT_NORMAL ) - aInfo.m_eWeight = WEIGHT_NORMAL; + aDFA.SetWeight(WEIGHT_NORMAL); else if( eWeight <= PANGO_WEIGHT_BOLD ) - aInfo.m_eWeight = WEIGHT_BOLD; + aDFA.SetWeight(WEIGHT_BOLD); else - aInfo.m_eWeight = WEIGHT_ULTRABOLD; + aDFA.SetWeight(WEIGHT_ULTRABOLD); + // set width switch( eStretch ) { - case PANGO_STRETCH_ULTRA_CONDENSED: aInfo.m_eWidth = WIDTH_ULTRA_CONDENSED;break; - case PANGO_STRETCH_EXTRA_CONDENSED: aInfo.m_eWidth = WIDTH_EXTRA_CONDENSED;break; - case PANGO_STRETCH_CONDENSED: aInfo.m_eWidth = WIDTH_CONDENSED;break; - case PANGO_STRETCH_SEMI_CONDENSED: aInfo.m_eWidth = WIDTH_SEMI_CONDENSED;break; - case PANGO_STRETCH_NORMAL: aInfo.m_eWidth = WIDTH_NORMAL;break; - case PANGO_STRETCH_SEMI_EXPANDED: aInfo.m_eWidth = WIDTH_SEMI_EXPANDED;break; - case PANGO_STRETCH_EXPANDED: aInfo.m_eWidth = WIDTH_EXPANDED;break; - case PANGO_STRETCH_EXTRA_EXPANDED: aInfo.m_eWidth = WIDTH_EXTRA_EXPANDED;break; - case PANGO_STRETCH_ULTRA_EXPANDED: aInfo.m_eWidth = WIDTH_ULTRA_EXPANDED;break; + case PANGO_STRETCH_ULTRA_CONDENSED: aDFA.SetWidthType(WIDTH_ULTRA_CONDENSED);break; + case PANGO_STRETCH_EXTRA_CONDENSED: aDFA.SetWidthType(WIDTH_EXTRA_CONDENSED);break; + case PANGO_STRETCH_CONDENSED: aDFA.SetWidthType(WIDTH_CONDENSED);break; + case PANGO_STRETCH_SEMI_CONDENSED: aDFA.SetWidthType(WIDTH_SEMI_CONDENSED);break; + case PANGO_STRETCH_NORMAL: aDFA.SetWidthType(WIDTH_NORMAL);break; + case PANGO_STRETCH_SEMI_EXPANDED: aDFA.SetWidthType(WIDTH_SEMI_EXPANDED);break; + case PANGO_STRETCH_EXPANDED: aDFA.SetWidthType(WIDTH_EXPANDED);break; + case PANGO_STRETCH_EXTRA_EXPANDED: aDFA.SetWidthType(WIDTH_EXTRA_EXPANDED);break; + case PANGO_STRETCH_ULTRA_EXPANDED: aDFA.SetWidthType(WIDTH_ULTRA_EXPANDED);break; } #if OSL_DEBUG_LEVEL > 1 @@ -2260,14 +2264,16 @@ vcl::Font pango_to_vcl(const PangoFontDescription* font, const css::lang::Locale #endif // match font to e.g. resolve "Sans" - psp::PrintFontManager::get().matchFont(aInfo, rLocale); + bool bFound = psp::PrintFontManager::get().matchFont(aDFA, rLocale); #if OSL_DEBUG_LEVEL > 1 SAL_INFO("vcl.gtk3", "font match " - << (aInfo.m_nID != 0 ? "succeeded" : "failed") + << (bFound ? "succeeded" : "failed") << ", name AFTER: \"" - << aInfo.m_aFamilyName + << aDFA.GetFamilyName() << "\"."); +#else + (void) bFound; #endif int nPangoHeight = pango_font_description_get_size(font) / PANGO_SCALE; @@ -2280,15 +2286,15 @@ vcl::Font pango_to_vcl(const PangoFontDescription* font, const css::lang::Locale nPangoHeight = nPangoHeight / nDPIY; } - vcl::Font aFont(aInfo.m_aFamilyName, Size(0, nPangoHeight)); - if( aInfo.m_eWeight != WEIGHT_DONTKNOW ) - aFont.SetWeight( aInfo.m_eWeight ); - if( aInfo.m_eWidth != WIDTH_DONTKNOW ) - aFont.SetWidthType( aInfo.m_eWidth ); - if( aInfo.m_eItalic != ITALIC_DONTKNOW ) - aFont.SetItalic( aInfo.m_eItalic ); - if( aInfo.m_ePitch != PITCH_DONTKNOW ) - aFont.SetPitch( aInfo.m_ePitch ); + vcl::Font aFont(aDFA.GetFamilyName(), Size(0, nPangoHeight)); + if (aDFA.GetWeight() != WEIGHT_DONTKNOW) + aFont.SetWeight(aDFA.GetWeight()); + if (aDFA.GetWidthType() != WIDTH_DONTKNOW) + aFont.SetWidthType(aDFA.GetWidthType()); + if (aDFA.GetItalic() != ITALIC_DONTKNOW) + aFont.SetItalic(aDFA.GetItalic()); + if (aDFA.GetPitch() != PITCH_DONTKNOW) + aFont.SetPitch(aDFA.GetPitch()); return aFont; } commit 0c019cb7c13be75210be824e0f1601d59310a23f Author: Khaled Hosny <kha...@libreoffice.org> AuthorDate: Tue Aug 1 18:20:14 2023 +0300 Commit: خالد حسني <kha...@libreoffice.org> CommitDate: Wed Aug 2 11:57:47 2023 +0200 vcl: Drop unused FontAttributes::GetMapNames()/AddMapName() Change-Id: I50e06ad24e95cab39009a8affb876ebc920c1c11 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155168 Tested-by: Jenkins Reviewed-by: خالد حسني <kha...@libreoffice.org> diff --git a/vcl/inc/fontattributes.hxx b/vcl/inc/fontattributes.hxx index 7ae4b4527bf1..2135ba01d436 100644 --- a/vcl/inc/fontattributes.hxx +++ b/vcl/inc/fontattributes.hxx @@ -60,12 +60,10 @@ public: // Device dependent functions int GetQuality() const { return mnQuality; } - const OUString& GetMapNames() const { return maMapNames; } void SetQuality( int nQuality ) { mnQuality = nQuality; } void IncreaseQualityBy( int nQualityAmount ) { mnQuality += nQualityAmount; } - void AddMapName( std::u16string_view ); private: // device independent variables @@ -79,7 +77,6 @@ private: bool mbMicrosoftSymbolEncoded; // Is font microsoft symbol encoded? // device dependent variables - OUString maMapNames; // List of family name aliases separated with ';' int mnQuality; // Quality (used when similar fonts compete) }; @@ -89,22 +86,6 @@ inline void FontAttributes::SetMicrosoftSymbolEncoded(const bool bMicrosoftSymbo mbMicrosoftSymbolEncoded = bMicrosoftSymbolEncoded; } -inline void FontAttributes::AddMapName( std::u16string_view aMapName ) -{ - if( maMapNames.getLength() > 0 ) - { - maMapNames += ";"; - } - - if (aMapName.size() == 0) - { - SAL_WARN("vcl.fonts", "New map name is empty"); - return; - } - - maMapNames += aMapName; -} - #endif // INCLUDED_VCL_INC_FONTATTRIBUTES_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/inc/unx/fontmanager.hxx b/vcl/inc/unx/fontmanager.hxx index 21a8d00aa415..8010c17aabd8 100644 --- a/vcl/inc/unx/fontmanager.hxx +++ b/vcl/inc/unx/fontmanager.hxx @@ -66,7 +66,6 @@ struct FastPrintFontInfo // font attributes OUString m_aFamilyName; OUString m_aStyleName; - std::vector< OUString > m_aAliases; FontFamily m_eFamilyStyle; FontItalic m_eItalic; FontWidth m_eWidth; @@ -96,7 +95,6 @@ class VCL_PLUGIN_PUBLIC PrintFontManager { // font attributes OUString m_aFamilyName; - std::vector<OUString> m_aAliases; OUString m_aStyleName; FontFamily m_eFamilyStyle; FontItalic m_eItalic; diff --git a/vcl/qa/cppunit/physicalfontfamily.cxx b/vcl/qa/cppunit/physicalfontfamily.cxx index d54ce8be6a1e..a720cda0c568 100644 --- a/vcl/qa/cppunit/physicalfontfamily.cxx +++ b/vcl/qa/cppunit/physicalfontfamily.cxx @@ -82,7 +82,6 @@ void VclPhysicalFontFamilyTest::testAddOneFontFace() FontAttributes aFontAttrs; aFontAttrs.SetFamilyName("Test font face"); - aFontAttrs.AddMapName(u"Alias name"); aFontAttrs.SetFamilyType(FontFamily::FAMILY_ROMAN); aFontAttrs.SetPitch(FontPitch::PITCH_VARIABLE); aFontAttrs.SetItalic(FontItalic::ITALIC_NONE); @@ -108,7 +107,6 @@ void VclPhysicalFontFamilyTest::testAddTwoFontFaces() FontAttributes aFontAttrs; aFontAttrs.SetFamilyName("Test font face"); - aFontAttrs.AddMapName(u"Alias name"); aFontAttrs.SetFamilyType(FontFamily::FAMILY_ROMAN); aFontAttrs.SetPitch(FontPitch::PITCH_VARIABLE); aFontAttrs.SetItalic(FontItalic::ITALIC_NONE); @@ -119,7 +117,6 @@ void VclPhysicalFontFamilyTest::testAddTwoFontFaces() aFamily.AddFontFace(new TestFontFace(aFontAttrs, 1)); aFontAttrs.SetFamilyName("Test font face"); - aFontAttrs.AddMapName(u"Alias name 2"); aFontAttrs.SetFamilyType(FontFamily::FAMILY_ROMAN); aFontAttrs.SetPitch(FontPitch::PITCH_VARIABLE); aFontAttrs.SetItalic(FontItalic::ITALIC_NORMAL); diff --git a/vcl/unx/generic/fontmanager/fontmanager.cxx b/vcl/unx/generic/fontmanager/fontmanager.cxx index 748017252987..2a6333f6d93e 100644 --- a/vcl/unx/generic/fontmanager/fontmanager.cxx +++ b/vcl/unx/generic/fontmanager/fontmanager.cxx @@ -520,12 +520,11 @@ bool PrintFontManager::analyzeSfntFile( PrintFont& rFont ) const TTGlobalFontInfo aInfo; GetTTGlobalFontInfo( pTTFont, & aInfo ); - ::std::vector< OUString > aNames; - analyzeSfntFamilyName( pTTFont, aNames ); - - // set family name from XLFD if possible if (rFont.m_aFamilyName.isEmpty()) { + ::std::vector< OUString > aNames; + analyzeSfntFamilyName( pTTFont, aNames ); + if( !aNames.empty() ) { rFont.m_aFamilyName = aNames.front(); @@ -544,18 +543,6 @@ bool PrintFontManager::analyzeSfntFile( PrintFont& rFont ) const rFont.m_aFamilyName = OStringToOUString(rFont.m_aFontFile.subView(0, dotIndex), aEncoding); } } - for (auto const& aAlias : aNames) - { - if (!aAlias.isEmpty()) - { - if (rFont.m_aFamilyName != aAlias) - { - auto al_it = std::find(rFont.m_aAliases.begin(), rFont.m_aAliases.end(), aAlias); - if( al_it == rFont.m_aAliases.end() ) - rFont.m_aAliases.push_back(aAlias); - } - } - } if( !aInfo.usubfamily.isEmpty() ) rFont.m_aStyleName = aInfo.usubfamily; @@ -698,7 +685,6 @@ void PrintFontManager::fillPrintFontInfo(const PrintFont& rFont, FastPrintFontIn rInfo.m_eWeight = rFont.m_eWeight; rInfo.m_ePitch = rFont.m_ePitch; rInfo.m_aEncoding = rFont.m_aEncoding; - rInfo.m_aAliases = rFont.m_aAliases; } bool PrintFontManager::getFontFastInfo( fontID nFontID, FastPrintFontInfo& rInfo ) const diff --git a/vcl/unx/generic/print/genpspgraphics.cxx b/vcl/unx/generic/print/genpspgraphics.cxx index 9f08cf11b5f2..9ffc75826b50 100644 --- a/vcl/unx/generic/print/genpspgraphics.cxx +++ b/vcl/unx/generic/print/genpspgraphics.cxx @@ -151,17 +151,6 @@ FontAttributes GenPspGraphics::Info2FontAttributes( const psp::FastPrintFontInfo aDFA.SetMicrosoftSymbolEncoded( rInfo.m_aEncoding == RTL_TEXTENCODING_SYMBOL ); aDFA.SetQuality(512); - // add font family name aliases - for (auto const& alias : rInfo.m_aAliases) - aDFA.AddMapName(alias); - -#if OSL_DEBUG_LEVEL > 2 - if( aDFA.GetMapNames().getLength() > 0 ) - { - SAL_INFO( "vcl.fonts", "using alias names " << aDFA.GetMapNames() << " for font family " << aDFA.GetFamilyName() ); - } -#endif - return aDFA; }