[PATCH 1/5] user32: Avoid unnecessary scroll bar drawing.

Zhiyi Zhang zzhang at codeweavers.com
Mon Jul 5 07:30:55 CDT 2021


These drawing operations are either overwritten by other drawing functions later or not needed at all.

Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
---
 dlls/user32/scroll.c | 48 ++++++++++++++------------------------------
 1 file changed, 15 insertions(+), 33 deletions(-)

diff --git a/dlls/user32/scroll.c b/dlls/user32/scroll.c
index a63039262c7..ba8fe7966ec 100644
--- a/dlls/user32/scroll.c
+++ b/dlls/user32/scroll.c
@@ -594,12 +594,6 @@ static void SCROLL_DrawInterior( HWND hwnd, HDC hdc, INT nBar,
     RECT r;
     HPEN hSavePen;
     HBRUSH hSaveBrush,hBrush;
-    BOOL Save_SCROLL_MovingThumb = SCROLL_MovingThumb;
-
-    if (Save_SCROLL_MovingThumb &&
-        (SCROLL_TrackingWin == hwnd) &&
-        (SCROLL_TrackingBar == nBar))
-        SCROLL_DrawMovingThumb( hdc, rect, vertical, arrowSize, thumbSize );
 
       /* Select the correct brush and pen */
 
@@ -672,11 +666,6 @@ static void SCROLL_DrawInterior( HWND hwnd, HDC hdc, INT nBar,
     Rectangle( hdc, r.left+1, r.top+1, r.right-1, r.bottom-1 );
     DrawEdge( hdc, &r, EDGE_RAISED, BF_RECT );
 
-    if (Save_SCROLL_MovingThumb &&
-        (SCROLL_TrackingWin == hwnd) &&
-        (SCROLL_TrackingBar == nBar))
-        SCROLL_DrawMovingThumb( hdc, rect, vertical, arrowSize, thumbSize );
-
     /* cleanup */
     SelectObject( hdc, hSavePen );
     SelectObject( hdc, hSaveBrush );
@@ -695,7 +684,6 @@ void SCROLL_DrawScrollBar( HWND hwnd, HDC hdc, INT nBar,
     RECT rect;
     BOOL vertical;
     SCROLLBAR_INFO *infoPtr = SCROLL_GetInternalInfo( hwnd, nBar, TRUE );
-    BOOL Save_SCROLL_MovingThumb = SCROLL_MovingThumb;
     DWORD style = GetWindowLongW( hwnd, GWL_STYLE );
 
     if (!(hwnd = WIN_GetFullHandle( hwnd ))) return;
@@ -711,11 +699,6 @@ void SCROLL_DrawScrollBar( HWND hwnd, HDC hdc, INT nBar,
     /* do not draw if the scrollbar rectangle is empty */
     if(IsRectEmpty(&rect)) return;
 
-    if (Save_SCROLL_MovingThumb &&
-        (SCROLL_TrackingWin == hwnd) &&
-        (SCROLL_TrackingBar == nBar))
-        SCROLL_DrawMovingThumb( hdc, &rect, vertical, arrowSize, thumbSize );
-
       /* Draw the arrows */
 
     if (arrows && arrowSize)
@@ -728,14 +711,19 @@ void SCROLL_DrawScrollBar( HWND hwnd, HDC hdc, INT nBar,
 	    SCROLL_DrawArrows( hdc, infoPtr, &rect, arrowSize, vertical,
 							       FALSE, FALSE );
     }
-    if( interior )
-	SCROLL_DrawInterior( hwnd, hdc, nBar, &rect, arrowSize, thumbSize,
-                         thumbPos, infoPtr->flags, vertical, FALSE, FALSE );
 
-    if (Save_SCROLL_MovingThumb &&
-        (SCROLL_TrackingWin == hwnd) &&
-        (SCROLL_TrackingBar == nBar))
-        SCROLL_DrawMovingThumb( hdc, &rect, vertical, arrowSize, thumbSize );
+    if (interior)
+    {
+        if (SCROLL_MovingThumb && SCROLL_TrackingWin == hwnd && SCROLL_TrackingBar == nBar)
+        {
+            SCROLL_DrawMovingThumb( hdc, &rect, vertical, arrowSize, thumbSize );
+        }
+        else
+        {
+            SCROLL_DrawInterior( hwnd, hdc, nBar, &rect, arrowSize, thumbSize, thumbPos,
+                                 infoPtr->flags, vertical, FALSE, FALSE );
+        }
+    }
 
     /* if scroll bar has focus, reposition the caret */
     if(hwnd==GetFocus() && (nBar==SB_CTL))
@@ -975,9 +963,6 @@ static void SCROLL_HandleScrollEvent( HWND hwnd, INT nBar, UINT msg, POINT pt)
         }
         else if (msg == WM_LBUTTONUP)
         {
-	    if (SCROLL_MovingThumb)
-		SCROLL_DrawMovingThumb(hdc, &rect, vertical, arrowSize, thumbSize);
-
             SCROLL_DrawInterior( hwnd, hdc, nBar, &rect, arrowSize, thumbSize,
                                  thumbPos, infoPtr->flags, vertical,
                                  FALSE, FALSE );
@@ -994,9 +979,6 @@ static void SCROLL_HandleScrollEvent( HWND hwnd, INT nBar, UINT msg, POINT pt)
 	    }
             if ( (pos != lastMousePos) || (!SCROLL_MovingThumb) )
             {
-		if (SCROLL_MovingThumb)
-		    SCROLL_DrawMovingThumb( hdc, &rect, vertical,
-                                        arrowSize, thumbSize );
                 lastMousePos = pos;
                 SCROLL_TrackingPos = trackThumbPos + pos - lastClickPos;
                 SCROLL_TrackingVal = SCROLL_GetThumbVal( infoPtr, &rect,
@@ -1005,9 +987,8 @@ static void SCROLL_HandleScrollEvent( HWND hwnd, INT nBar, UINT msg, POINT pt)
                 SendMessageW( hwndOwner, vertical ? WM_VSCROLL : WM_HSCROLL,
                                 MAKEWPARAM( SB_THUMBTRACK, SCROLL_TrackingVal),
                                 (LPARAM)hwndCtl );
-		if (!SCROLL_MovingThumb)
-		    SCROLL_DrawMovingThumb( hdc, &rect, vertical,
-                                        arrowSize, thumbSize );
+                SCROLL_DrawMovingThumb( hdc, &rect, vertical, arrowSize, thumbSize );
+                SCROLL_MovingThumb = TRUE;
             }
         }
         break;
@@ -1077,6 +1058,7 @@ static void SCROLL_HandleScrollEvent( HWND hwnd, INT nBar, UINT msg, POINT pt)
 
         /* Terminate tracking */
         SCROLL_TrackingWin = 0;
+        SCROLL_MovingThumb = FALSE;
     }
 
     ReleaseDC( hwnd, hdc );
-- 
2.30.2




More information about the wine-devel mailing list