diff options
author | Caolán McNamara <caolanm@redhat.com> | 2011-08-02 14:42:54 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2011-08-02 14:42:54 +0100 |
commit | ed8134d7167c8421fd88f018c6c68342734e8fa6 (patch) | |
tree | c89f1e8a14b1f6fa93f2198219eba2e50dc970b5 /vcl/unx/generic/gdi/salgdi3.cxx | |
parent | 2bb1ba5c3f802db299a80ede39c5e3f6e498cd65 (diff) |
add vertical layout as a distinguishing font layout attribute
Diffstat (limited to 'vcl/unx/generic/gdi/salgdi3.cxx')
-rw-r--r-- | vcl/unx/generic/gdi/salgdi3.cxx | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/vcl/unx/generic/gdi/salgdi3.cxx b/vcl/unx/generic/gdi/salgdi3.cxx index aa4e90ef3c62..49ab62fb2044 100644 --- a/vcl/unx/generic/gdi/salgdi3.cxx +++ b/vcl/unx/generic/gdi/salgdi3.cxx @@ -371,26 +371,11 @@ void X11SalGraphics::DrawCairoAAFontString( const ServerFontLayout& rLayout ) ServerFont& rFont = rLayout.GetServerFont(); - cairo_font_face_t* font_face = NULL; - void* pFace = rFont.GetFtFace(); CairoFontsCache::CacheId aId; aId.mpFace = pFace; aId.mpOptions = rFont.GetFontOptions().get(); aId.mbEmbolden = rFont.NeedsArtificialBold(); - font_face = (cairo_font_face_t*)m_aCairoFontsCache.FindCachedFont(aId); - if (!font_face) - { - const ImplFontOptions *pOptions = rFont.GetFontOptions().get(); - void *pPattern = pOptions ? pOptions->GetPattern(pFace, aId.mbEmbolden) : NULL; - if (pPattern) - font_face = cairo_ft_font_face_create_for_pattern(reinterpret_cast<FcPattern*>(pPattern)); - if (!font_face) - font_face = cairo_ft_font_face_create_for_ft_face(reinterpret_cast<FT_Face>(pFace), rFont.GetLoadFlags()); - m_aCairoFontsCache.CacheFont(font_face, aId); - } - - cairo_set_font_face(cr, font_face); cairo_matrix_t m; const ImplFontSelectData& rFSD = rFont.GetFontSelData(); @@ -409,6 +394,20 @@ void X11SalGraphics::DrawCairoAAFontString( const ServerFontLayout& rLayout ) size_t nStartIndex = std::distance(aStart, aI); size_t nLen = std::distance(aI, aNext); + aId.mbVerticalMetrics = nGlyphRotation != 0.0; + cairo_font_face_t* font_face = (cairo_font_face_t*)m_aCairoFontsCache.FindCachedFont(aId); + if (!font_face) + { + const ImplFontOptions *pOptions = rFont.GetFontOptions().get(); + void *pPattern = pOptions ? pOptions->GetPattern(pFace, aId.mbEmbolden, aId.mbVerticalMetrics) : NULL; + if (pPattern) + font_face = cairo_ft_font_face_create_for_pattern(reinterpret_cast<FcPattern*>(pPattern)); + if (!font_face) + font_face = cairo_ft_font_face_create_for_ft_face(reinterpret_cast<FT_Face>(pFace), rFont.GetLoadFlags()); + m_aCairoFontsCache.CacheFont(font_face, aId); + } + cairo_set_font_face(cr, font_face); + cairo_set_font_size(cr, nHeight); cairo_matrix_init_identity(&m); |