Dylan Smith : wineconsole: Handle mouse wheel scrolling for user backend.

Alexandre Julliard julliard at winehq.org
Fri Feb 26 11:14:02 CST 2010


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

Author: Dylan Smith <dylan.ah.smith at gmail.com>
Date:   Thu Feb 25 19:15:13 2010 -0500

wineconsole: Handle mouse wheel scrolling for user backend.

The mouse wheel will scroll if the buffer height is greater than the
console window's height in lines, otherwise console mouse input events
are generated.

---

 programs/wineconsole/user.c |   38 ++++++++++++++++++++++++++------------
 1 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/programs/wineconsole/user.c b/programs/wineconsole/user.c
index 15626d4..2c69e25 100644
--- a/programs/wineconsole/user.c
+++ b/programs/wineconsole/user.c
@@ -1197,9 +1197,6 @@ static LRESULT CALLBACK WCUSER_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
     case WM_RBUTTONDBLCLK:
         WCUSER_GenerateMouseInputRecord(data, WCUSER_GetCell(data, lParam), wParam, DOUBLE_CLICK);
         break;
-    case WM_MOUSEWHEEL:
-        WCUSER_GenerateMouseInputRecord(data,  WCUSER_GetCell(data, lParam), wParam, MOUSE_WHEELED);
-	break;
     case WM_SETFOCUS:
 	if (data->curcfg.cursor_visible)
 	{
@@ -1240,19 +1237,35 @@ static LRESULT CALLBACK WCUSER_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
             }
         }
 	break;
+    case WM_MOUSEWHEEL:
+        if (data->curcfg.sb_height <= data->curcfg.win_height)
+        {
+            WCUSER_GenerateMouseInputRecord(data,  WCUSER_GetCell(data, lParam), wParam, MOUSE_WHEELED);
+            break;
+        }
+        /* else fallthrough */
     case WM_VSCROLL:
         {
 	    int	pos = data->curcfg.win_pos.Y;
 
-	    switch (LOWORD(wParam))
-	    {
-            case SB_PAGEUP: 	pos -= 8; 		break;
-            case SB_PAGEDOWN: 	pos += 8; 		break;
-            case SB_LINEUP: 	pos--;			break;
-	    case SB_LINEDOWN: 	pos++;	 		break;
-            case SB_THUMBTRACK: pos = HIWORD(wParam);	break;
-            default: 					break;
-	    }
+            if (uMsg == WM_MOUSEWHEEL)
+            {
+                UINT scrollLines = 3;
+                SystemParametersInfoW(SPI_GETWHEELSCROLLLINES, 0, &scrollLines, 0);
+                scrollLines *= -GET_WHEEL_DELTA_WPARAM(wParam) / WHEEL_DELTA;
+                pos += scrollLines;
+            } else {
+                switch (LOWORD(wParam))
+                {
+                case SB_PAGEUP: 	pos -= 8; 		break;
+                case SB_PAGEDOWN: 	pos += 8; 		break;
+                case SB_LINEUP: 	pos--;			break;
+                case SB_LINEDOWN: 	pos++;	 		break;
+                case SB_THUMBTRACK: pos = HIWORD(wParam);	break;
+                default: 					break;
+                }
+            }
+
 	    if (pos < 0) pos = 0;
 	    if (pos > data->curcfg.sb_height - data->curcfg.win_height)
                 pos = data->curcfg.sb_height - data->curcfg.win_height;
@@ -1268,6 +1281,7 @@ static LRESULT CALLBACK WCUSER_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
 	    }
 
         }
+        break;
     case WM_SYSCOMMAND:
 	switch (wParam)
 	{




More information about the wine-cvs mailing list