Author: ianmacarthur
Date: 2011-04-07 02:28:45 -0700 (Thu, 07 Apr 2011)
New Revision: 8570
Log:

Replace a few instances of fl_utf8toUtf16() with the near-equivalent MS API 
call MultiByteToWideChar() as this seems to fix the regression I introduced in 
the rendering of rotated text on WinXP.
However... It does not cause the "high" Unicode code points to render correctly 
on XP, even though they do work on Vista (and I assume later variants like 
Win7...)
So there's still something I am missing here. Maybe XP is just broken? That'll 
be a problem...



Modified:
   branches/branch-1.3/src/fl_font_win32.cxx

Modified: branches/branch-1.3/src/fl_font_win32.cxx
===================================================================
--- branches/branch-1.3/src/fl_font_win32.cxx   2011-04-07 07:51:26 UTC (rev 
8569)
+++ branches/branch-1.3/src/fl_font_win32.cxx   2011-04-07 09:28:45 UTC (rev 
8570)
@@ -355,9 +355,9 @@
     }
     // 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 @@
   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);

_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit

Reply via email to