summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/fl_font_win32.cxx21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/fl_font_win32.cxx b/src/fl_font_win32.cxx
index 82e0075f2..5a7eef1d1 100644
--- a/src/fl_font_win32.cxx
+++ b/src/fl_font_win32.cxx
@@ -355,9 +355,9 @@ void Fl_GDI_Graphics_Driver::draw(const char* str, int n, int x, int y) {
}
// Do we need a surrogate pair for this UCS value?
if(u > 0xFFFF) {
- cc = fl_utf8toUtf16((str + i), l, ucs, 4);
-// This is the - essentially identical - MS API equivalent
-//cc = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, (str + i), l, (WCHAR*)ucs, 4);
+ //cc = fl_utf8toUtf16((str + i), l, ucs, 4);
+ // This is the MS API equivalent to fl_utf8toUtf16()
+ cc = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, (str + i), l, (WCHAR*)ucs, 4);
}
else { // not a surrogate pair, use a single value
ucs[0] = u;
@@ -377,12 +377,15 @@ void Fl_GDI_Graphics_Driver::draw(int angle, const char* str, int n, int x, int
COLORREF oldColor = SetTextColor(fl_gc, fl_RGB());
SelectObject(fl_gc, font_descriptor()->fid);
unsigned short* ucs = new unsigned short[n]; // alloc an array for the UTF16 string
- wc_count = fl_utf8toUtf16(str, n, ucs, n);
- if(wc_count > n) { // Array too small - this should never happen...
- delete[] ucs; // free up the initial allocation
- ucs = new unsigned short[wc_count + 4]; // make a "big enough" array
- wc_count = fl_utf8toUtf16(str, n, ucs, wc_count); // respin the translation
- }
+ //wc_count = fl_utf8toUtf16(str, n, ucs, n);
+ // This is the MS API equivalent to fl_utf8toUtf16()
+ wc_count = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str, n, (WCHAR*)ucs, n);
+// if(wc_count > n) { // Array too small - this should never happen...
+// delete[] ucs; // free up the initial allocation
+// ucs = new unsigned short[wc_count + 4]; // make a "big enough" array
+// //wc_count = fl_utf8toUtf16(str, n, ucs, wc_count); // respin the translation
+// wc_count = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str, n, (WCHAR*)ucs, wc_count);
+// }
TextOutW(fl_gc, x, y, (WCHAR*)ucs, wc_count);
delete[] ucs;
SetTextColor(fl_gc, oldColor);