vcl/generic/glyphs/graphite_serverfont.cxx | 4 ++-- vcl/inc/graphite_layout.hxx | 18 +++++++++++------- 2 files changed, 13 insertions(+), 9 deletions(-)
New commits: commit 19af334c922a9f3a25db68bc90ceb9446eeb79b0 Author: Martin Hosken <martin_hos...@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 <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> (cherry picked from commit 0ed14401925d16932ed98bc418d395adac047b39) Reviewed-on: https://gerrit.libreoffice.org/14440 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 7356bd5..8941a40 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;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits