[Libreoffice-commits] core.git: vcl/inc vcl/unx

Caolán McNamara caolanm at redhat.com
Thu Nov 24 10:06:52 UTC 2016


 vcl/inc/unx/cairotextrender.hxx                |    3 -
 vcl/inc/unx/fc_fontoptions.hxx                 |    1 
 vcl/inc/unx/fontmanager.hxx                    |    2 -
 vcl/inc/unx/glyphcache.hxx                     |    4 --
 vcl/unx/generic/fontmanager/fontconfig.cxx     |    6 +--
 vcl/unx/generic/gdi/cairotextrender.cxx        |   38 +------------------------
 vcl/unx/generic/glyphs/freetype_glyphcache.cxx |   19 ++++++++++--
 vcl/unx/generic/glyphs/glyphcache.cxx          |    1 
 8 files changed, 23 insertions(+), 51 deletions(-)

New commits:
commit b30e298c3f8d9202a14e0ca08120ccde31e413ee
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Nov 24 08:54:11 2016 +0000

    move the FontConfigFontOptions out of FreetypeFontInstance now
    
    Change-Id: Ic6ff21533a53df16fed4ee086f78ff368cb23afd
    Reviewed-on: https://gerrit.libreoffice.org/31130
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/vcl/inc/unx/cairotextrender.hxx b/vcl/inc/unx/cairotextrender.hxx
index 0735d059..1aeaf06 100644
--- a/vcl/inc/unx/cairotextrender.hxx
+++ b/vcl/inc/unx/cairotextrender.hxx
@@ -26,7 +26,6 @@
 
 #include <deque>
 
-class FontConfigFontOptions;
 class FreetypeFont;
 class GlyphCache;
 typedef struct _cairo cairo_t;
@@ -95,8 +94,6 @@ public:
 #endif
 };
 
-FontConfigFontOptions* GetFCFontOptions( const FontAttributes& rFontAttributes, int nSize);
-
 #endif
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/inc/unx/fc_fontoptions.hxx b/vcl/inc/unx/fc_fontoptions.hxx
index 48661de..3c34610 100644
--- a/vcl/inc/unx/fc_fontoptions.hxx
+++ b/vcl/inc/unx/fc_fontoptions.hxx
@@ -53,6 +53,7 @@ public:
     bool                DontUseHinting() const { return (meHinting == FontHinting::No) || (GetHintStyle() == FontHintStyle::NONE); }
     void                SyncPattern(const OString& rFileName, int nFontFace, bool bEmbolden);
     FcPattern*          GetPattern() const;
+    static void         cairo_font_options_substitute(FcPattern* pPattern);
 private:
     FcPattern* mpPattern;
 };
diff --git a/vcl/inc/unx/fontmanager.hxx b/vcl/inc/unx/fontmanager.hxx
index 057436a..7f0e057 100644
--- a/vcl/inc/unx/fontmanager.hxx
+++ b/vcl/inc/unx/fontmanager.hxx
@@ -492,7 +492,7 @@ public:
     in different fonts in e.g. english and japanese
      */
     void matchFont( FastPrintFontInfo& rInfo, const css::lang::Locale& rLocale );
-    static FontConfigFontOptions* getFontOptions( const FastPrintFontInfo&, int nSize, void (*subcallback)(void*));
+    static FontConfigFontOptions* getFontOptions( const FastPrintFontInfo&, int nSize);
 
     void Substitute( FontSelectPattern &rPattern, OUString& rMissingCodes );
 
diff --git a/vcl/inc/unx/glyphcache.hxx b/vcl/inc/unx/glyphcache.hxx
index 9d3f011..ac52a6a 100644
--- a/vcl/inc/unx/glyphcache.hxx
+++ b/vcl/inc/unx/glyphcache.hxx
@@ -252,13 +252,9 @@ public:
     virtual                 ~FreetypeFontInstance() override;
 
     void                    SetFreetypeFont(FreetypeFont* p);
-    void                    HandleFontOptions();
 
 private:
     FreetypeFont*           mpFreetypeFont;
