[WIN32SS][NTUSER] Fix caret position of Ghostscript (#1271)
authorKatayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Sun, 20 Jan 2019 14:11:54 +0000 (23:11 +0900)
committerGitHub <noreply@github.com>
Sun, 20 Jan 2019 14:11:54 +0000 (23:11 +0900)
CORE-13934, CORE-15656

win32ss/user/ntuser/caret.c

index a7549e7..9ab590c 100644 (file)
@@ -3,7 +3,8 @@
  * PROJECT:          ReactOS Win32k subsystem
  * PURPOSE:          Caret functions
  * FILE:             win32ss/user/ntuser/caret.c
- * PROGRAMER:        Thomas Weidenmueller (w3seek@users.sourceforge.net)
+ * PROGRAMERS:       Thomas Weidenmueller (w3seek@users.sourceforge.net)
+ *                   Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
  */
 
 #include <win32k.h>
@@ -21,6 +22,7 @@ co_IntDrawCaret(PWND pWnd, PTHRDCARETINFO CaretInfo)
 {
     HDC hdc, hdcMem;
     HBITMAP hbmOld;
+    RECT rcClient;
     BOOL bDone = FALSE;
 
     if (pWnd == NULL)
@@ -29,7 +31,7 @@ co_IntDrawCaret(PWND pWnd, PTHRDCARETINFO CaretInfo)
        return;
     }
 
-    hdc = UserGetDCEx(pWnd, 0, DCX_USESTYLE | DCX_WINDOW);
+    hdc = UserGetDCEx(pWnd, NULL, DCX_USESTYLE);
     if (!hdc)
     {
         ERR("GetDC failed\n");
@@ -41,6 +43,13 @@ co_IntDrawCaret(PWND pWnd, PTHRDCARETINFO CaretInfo)
        NtGdiSaveDC(hdc);
     }
 
+    IntGetClientRect(pWnd, &rcClient);
+    NtGdiIntersectClipRect(hdc,
+                           rcClient.left,
+                           rcClient.top,
+                           rcClient.right,
+                           rcClient.bottom);
+
     if (CaretInfo->Bitmap)
     {
         if (!GreGetBitmapDimension(CaretInfo->Bitmap, &CaretInfo->Size))