Jacek Caban : conhost: Import scrolling support from wineconsole.

Alexandre Julliard julliard at winehq.org
Mon Oct 12 15:20:51 CDT 2020


Module: wine
Branch: master
Commit: 1333aebe0b3d7a8654a9c573b3dc24d7aa31c1c9
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=1333aebe0b3d7a8654a9c573b3dc24d7aa31c1c9

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Oct 12 18:26:34 2020 +0200

conhost: Import scrolling support from wineconsole.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 programs/conhost/window.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)

diff --git a/programs/conhost/window.c b/programs/conhost/window.c
index 4b3751e7b5..5ec435a33e 100644
--- a/programs/conhost/window.c
+++ b/programs/conhost/window.c
@@ -2310,6 +2310,72 @@ static LRESULT WINAPI window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp
                            max( HIWORD(lparam) / console->active->font.height, 20 ));
         break;
 
+    case WM_HSCROLL:
+        {
+            int win_width = console->active->win.right - console->active->win.left + 1;
+            int x = console->active->win.left;
+
+            switch (LOWORD(wparam))
+            {
+            case SB_PAGEUP:     x -= 8;              break;
+            case SB_PAGEDOWN:   x += 8;              break;
+            case SB_LINEUP:     x--;                 break;
+            case SB_LINEDOWN:   x++;                 break;
+            case SB_THUMBTRACK: x = HIWORD(wparam);  break;
+            default:                                 break;
+            }
+            x = min( max( x, 0 ), console->active->width - win_width );
+            if (x != console->active->win.left)
+            {
+                console->active->win.left  = x;
+                console->active->win.right = x + win_width - 1;
+                update_window( console );
+            }
+            break;
+        }
+
+    case WM_MOUSEWHEEL:
+        if (console->active->height <= console->active->win.bottom - console->active->win.top + 1)
+        {
+            record_mouse_input(console,  get_cell(console, lparam), wparam, MOUSE_WHEELED);
+            break;
+        }
+        /* else fallthrough */
+    case WM_VSCROLL:
+        {
+            int win_height = console->active->win.bottom - console->active->win.top + 1;
+            int y = console->active->win.top;
+
+            if (msg == WM_MOUSEWHEEL)
+            {
+                UINT scroll_lines = 3;
+                SystemParametersInfoW( SPI_GETWHEELSCROLLLINES, 0, &scroll_lines, 0 );
+                scroll_lines *= -GET_WHEEL_DELTA_WPARAM(wparam) / WHEEL_DELTA;
+                y += scroll_lines;
+            }
+            else
+            {
+                switch (LOWORD(wparam))
+                {
+                case SB_PAGEUP:     y -= 8;              break;
+                case SB_PAGEDOWN:   y += 8;              break;
+                case SB_LINEUP:     y--;                 break;
+                case SB_LINEDOWN:   y++;                 break;
+                case SB_THUMBTRACK: y = HIWORD(wparam);  break;
+                default:                                 break;
+                }
+            }
+
+            y = min( max( y, 0 ), console->active->height - win_height );
+            if (y != console->active->win.top)
+            {
+                console->active->win.top    = y;
+                console->active->win.bottom = y + win_height - 1;
+                update_window( console );
+            }
+            break;
+        }
+
     case WM_SYSCOMMAND:
         switch (wparam)
         {




More information about the wine-cvs mailing list