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

Martin Hosken martin_hosken at sil.org
Thu Feb 12 02:39:08 PST 2015


 vcl/generic/glyphs/graphite_serverfont.cxx |    4 ++--
 vcl/inc/graphite_layout.hxx                |   18 +++++++++++-------
 2 files changed, 13 insertions(+), 9 deletions(-)

New commits:
commit 0ed14401925d16932ed98bc418d395adac047b39
Author: Martin Hosken <martin_hosken at sil.org>
Date:   Mon Feb 9 16:49:12 2015 +0700

    Resolves: tdf#89252 Fix bold, regular font spacing bug for Graphite fonts
    
    Change-Id: I31a09fa753ed15e302e5407ce8a0c46f3b13e099
    Reviewed-on: https://gerrit.libreoffice.org/14380
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/vcl/generic/glyphs/graphite_serverfont.cxx b/vcl/generic/glyphs/graphite_serverfont.cxx
index 09159e4..3549c01 100644
--- a/vcl/generic/glyphs/graphite_serverfont.cxx
+++ b/vcl/generic/glyphs/graphite_serverfont.cxx
@@ -48,7 +48,7 @@ GraphiteServerFontLayout::GraphiteServerFontLayout(ServerFont& rServerFont) thro
     , mpFeatures(NULL)
     , mpStr(NULL)
 {
-    gr_font * pFont = rServerFont.GetGraphiteFace()->font(rServerFont.GetFontSelData().mnHeight);
+    gr_font * pFont = rServerFont.GetGraphiteFace()->font(rServerFont.GetFontSelData().mnHeight, rServerFont.NeedsArtificialBold(), rServerFont.NeedsArtificialItalic());
     if (!pFont)
     {
         pFont = gr_make_font_with_advance_fn(
@@ -57,7 +57,7 @@ GraphiteServerFontLayout::GraphiteServerFontLayout(ServerFont& rServerFont) thro
                &rServerFont,
                freetypeServerFontAdvance,
                rServerFont.GetGraphiteFace()->face());
-        rServerFont.GetGraphiteFace()->addFont(rServerFont.GetFontSelData().mnHeight, pFont);
+        rServerFont.GetGraphiteFace()->addFont(rServerFont.GetFontSelData().mnHeight, pFont, rServerFont.NeedsArtificialBold(), rServerFont.NeedsArtificialItalic());
     }
     maImpl.SetFont(pFont);
     OString aLang("");
diff --git a/vcl/inc/graphite_layout.hxx b/vcl/inc/graphite_layout.hxx
index f8abb79..7ccbe15 100644
--- a/vcl/inc/graphite_layout.hxx
+++ b/vcl/inc/graphite_layout.hxx
@@ -52,7 +52,8 @@ namespace grutils { class GrFeatureParser; }
 class GraphiteFaceWrapper
 {
 public:
-    typedef std::map<int, gr_font*> GrFontMap;
+    typedef std::pair<int, int> GrFontMapKey;
+    typedef std::map<GrFontMapKey, gr_font*> GrFontMap;
     GraphiteFaceWrapper(gr_face * pFace) : m_pFace(pFace) {}
     ~GraphiteFaceWrapper()
     {
@@ -63,18 +64,21 @@ public:
         gr_face_destroy(m_pFace);
     }
     const gr_face * face() const { return m_pFace; }
-    gr_font * font(int ppm) const
+    gr_font * font(int ppm, bool isBold, bool isItalic) const
     {
-        GrFontMap::const_iterator i = m_fonts.find(ppm);
+        int styleKey = int(isBold) | (int(isItalic) << 1);
+        GrFontMap::const_iterator i = m_fonts.find(GrFontMapKey(ppm, styleKey));
         if (i != m_fonts.end())
             return i->second;
         return NULL;
     };
-    void addFont(int ppm, gr_font * pFont)
+    void addFont(int ppm, gr_font * pFont, bool isBold, bool isItalic)
     {
-        if (m_fonts[ppm])
-            gr_font_destroy(m_fonts[ppm]);
-        m_fonts[ppm] = pFont;
+        int styleKey = int(isBold) | (int(isItalic) << 1);
+        GrFontMapKey key(ppm, styleKey);
+        if (m_fonts[key])
+            gr_font_destroy(m_fonts[key]);
+        m_fonts[key] = pFont;
     }
 private:
     gr_face * m_pFace;


More information about the Libreoffice-commits mailing list