summaryrefslogtreecommitdiff
path: root/canvas/source/cairo/cairo_textlayout.cxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2015-03-19 15:59:56 +0000
committerCaolán McNamara <caolanm@redhat.com>2015-03-19 23:38:18 +0000
commitb517c251a733692f39d02f986e5010f214aea697 (patch)
tree9b60580cdd2a6441dd727a887b408058e0928022 /canvas/source/cairo/cairo_textlayout.cxx
parent181feb38d95e25980b96c2f6802cc906410abb13 (diff)
move ucs4toindex
Change-Id: I8ae441a68ba74422c607a8830325c3afa954ad92 Reviewed-on: https://gerrit.libreoffice.org/14908 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'canvas/source/cairo/cairo_textlayout.cxx')
-rw-r--r--canvas/source/cairo/cairo_textlayout.cxx43
1 files changed, 42 insertions, 1 deletions
diff --git a/canvas/source/cairo/cairo_textlayout.cxx b/canvas/source/cairo/cairo_textlayout.cxx
index 9b1fa47ff0d0..936593acf760 100644
--- a/canvas/source/cairo/cairo_textlayout.cxx
+++ b/canvas/source/cairo/cairo_textlayout.cxx
@@ -325,6 +325,47 @@ namespace cairocanvas
return true;
}
+#ifdef CAIRO_HAS_WIN32_SURFACE
+ namespace
+ {
+ /**
+ * cairo::ucs4toindex: Convert ucs4 char to glyph index
+ * @param ucs4 an ucs4 char
+ * @param hfont current font
+ *
+ * @return true if successful
+ **/
+ unsigned long ucs4toindex(unsigned int ucs4, HFONT hfont)
+ {
+ wchar_t unicode[2];
+ WORD glyph_index;
+ HDC hdc = NULL;
+
+ hdc = CreateCompatibleDC (NULL);
+
+ if (!hdc) return 0;
+ if (!SetGraphicsMode (hdc, GM_ADVANCED))
+ {
+ DeleteDC (hdc);
+ return 0;
+ }
+
+ SelectObject (hdc, hfont);
+ SetMapMode (hdc, MM_TEXT);
+
+ unicode[0] = ucs4;
+ unicode[1] = 0;
+ if (GetGlyphIndicesW (hdc, unicode, 1, &glyph_index, 0) == GDI_ERROR)
+ {
+ glyph_index = 0;
+ }
+
+ DeleteDC (hdc);
+ return glyph_index;
+ }
+ }
+#endif
+
/**
* TextLayout::draw
*
@@ -446,7 +487,7 @@ namespace cairocanvas
#ifdef CAIRO_HAS_WIN32_SURFACE
// Cairo requires standard glyph indexes (ETO_GLYPH_INDEX), while vcl/win/* uses ucs4 chars.
// Convert to standard indexes
- aGlyph.index = cairo::ucs4toindex((unsigned int) aGlyph.index, rSysFontData.hFont);
+ aGlyph.index = ucs4toindex((unsigned int) aGlyph.index, rSysFontData.hFont);
#endif
aGlyph.x = systemGlyph.x;
aGlyph.y = systemGlyph.y;