Aric Stewart : gdi32: Fall back on uniscribe for complex scripts.

Alexandre Julliard julliard at winehq.org
Mon Jun 6 15:19:08 CDT 2011


Module: wine
Branch: master
Commit: 0a29308e87780a7f0f6c5504ad80768443166cbb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0a29308e87780a7f0f6c5504ad80768443166cbb

Author: Aric Stewart <aric at codeweavers.com>
Date:   Mon Jun  6 07:43:07 2011 -0500

gdi32: Fall back on uniscribe for complex scripts.

---

 dlls/gdi32/bidi.c |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/dlls/gdi32/bidi.c b/dlls/gdi32/bidi.c
index 297ce86..9b8f758 100644
--- a/dlls/gdi32/bidi.c
+++ b/dlls/gdi32/bidi.c
@@ -359,6 +359,7 @@ BOOL BIDI_Reorder(
     WORD *chartype;
     BYTE *levels;
     unsigned i, done, glyph_i;
+    BOOL is_complex;
 
     int maxItems;
     int nItems;
@@ -404,11 +405,20 @@ BOOL BIDI_Reorder(
     if (lpOutString)
         memcpy(lpOutString, lpString, uCount * sizeof(WCHAR));
 
+    is_complex = FALSE;
+    for (i = 0; i < uCount && !is_complex; i++)
+    {
+        if ((lpString[i] >= 0x900 && lpString[i] <= 0xfff) ||
+            (lpString[i] >= 0x1cd0 && lpString[i] <= 0x1cff) ||
+            (lpString[i] >= 0xa840 && lpString[i] <= 0xa8ff))
+            is_complex = TRUE;
+    }
+
     /* Verify reordering will be required */
     if ((WINE_GCPW_FORCE_RTL == (dwWineGCP_Flags&WINE_GCPW_DIR_MASK)) ||
         ((dwWineGCP_Flags&WINE_GCPW_DIR_MASK) == WINE_GCPW_LOOSE_RTL))
         State.uBidiLevel = 1;
-    else
+    else if (!is_complex)
     {
         done = 1;
         classify(lpString, chartype, uCount);




More information about the wine-cvs mailing list