summaryrefslogtreecommitdiff
path: root/vcl/unx/generic/gdi/salgdi3.cxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2011-08-02 14:42:54 +0100
committerCaolán McNamara <caolanm@redhat.com>2011-08-02 14:42:54 +0100
commited8134d7167c8421fd88f018c6c68342734e8fa6 (patch)
treec89f1e8a14b1f6fa93f2198219eba2e50dc970b5 /vcl/unx/generic/gdi/salgdi3.cxx
parent2bb1ba5c3f802db299a80ede39c5e3f6e498cd65 (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.cxx29
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);