[RFC PATCH 5/5] winex11.drv: Draw the bottom right pixel of rectangles.

Giovanni Mascellani gmascellani at codeweavers.com
Tue May 18 09:44:13 CDT 2021


The X11 protocol does not specify how lines must be drawn when they have
zero width. On some implementations (particularly, Xorg), drawing a rectangle
with zero width results in the bottom right pixel not being drawn.
Setting line width to 1 in this case is properly specified and results
in the bottom right pixel being correctly drawn.

Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>
---
 dlls/user32/tests/win.c     | 24 ++++++++++++------------
 dlls/winex11.drv/graphics.c |  2 +-
 2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index 30514a05234..a61c50b9b5a 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -12868,8 +12868,8 @@ static void test_surface_composition(void)
     flush_events( TRUE );
 
     paint_client_rect(hwnd, BGRA2RGB(COLOR1));
-    check_client_surface(hwnd, painted_surface, sizeof(painted_surface), TRUE);
-    check_screen_surface(hwnd, painted_surface, sizeof(painted_surface), TRUE);
+    check_client_surface(hwnd, painted_surface, sizeof(painted_surface), FALSE);
+    check_screen_surface(hwnd, painted_surface, sizeof(painted_surface), FALSE);
 
     paint_d3d9_client_rect(d3d9_ctx1, COLOR2);
     check_client_surface(hwnd, painted_surface2, sizeof(painted_surface2), TRUE);
@@ -12880,16 +12880,16 @@ static void test_surface_composition(void)
     check_screen_surface(hwnd, painted_surface3, sizeof(painted_surface3), FALSE);
 
     paint_client_rect(hwnd, BGRA2RGB(COLOR4));
-    check_client_surface(hwnd, painted_surface4, sizeof(painted_surface4), TRUE);
-    check_screen_surface(hwnd, painted_surface4, sizeof(painted_surface4), TRUE);
+    check_client_surface(hwnd, painted_surface4, sizeof(painted_surface4), FALSE);
+    check_screen_surface(hwnd, painted_surface4, sizeof(painted_surface4), FALSE);
 
     gl_ctx1 = create_gl_context(hwnd);
     gl_ctx2 = create_gl_context(hwnd);
     flush_events( TRUE );
 
     paint_client_rect(hwnd, BGRA2RGB(COLOR1));
-    check_client_surface(hwnd, painted_surface, sizeof(painted_surface), TRUE);
-    check_screen_surface(hwnd, painted_surface, sizeof(painted_surface), TRUE);
+    check_client_surface(hwnd, painted_surface, sizeof(painted_surface), FALSE);
+    check_screen_surface(hwnd, painted_surface, sizeof(painted_surface), FALSE);
 
     paint_gl_client_rect(gl_ctx1, COLOR2);
     check_client_surface(hwnd, painted_surface2, sizeof(painted_surface2), TRUE);
@@ -12908,8 +12908,8 @@ static void test_surface_composition(void)
     check_screen_surface(hwnd, painted_surface2, sizeof(painted_surface2), TRUE);
 
     paint_client_rect(hwnd, BGRA2RGB(COLOR1));
-    check_client_surface(hwnd, painted_surface, sizeof(painted_surface), TRUE);
-    check_screen_surface(hwnd, painted_surface, sizeof(painted_surface), TRUE);
+    check_client_surface(hwnd, painted_surface, sizeof(painted_surface), FALSE);
+    check_screen_surface(hwnd, painted_surface, sizeof(painted_surface), FALSE);
 
     paint_d3d9_client_rect(d3d9_ctx2, COLOR3);
     check_client_surface(hwnd, painted_surface3, sizeof(painted_surface3), TRUE);
@@ -12940,7 +12940,7 @@ static void test_surface_composition(void)
     ShowWindow(hwnd, SW_SHOW);
     flush_events( TRUE );
     paint_client_rect(hwnd, BGRA2RGB(COLOR1));
-    check_client_surface(hwnd, painted_surface, sizeof(painted_surface), TRUE);
+    check_client_surface(hwnd, painted_surface, sizeof(painted_surface), FALSE);
     check_screen_surface(hwnd, layered_const_surface, sizeof(layered_const_surface), TRUE);
 
     paint_d3d9_client_rect(d3d9_ctx1, COLOR2);
@@ -12952,14 +12952,14 @@ static void test_surface_composition(void)
     check_screen_surface(hwnd, layered_const_surface3, sizeof(layered_const_surface3), TRUE);
 
     paint_client_rect(hwnd, BGRA2RGB(COLOR4));
-    check_client_surface(hwnd, painted_surface4, sizeof(painted_surface4), TRUE);
+    check_client_surface(hwnd, painted_surface4, sizeof(painted_surface4), FALSE);
     check_screen_surface(hwnd, layered_const_surface4, sizeof(layered_const_surface4), TRUE);
 
     gl_ctx1 = create_gl_context(hwnd);
     gl_ctx2 = create_gl_context(hwnd);
     flush_events( TRUE );
     paint_client_rect(hwnd, BGRA2RGB(COLOR1));
-    check_client_surface(hwnd, painted_surface, sizeof(painted_surface), TRUE);
+    check_client_surface(hwnd, painted_surface, sizeof(painted_surface), FALSE);
     check_screen_surface(hwnd, layered_const_surface, sizeof(layered_const_surface), TRUE);
 
     paint_gl_client_rect(gl_ctx1, COLOR2);
@@ -12975,7 +12975,7 @@ static void test_surface_composition(void)
     check_screen_surface(hwnd, layered_const_surface4, sizeof(layered_const_surface4), TRUE);
 
     paint_client_rect(hwnd, BGRA2RGB(COLOR2));
-    check_client_surface(hwnd, painted_surface2, sizeof(painted_surface2), TRUE);
+    check_client_surface(hwnd, painted_surface2, sizeof(painted_surface2), FALSE);
     check_screen_surface(hwnd, layered_const_surface2, sizeof(layered_const_surface2), TRUE);
 
     paint_d3d9_client_rect(d3d9_ctx2, COLOR1);
diff --git a/dlls/winex11.drv/graphics.c b/dlls/winex11.drv/graphics.c
index 77ca60ec44d..f16db5d16d6 100644
--- a/dlls/winex11.drv/graphics.c
+++ b/dlls/winex11.drv/graphics.c
@@ -794,7 +794,7 @@ BOOL CDECL X11DRV_Rectangle(PHYSDEV dev, INT left, INT top, INT right, INT botto
         rc.top    += width / 2;
         rc.bottom -= (width - 1) / 2;
     }
-    if(width == 1) width = 0;
+    if (!width) width = 1;
     physDev->pen.width = width;
     oldjoinstyle = physDev->pen.linejoin;
     if(physDev->pen.type != PS_GEOMETRIC)
-- 
2.31.1




More information about the wine-devel mailing list