[COMCTL32] -Fix some tests regarding how the v6 buttons gets repainted.
authorGiannis Adamopoulos <gadamopoulos@reactos.org>
Sat, 11 Mar 2017 13:42:29 +0000 (13:42 +0000)
committerGiannis Adamopoulos <gadamopoulos@reactos.org>
Sat, 11 Mar 2017 13:42:29 +0000 (13:42 +0000)
svn path=/trunk/; revision=74149

reactos/dll/win32/comctl32/button.c
reactos/dll/win32/comctl32/theme_button.c

index cf99a6f..b6f2947 100644 (file)
@@ -508,30 +508,35 @@ LRESULT WINAPI ButtonWndProc_common(HWND hWnd, UINT uMsg,
         case WM_THEMECHANGED:
             CloseThemeData (GetWindowTheme(hWnd));
             OpenThemeData(hWnd, WC_BUTTONW);
-            InvalidateRect(hWnd, NULL, FALSE);
-            break;
-        case WM_MOUSEHOVER:
-        {
-            int state = (int)SendMessageW(hWnd, BM_GETSTATE, 0, 0);
-            set_button_state(hWnd, state|BST_HOT);
-            InvalidateRect(hWnd, NULL, FALSE);
+            InvalidateRect(hWnd, NULL, TRUE);
             break;
-        }
         case WM_MOUSELEAVE:
         {
-            int state = (int)SendMessageW(hWnd, BM_GETSTATE, 0, 0);
-            set_button_state(hWnd, state&(~BST_HOT));
-            InvalidateRect(hWnd, NULL, FALSE);
+            state = get_button_state( hWnd );
+            if (state & BST_HOT)
+            {
+                state &= ~BST_HOT;
+                set_button_state(hWnd, state);
+                InvalidateRect(hWnd, NULL, TRUE);
+            }
             break;
         }
         case WM_MOUSEMOVE:
         {
             TRACKMOUSEEVENT mouse_event;
+            state = get_button_state( hWnd );
+            if ((state & BST_HOT) == 0)
+            {
+                state |= BST_HOT;
+                set_button_state(hWnd, state);
+                InvalidateRect(hWnd, NULL, TRUE);
+            }
+
             mouse_event.cbSize = sizeof(TRACKMOUSEEVENT);
             mouse_event.dwFlags = TME_QUERY;
-            if(!TrackMouseEvent(&mouse_event) || !(mouse_event.dwFlags&(TME_HOVER|TME_LEAVE)))
+            if(!TrackMouseEvent(&mouse_event) || !(mouse_event.dwFlags&TME_LEAVE))
             {
-                mouse_event.dwFlags = TME_HOVER|TME_LEAVE;
+                mouse_event.dwFlags = TME_LEAVE;
                 mouse_event.hwndTrack = hWnd;
                 mouse_event.dwHoverTime = 1;
                 TrackMouseEvent(&mouse_event);
index daeedc9..158c7e8 100644 (file)
@@ -117,7 +117,7 @@ static void PB_draw(HTHEME theme, HWND hwnd, HDC hDC, ButtonState drawState, UIN
     GetClientRect(hwnd, &bgRect);
     GetThemeBackgroundContentRect(theme, hDC, BP_PUSHBUTTON, state, &bgRect, &textRect);
 
-    if (prfFlag == 0 || (prfFlag & PRF_ERASEBKGND))
+    if (prfFlag == 0)
     {
         if (IsThemeBackgroundPartiallyTransparent(theme, BP_PUSHBUTTON, state))
             DrawThemeParentBackground(hwnd, hDC, NULL);
@@ -216,7 +216,7 @@ static void CB_draw(HTHEME theme, HWND hwnd, HDC hDC, ButtonState drawState, UIN
     bgRect.right = bgRect.left + sz.cx;
     textRect.left = bgRect.right + 6;
 
-    if (prfFlag == 0 || (prfFlag & PRF_ERASEBKGND))
+    if (prfFlag == 0)
     {
         DrawThemeParentBackground(hwnd, hDC, NULL);
     }
@@ -290,7 +290,7 @@ static void GB_draw(HTHEME theme, HWND hwnd, HDC hDC, ButtonState drawState, UIN
     GetThemeBackgroundContentRect(theme, hDC, BP_GROUPBOX, state, &bgRect, &contentRect);
     ExcludeClipRect(hDC, contentRect.left, contentRect.top, contentRect.right, contentRect.bottom);
 
-    if (prfFlag == 0 || (prfFlag & PRF_ERASEBKGND))
+    if (prfFlag == 0)
     {
         if (IsThemeBackgroundPartiallyTransparent(theme, BP_GROUPBOX, state))
             DrawThemeParentBackground(hwnd, hDC, NULL);