-    std::shared_ptr<FontConfigFontOptions> mxFontOptions;
-    bool                    mbGotFontOptions;
-
 };
 
 class VCL_DLLPUBLIC ServerFontLayout : public GenericSalLayout
diff --git a/vcl/unx/generic/fontmanager/fontconfig.cxx b/vcl/unx/generic/fontmanager/fontconfig.cxx
index 81285eb..dd9d17b 100644
--- a/vcl/unx/generic/fontmanager/fontconfig.cxx
+++ b/vcl/unx/generic/fontmanager/fontconfig.cxx
@@ -1169,8 +1169,7 @@ void FontConfigFontOptions::SyncPattern(const OString& rFileName, int nIndex, bo
     FcPatternAddBool(mpPattern, FC_EMBOLDEN, bEmbolden ? FcTrue : FcFalse);
 }
 
-FontConfigFontOptions* PrintFontManager::getFontOptions(
-    const FastPrintFontInfo& rInfo, int nSize, void (*subcallback)(void*))
+FontConfigFontOptions* PrintFontManager::getFontOptions(const FastPrintFontInfo& rInfo, int nSize)
 {
     FontCfgWrapper& rWrapper = FontCfgWrapper::get();
 
@@ -1193,8 +1192,7 @@ FontConfigFontOptions* PrintFontManager::getFontOptions(
     int hintstyle = FC_HINT_FULL;
 
     FcConfigSubstitute(pConfig, pPattern, FcMatchPattern);
-    if (subcallback)
-        subcallback(pPattern);
+    FontConfigFontOptions::cairo_font_options_substitute(pPattern);
     FcDefaultSubstitute(pPattern);
 
     FcResult eResult = FcResultNoMatch;
diff --git a/vcl/unx/generic/gdi/cairotextrender.cxx b/vcl/unx/generic/gdi/cairotextrender.cxx
index 55d5e49..eb941e2 100644
--- a/vcl/unx/generic/gdi/cairotextrender.cxx
+++ b/vcl/unx/generic/gdi/cairotextrender.cxx
@@ -138,31 +138,12 @@ bool CairoTextRender::setFont( const FontSelectPattern *pEntry, int nFallbackLev
         // register to use the font
         mpFreetypeFont[ nFallbackLevel ] = pFreetypeFont;
 
-        // apply font specific-hint settings
-        FreetypeFontInstance* pSFE = static_cast<FreetypeFontInstance*>( pEntry->mpFontInstance );
-        pSFE->HandleFontOptions();
-
         return true;
     }
 
     return false;
 }
 
-void FreetypeFontInstance::HandleFontOptions()
-{
-    if( !mpFreetypeFont )
-        return;
-    if( !mbGotFontOptions )
-    {
-        // get and cache the font options
-        mbGotFontOptions = true;
-        mxFontOptions.reset(GetFCFontOptions( *maFontSelData.mpFontData,
-            maFontSelData.mnHeight ));
-    }
-    // apply the font options
-    mpFreetypeFont->SetFontOptions(mxFontOptions);
-}
-
 void CairoFontsCache::CacheFont(void *pFont, const CairoFontsCache::CacheId &rId)
 {
     maLRUFonts.push_front( std::pair<void*, CairoFontsCache::CacheId>(pFont, rId) );
@@ -461,29 +442,16 @@ void CairoTextRender::GetDevFontList( PhysicalFontCollection* pFontCollection )
     ImplGetSVData()->maGDIData.mbNativeFontConfig = true;
 }
 
-void cairosubcallback(void* pPattern)
+void FontConfigFontOptions::cairo_font_options_substitute(FcPattern* pPattern)
 {
     ImplSVData* pSVData = ImplGetSVData();
     const cairo_font_options_t* pFontOptions = pSVData->mpDefInst->GetCairoFontOptions();
     if( !pFontOptions )
         return;
-    cairo_ft_font_options_substitute(pFontOptions, static_cast<FcPattern*>(pPattern));
+    cairo_ft_font_options_substitute(pFontOptions, pPattern);
 }
 
-FontConfigFontOptions* GetFCFontOptions( const FontAttributes& rFontAttributes, int nSize)
-{
-    psp::FastPrintFontInfo aInfo;
-
-    aInfo.m_aFamilyName = rFontAttributes.GetFamilyName();
-    aInfo.m_eItalic = rFontAttributes.GetItalic();
-    aInfo.m_eWeight = rFontAttributes.GetWeight();
-    aInfo.m_eWidth = rFontAttributes.GetWidthType();
-
-    return psp::PrintFontManager::getFontOptions(aInfo, nSize, cairosubcallback);
-}
-
-void
-CairoTextRender::GetFontMetric( ImplFontMetricDataRef& rxFontMetric, int nFallbackLevel )
+void CairoTextRender::GetFontMetric( ImplFontMetricDataRef& rxFontMetric, int nFallbackLevel )
 {
     if( nFallbackLevel >= MAX_FALLBACK )
         return;
diff --git a/vcl/unx/generic/glyphs/freetype_glyphcache.cxx b/vcl/unx/generic/glyphs/freetype_glyphcache.cxx
index 9a72bf3..6df2bba 100644
--- a/vcl/unx/generic/glyphs/freetype_glyphcache.cxx
+++ b/vcl/unx/generic/glyphs/freetype_glyphcache.cxx
@@ -20,7 +20,6 @@
 
 #include <vcl/fontcharmap.hxx>
 
-#include <unx/cairotextrender.hxx>
 #include "unx/freetype_glyphcache.hxx"
 
 #include <vcl/svapp.hxx>
@@ -589,14 +588,28 @@ void FreetypeFont::SetFontOptions(const std::shared_ptr<FontConfigFontOptions>&
         mnLoadFlags |= FT_LOAD_NO_BITMAP;
 }
 
+namespace
+{
+    FontConfigFontOptions* GetFCFontOptions( const FontAttributes& rFontAttributes, int nSize)
+    {
+        psp::FastPrintFontInfo aInfo;
+
+        aInfo.m_aFamilyName = rFontAttributes.GetFamilyName();
+        aInfo.m_eItalic = rFontAttributes.GetItalic();
+        aInfo.m_eWeight = rFontAttributes.GetWeight();
+        aInfo.m_eWidth = rFontAttributes.GetWidthType();
+
+        return psp::PrintFontManager::getFontOptions(aInfo, nSize);
+    }
+}
+
 const std::shared_ptr<FontConfigFontOptions>& FreetypeFont::GetFontOptions() const
 {
     if (!mxFontOptions)
     {
-        SAL_WARN("vcl", "this doesn't happen in practice I believe");
         mxFontOptions.reset(GetFCFontOptions(mpFontInfo->GetFontAttributes(), maFontSelData.mnHeight));
+        mxFontOptions->SyncPattern(GetFontFileName(), GetFontFaceIndex(), NeedsArtificialBold());
     }
-    mxFontOptions->SyncPattern(GetFontFileName(), GetFontFaceIndex(), NeedsArtificialBold());
     return mxFontOptions;
 }
 
diff --git a/vcl/unx/generic/glyphs/glyphcache.cxx b/vcl/unx/generic/glyphs/glyphcache.cxx
index de4bb96..3cece78 100644
--- a/vcl/unx/generic/glyphs/glyphcache.cxx
+++ b/vcl/unx/generic/glyphs/glyphcache.cxx
@@ -343,7 +343,6 @@ void FreetypeFont::GarbageCollect( long nMinLruIndex )
 FreetypeFontInstance::FreetypeFontInstance( FontSelectPattern& rFSD )
 :   LogicalFontInstance( rFSD )
 ,   mpFreetypeFont( nullptr )
-,   mbGotFontOptions( false )
 {}
 
 void FreetypeFontInstance::SetFreetypeFont(FreetypeFont* p)


More information about the Libreoffice-commits mailing list