Nikolay Sivov : comctl32/progress: Update position by one step on PBM_SETPOS in PBS_MARQUEE style.

Alexandre Julliard julliard at winehq.org
Wed Jun 11 13:36:24 CDT 2014


Module: wine
Branch: master
Commit: 2a348791ee56c6556887a64d98eea68aaa01cc01
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2a348791ee56c6556887a64d98eea68aaa01cc01

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sun Jun  8 00:04:28 2014 +0400

comctl32/progress: Update position by one step on PBM_SETPOS in PBS_MARQUEE style.

---

 dlls/comctl32/progress.c |   85 +++++++++++++++++++++++++---------------------
 1 file changed, 47 insertions(+), 38 deletions(-)

diff --git a/dlls/comctl32/progress.c b/dlls/comctl32/progress.c
index 7c996cb..44fdd3f 100644
--- a/dlls/comctl32/progress.c
+++ b/dlls/comctl32/progress.c
@@ -448,38 +448,32 @@ static LRESULT PROGRESS_Paint (PROGRESS_INFO *infoPtr, HDC hdc)
 
 
 /***********************************************************************
- * PROGRESS_Timer
- * Handle the marquee timer messages
+ * Advance marquee progress by one step.
  */
-static LRESULT PROGRESS_Timer (PROGRESS_INFO *infoPtr, INT idTimer)
+static void PROGRESS_UpdateMarquee (PROGRESS_INFO *infoPtr)
 {
-    if(idTimer == ID_MARQUEE_TIMER)
-    {
-        LONG style = GetWindowLongW (infoPtr->Self, GWL_STYLE);
-        RECT rect;
-        int ledWidth, leds;
-        HTHEME theme = GetWindowTheme (infoPtr->Self);
-        BOOL barSmooth = (style & PBS_SMOOTH) && !theme;
+    LONG style = GetWindowLongW (infoPtr->Self, GWL_STYLE);
+    RECT rect;
+    int ledWidth, leds;
+    HTHEME theme = GetWindowTheme (infoPtr->Self);
+    BOOL smooth = (style & PBS_SMOOTH) && !theme;
 
-        get_client_rect (infoPtr->Self, &rect);
+    get_client_rect (infoPtr->Self, &rect);
 
-        if(!barSmooth)
-            ledWidth = get_led_size( infoPtr, style, &rect ) + 
-                get_led_gap( infoPtr );
-        else
-            ledWidth = 1;
+    if (smooth)
+        ledWidth = 1;
+    else
+        ledWidth = get_led_size( infoPtr, style, &rect ) + get_led_gap( infoPtr );
 
-        leds = (get_bar_size( style, &rect ) + ledWidth - 1) / 
-            ledWidth;
+    leds = (get_bar_size( style, &rect ) + ledWidth - 1) /
+        ledWidth;
 
-        /* increment the marquee progress */
-        if(++infoPtr->MarqueePos >= leds)
-            infoPtr->MarqueePos = 0;
+    /* increment the marquee progress */
+    if (++infoPtr->MarqueePos >= leds)
+        infoPtr->MarqueePos = 0;
 
-        InvalidateRect(infoPtr->Self, &rect, TRUE);
-        UpdateWindow(infoPtr->Self);
-    }
-    return 0;
+    InvalidateRect(infoPtr->Self, &rect, TRUE);
+    UpdateWindow(infoPtr->Self);
 }
 
 
@@ -522,6 +516,30 @@ static DWORD PROGRESS_SetRange (PROGRESS_INFO *infoPtr, int low, int high)
     return res;
 }
 
+static UINT PROGRESS_SetPos (PROGRESS_INFO *infoPtr, INT pos)
+{
+    DWORD style = GetWindowLongW(infoPtr->Self, GWL_STYLE);
+
+    if (style & PBS_MARQUEE)
+    {
+        PROGRESS_UpdateMarquee(infoPtr);
+        return 1;
+    }
+    else
+    {
+        UINT oldVal;
+        oldVal = infoPtr->CurVal;
+        if (oldVal != pos) {
+	    infoPtr->CurVal = pos;
+	    PROGRESS_CoercePos(infoPtr);
+	    TRACE("PBM_SETPOS: current pos changed from %d to %d\n", oldVal, infoPtr->CurVal);
+            PROGRESS_Invalidate( infoPtr, oldVal, infoPtr->CurVal );
+            UpdateWindow( infoPtr->Self );
+        }
+        return oldVal;
+    }
+}
+
 /***********************************************************************
  *           ProgressWindowProc
  */
@@ -596,7 +614,9 @@ static LRESULT WINAPI ProgressWindowProc(HWND hwnd, UINT message,
         return PROGRESS_Paint (infoPtr, (HDC)wParam);
 
     case WM_TIMER:
-        return PROGRESS_Timer (infoPtr, (INT)wParam);
+        if (wParam == ID_MARQUEE_TIMER)
+            PROGRESS_UpdateMarquee (infoPtr);
+        return 0;
 
     case WM_THEMECHANGED:
     {
@@ -632,18 +652,7 @@ static LRESULT WINAPI ProgressWindowProc(HWND hwnd, UINT message,
     }
 
     case PBM_SETPOS:
-    {
-        UINT oldVal;
-        oldVal = infoPtr->CurVal;
-        if(oldVal != wParam) {
-	    infoPtr->CurVal = (INT)wParam;
-	    PROGRESS_CoercePos(infoPtr);
-	    TRACE("PBM_SETPOS: current pos changed from %d to %d\n", oldVal, infoPtr->CurVal);
-            PROGRESS_Invalidate( infoPtr, oldVal, infoPtr->CurVal );
-            UpdateWindow( infoPtr->Self );
-        }
-        return oldVal;
-    }
+        return PROGRESS_SetPos(infoPtr, wParam);
 
     case PBM_SETRANGE:
         return PROGRESS_SetRange (infoPtr, (int)LOWORD(lParam), (int)HIWORD(lParam));




More information about the wine-cvs mailing list