patch from Yaroslav Ponomarenko yarryp at gmail dot com
authorMagnus Olsen <magnus@greatlord.com>
Tue, 10 Jul 2007 17:44:23 +0000 (17:44 +0000)
committerMagnus Olsen <magnus@greatlord.com>
Tue, 10 Jul 2007 17:44:23 +0000 (17:44 +0000)
NtGdiExtTextOut did try render no existed glyth in the glyth cache

svn path=/trunk/; revision=27568

reactos/subsystems/win32/win32k/objects/text.c

index e2e90e0..e50ad0a 100644 (file)
@@ -1872,15 +1872,22 @@ NtGdiExtTextOut(
          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);
-         }
+             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);
+             }
+
+             glyph = face->glyph;
+             realglyph = NtGdiGlyphCacheSet(face, glyph_index, 
+                TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight, glyph, RenderMode);
+             if (!realglyph)
+             {
+                 DPRINT1("Failed to 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);
          }
          /* retrieve kerning distance */
          if (use_kerning && previous && glyph_index)
@@ -1927,10 +1934,9 @@ NtGdiExtTextOut(
       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);
+           DPRINT1("Failed to load and render glyph! [index: %u]\n", glyph_index);
            IntUnLockFreeType;
            goto fail;
         }
@@ -1940,6 +1946,12 @@ NtGdiExtTextOut(
                                        TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight, 
                                        glyph, 
                                        RenderMode);
+        if (!realglyph)
+        {
+            DPRINT1("Failed to render glyph! [index: %u]\n", glyph_index);
+            IntUnLockFreeType;
+            goto fail;
+        }      
       }
 //      DbgPrint("realglyph: %x\n", realglyph);
 //      DbgPrint("TextLeft: %d\n", TextLeft);