[ros-diffs] [sgasiorek] 26839: - add support for ETO_GLYPH_INDEX in NtGdiExtTextOut. (fixes character shift problem in QT apps) see bug #975

sgasiorek at svn.reactos.org sgasiorek at svn.reactos.org
Sat May 19 15:55:24 CEST 2007


Author: sgasiorek
Date: Sat May 19 17:55:23 2007
New Revision: 26839

URL: http://svn.reactos.org/svn/reactos?rev=26839&view=rev
Log:
- add support for ETO_GLYPH_INDEX in NtGdiExtTextOut.
  (fixes character shift problem in QT apps) see bug #975

Modified:
    trunk/reactos/subsystems/win32/win32k/objects/text.c

Modified: trunk/reactos/subsystems/win32/win32k/objects/text.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/text.c?rev=26839&r1=26838&r2=26839&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/text.c (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/text.c Sat May 19 17:55:23 2007
@@ -1863,7 +1863,11 @@
 
       for (i = Start; i < Count; i++)
       {
-         glyph_index = FT_Get_Char_Index(face, *TempText);
+         if (fuOptions & ETO_GLYPH_INDEX)
+           glyph_index = *TempText;
+         else
+           glyph_index = FT_Get_Char_Index(face, *TempText);
+
          if (!(realglyph = NtGdiGlyphCacheGet(face, glyph_index,
          TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight)))
          {
@@ -1913,21 +1917,28 @@
 
    for (i = 0; i < Count; i++)
    {
-      glyph_index = FT_Get_Char_Index(face, *String);
+      if (fuOptions & ETO_GLYPH_INDEX)
+        glyph_index = *String;
+      else
+        glyph_index = FT_Get_Char_Index(face, *String);
+
       if (!(realglyph = NtGdiGlyphCacheGet(face, glyph_index, 
       TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight)))
       {
-      error = FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT);
-
-      if (error)
-      {
-         DPRINT1("WARNING: Failed to load and render glyph! [index: %u]\n", glyph_index);
-         IntUnLockFreeType;
-         goto fail;
-      }
-      glyph = face->glyph;
-         realglyph = NtGdiGlyphCacheSet(face, glyph_index, 
-         TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight, glyph, RenderMode);
+        error = FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT);
+
+        if (error)
+        {
+           DPRINT1("WARNING: Failed to load and render glyph! [index: %u]\n", glyph_index);
+           IntUnLockFreeType;
+           goto fail;
+        }
+        glyph = face->glyph;
+        realglyph = NtGdiGlyphCacheSet(face, 
+                                       glyph_index, 
+                                       TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight, 
+                                       glyph, 
+                                       RenderMode);
       }
 //      DbgPrint("realglyph: %x\n", realglyph);
 //      DbgPrint("TextLeft: %d\n", TextLeft);




More information about the Ros-diffs mailing list