Fix for dragging windows with thin frames

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello!

Dialogs and windows with thin frames (e.g. winemine) are not redrawn
correctly when they are moved.  Debugging shows that the use of
DrawFocusRect() in dlls/x11drv/winpos.c is a problem.

The patch uses system values for thickness of dialog frames for dialogs
and thin-framed windows (SM_CXDLGFRAME and SM_CYDLGFRAME).  The code for
drawing the inverted rectangle is now shared with the code used for normal
windows.

The patch has been tested in Win31 and Win95 look in the managed,
non-managed and desktop modes.  Only the managed mode didn't have a
problem.  The non-managed and the desktop modes had the problem in both
looks, and it's fixed now.

The patch is attached.

-- 
Regards,
Pavel Roskin
--- dlls/x11drv/winpos.c
+++ dlls/x11drv/winpos.c
@@ -1737,23 +1737,29 @@ int X11DRV_SetWindowRgn( HWND hwnd, HRGN
  */
 static void draw_moving_frame( HDC hdc, RECT *rect, BOOL thickframe )
 {
+    int width, height;
+
     if (thickframe)
     {
-        const int width = GetSystemMetrics(SM_CXFRAME);
-        const int height = GetSystemMetrics(SM_CYFRAME);
-
-        HBRUSH hbrush = SelectObject( hdc, GetStockObject( GRAY_BRUSH ) );
-        PatBlt( hdc, rect->left, rect->top,
-                rect->right - rect->left - width, height, PATINVERT );
-        PatBlt( hdc, rect->left, rect->top + height, width,
-                rect->bottom - rect->top - height, PATINVERT );
-        PatBlt( hdc, rect->left + width, rect->bottom - 1,
-                rect->right - rect->left - width, -height, PATINVERT );
-        PatBlt( hdc, rect->right - 1, rect->top, -width,
-                rect->bottom - rect->top - height, PATINVERT );
-        SelectObject( hdc, hbrush );
+        width = GetSystemMetrics(SM_CXFRAME);
+        height = GetSystemMetrics(SM_CYFRAME);
+    }
+    else
+    {
+        width = GetSystemMetrics(SM_CXDLGFRAME);
+        height = GetSystemMetrics(SM_CYDLGFRAME);
     }
-    else DrawFocusRect( hdc, rect );
+
+    HBRUSH hbrush = SelectObject( hdc, GetStockObject( GRAY_BRUSH ) );
+    PatBlt( hdc, rect->left, rect->top,
+            rect->right - rect->left - width, height, PATINVERT );
+    PatBlt( hdc, rect->left, rect->top + height, width,
+            rect->bottom - rect->top - height, PATINVERT );
+    PatBlt( hdc, rect->left + width, rect->bottom - 1,
+            rect->right - rect->left - width, -height, PATINVERT );
+    PatBlt( hdc, rect->right - 1, rect->top, -width,
+            rect->bottom - rect->top - height, PATINVERT );
+    SelectObject( hdc, hbrush );
 }
 
 

[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux