[WIN32SS] Fix DrawText wrt DT_CALCRECT | DT_VCENTER (#745)
authorKatayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Wed, 15 Aug 2018 17:50:19 +0000 (02:50 +0900)
committerHermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>
Wed, 15 Aug 2018 17:50:19 +0000 (19:50 +0200)
The test program: https://jira.reactos.org/secure/attachment/47925/TnB3.zip
CORE-14896

win32ss/user/rtl/text.c

index 9ab726c..d723c55 100644 (file)
@@ -1148,26 +1148,27 @@ INT WINAPI DrawTextExWorker( HDC hdc,
 
        if (flags & DT_SINGLELINE)
        {
-            if (flags & DT_VCENTER)
 #ifdef __REACTOS__
+        if (flags & DT_VCENTER)
+        {
+            if (flags & DT_CALCRECT)
             {
-                if (((rect->bottom - rect->top) < (invert_y ? -size.cy : size.cy)) && (flags & DT_CALCRECT))
-                {
-                    y = rect->top + (invert_y ? -size.cy : size.cy);
-                }
-                else
-                {
-                    y = rect->top + (rect->bottom - rect->top + (invert_y ? size.cy : -size.cy)) / 2;
-#else
-                    y = rect->top + (rect->bottom - rect->top) / 2 + (invert_y ? (size.cy / 2) : (-size.cy / 2));
-#endif
-#ifdef __REACTOS__
-                }
+                if (rect->bottom - rect->top < size.cy / 2)
+                    y = rect->top + (invert_y ? size.cy : -size.cy) / 2;
+            }
+            else
+            {
+                y = rect->top + (rect->bottom - rect->top + (invert_y ? size.cy : -size.cy)) / 2;
             }
-#endif
-            else if (flags & DT_BOTTOM)
-                y = rect->bottom + (invert_y ? 0 : -size.cy);
         }
+        else if (flags & DT_BOTTOM)
+            y = rect->bottom + (invert_y ? 0 : -size.cy);
+#else
+           if (flags & DT_VCENTER) y = rect->top +
+               (rect->bottom - rect->top) / 2 - size.cy / 2;
+           else if (flags & DT_BOTTOM) y = rect->bottom - size.cy;
+#endif
+    }
 
        if (!(flags & DT_CALCRECT))
        {