From 84aecbca8181ac93fc88371da1abfdf2046d3cc0 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Mon, 25 May 2020 00:10:35 -0700 Subject: [PATCH] Smoother mouse wheel scrolling --- BeefLibs/Beefy2D/src/BFWindow.bf | 6 +++--- BeefLibs/Beefy2D/src/events/MouseEvent.bf | 2 +- BeefLibs/Beefy2D/src/theme/dark/DarkEditWidget.bf | 2 +- BeefLibs/Beefy2D/src/widgets/InfiniteScrollbar.bf | 4 ++-- BeefLibs/Beefy2D/src/widgets/ScrollableWidget.bf | 2 +- BeefLibs/Beefy2D/src/widgets/Scrollbar.bf | 2 +- BeefLibs/Beefy2D/src/widgets/Widget.bf | 2 +- BeefLibs/Beefy2D/src/widgets/WidgetWindow.bf | 2 +- BeefySysLib/BFWindow.h | 2 +- BeefySysLib/platform/win/WinBFApp.cpp | 9 +++++++-- IDE/src/ui/BinaryDataWidget.bf | 2 +- 11 files changed, 20 insertions(+), 15 deletions(-) diff --git a/BeefLibs/Beefy2D/src/BFWindow.bf b/BeefLibs/Beefy2D/src/BFWindow.bf index 41d0ae1f..7d55044c 100644 --- a/BeefLibs/Beefy2D/src/BFWindow.bf +++ b/BeefLibs/Beefy2D/src/BFWindow.bf @@ -125,7 +125,7 @@ namespace Beefy delegate void NativeMouseProxyMoveDelegate(void* window, int32 x, int32 y); delegate void NativeMouseDownDelegate(void* window, int32 x, int32 y, int32 btn, int32 btnCount); delegate void NativeMouseUpDelegate(void* window, int32 x, int32 y, int32 btn); - delegate void NativeMouseWheelDelegate(void* window, int32 x, int32 y, int32 delta); + delegate void NativeMouseWheelDelegate(void* window, int32 x, int32 y, float delta); delegate void NativeMouseLeaveDelegate(void* window); delegate void NativeMenuItemSelectedDelegate(void* window, void* menu); @@ -296,7 +296,7 @@ namespace Beefy static void Static_NativeMouseProxyMoveDelegate(void* window, int32 mouseX, int32 mouseY) { GetBFWindow(window).MouseProxyMove(mouseX, mouseY); } static void Static_NativeMouseDownDelegate(void* window, int32 mouseX, int32 mouseY, int32 btnNum, int32 btnCount) { GetBFWindow(window).MouseDown(mouseX, mouseY, btnNum, btnCount); } static void Static_NativeMouseUpDelegate(void* window, int32 mouseX, int32 mouseY, int32 btnNum) { GetBFWindow(window).MouseUp(mouseX, mouseY, btnNum); } - static void Static_NativeMouseWheelDelegate(void* window, int32 mouseX, int32 mouseY, int32 delta) { GetBFWindow(window).MouseWheel(mouseX, mouseY, delta); } + static void Static_NativeMouseWheelDelegate(void* window, int32 mouseX, int32 mouseY, float delta) { GetBFWindow(window).MouseWheel(mouseX, mouseY, delta); } static void Static_NativeMouseLeaveDelegate(void* window) { GetBFWindow(window).MouseLeave(); } static void Static_NativeMenuItemSelectedDelegate(void* window, void* item) { GetBFWindow(window).NativeMenuItemSelected(item); } #endif @@ -640,7 +640,7 @@ namespace Beefy { } - public virtual void MouseWheel(int32 x, int32 y, int32 delta) + public virtual void MouseWheel(int32 x, int32 y, float delta) { } diff --git a/BeefLibs/Beefy2D/src/events/MouseEvent.bf b/BeefLibs/Beefy2D/src/events/MouseEvent.bf index 961611d8..b10cb7ad 100644 --- a/BeefLibs/Beefy2D/src/events/MouseEvent.bf +++ b/BeefLibs/Beefy2D/src/events/MouseEvent.bf @@ -11,7 +11,7 @@ namespace Beefy.events public float mY; public int32 mBtn; public int32 mBtnCount; - public int32 mWheelDelta; + public float mWheelDelta; public void GetRootCoords(out float x, out float y) { diff --git a/BeefLibs/Beefy2D/src/theme/dark/DarkEditWidget.bf b/BeefLibs/Beefy2D/src/theme/dark/DarkEditWidget.bf index b7825d13..20a01a7f 100644 --- a/BeefLibs/Beefy2D/src/theme/dark/DarkEditWidget.bf +++ b/BeefLibs/Beefy2D/src/theme/dark/DarkEditWidget.bf @@ -889,7 +889,7 @@ namespace Beefy.theme.dark base.InitScrollbars(wantHorz, wantVert); - float scrollIncrement = ((DarkEditWidgetContent) mEditWidgetContent).mFont.GetLineSpacing() * GS!(3); + float scrollIncrement = ((DarkEditWidgetContent) mEditWidgetContent).mFont.GetLineSpacing(); if (mHorzScrollbar != null) mHorzScrollbar.mScrollIncrement = scrollIncrement; if (mVertScrollbar != null) diff --git a/BeefLibs/Beefy2D/src/widgets/InfiniteScrollbar.bf b/BeefLibs/Beefy2D/src/widgets/InfiniteScrollbar.bf index 40ae1e88..3723b83d 100644 --- a/BeefLibs/Beefy2D/src/widgets/InfiniteScrollbar.bf +++ b/BeefLibs/Beefy2D/src/widgets/InfiniteScrollbar.bf @@ -139,7 +139,7 @@ namespace Beefy.widgets ScrollSetLevel(accelFrac); } - public virtual void FixedScroll(int32 delta) + public virtual void FixedScroll(float delta) { HandleScroll(delta * mFixedScrollAmt); } @@ -238,7 +238,7 @@ namespace Beefy.widgets mDownTick = 0; } - public override void MouseWheel(float x, float y, int32 delta) + public override void MouseWheel(float x, float y, float delta) { FixedScroll(-delta); } diff --git a/BeefLibs/Beefy2D/src/widgets/ScrollableWidget.bf b/BeefLibs/Beefy2D/src/widgets/ScrollableWidget.bf index 8be69273..4a6b87d8 100644 --- a/BeefLibs/Beefy2D/src/widgets/ScrollableWidget.bf +++ b/BeefLibs/Beefy2D/src/widgets/ScrollableWidget.bf @@ -250,7 +250,7 @@ namespace Beefy.widgets } } - public override void MouseWheel(float x, float y, int32 delta) + public override void MouseWheel(float x, float y, float delta) { base.MouseWheel(x, y, delta); if (mVertScrollbar != null) diff --git a/BeefLibs/Beefy2D/src/widgets/Scrollbar.bf b/BeefLibs/Beefy2D/src/widgets/Scrollbar.bf index 83334bd5..cb1cb52b 100644 --- a/BeefLibs/Beefy2D/src/widgets/Scrollbar.bf +++ b/BeefLibs/Beefy2D/src/widgets/Scrollbar.bf @@ -224,7 +224,7 @@ namespace Beefy.widgets mDownTick = 0; } - public override void MouseWheel(float x, float y, int32 delta) + public override void MouseWheel(float x, float y, float delta) { Scroll(GetScrollIncrement() * -delta); } diff --git a/BeefLibs/Beefy2D/src/widgets/Widget.bf b/BeefLibs/Beefy2D/src/widgets/Widget.bf index a83decf5..f0c6b9a6 100644 --- a/BeefLibs/Beefy2D/src/widgets/Widget.bf +++ b/BeefLibs/Beefy2D/src/widgets/Widget.bf @@ -708,7 +708,7 @@ namespace Beefy.widgets } } - public virtual void MouseWheel(float x, float y, int32 delta) + public virtual void MouseWheel(float x, float y, float delta) { MarkDirty(); diff --git a/BeefLibs/Beefy2D/src/widgets/WidgetWindow.bf b/BeefLibs/Beefy2D/src/widgets/WidgetWindow.bf index f4dd2fd7..c177c655 100644 --- a/BeefLibs/Beefy2D/src/widgets/WidgetWindow.bf +++ b/BeefLibs/Beefy2D/src/widgets/WidgetWindow.bf @@ -708,7 +708,7 @@ namespace Beefy.widgets mCaptureWidget = null; } - public override void MouseWheel(int32 inX, int32 inY, int32 delta) + public override void MouseWheel(int32 inX, int32 inY, float delta) { float x; float y; diff --git a/BeefySysLib/BFWindow.h b/BeefySysLib/BFWindow.h index af04f1ba..20a4514d 100644 --- a/BeefySysLib/BFWindow.h +++ b/BeefySysLib/BFWindow.h @@ -20,7 +20,7 @@ typedef void (*BFWindow_MouseMove)(BFWindow* window, int x, int y); typedef void (*BFWindow_MouseProxyMove)(BFWindow* window, int x, int y); typedef void (*BFWindow_MouseDown)(BFWindow* window, int x, int y, int btn, int btnCount); typedef void (*BFWindow_MouseUp)(BFWindow* window, int x, int y, int btn); -typedef void (*BFWindow_MouseWheel)(BFWindow* window, int x, int y, int delta); +typedef void (*BFWindow_MouseWheel)(BFWindow* window, int x, int y, float delta); typedef void (*BFWindow_MouseLeave)(BFWindow* window); typedef void (*BFWindow_MenuItemSelectedFunc)(BFWindow* window, BFMenu* menu); diff --git a/BeefySysLib/platform/win/WinBFApp.cpp b/BeefySysLib/platform/win/WinBFApp.cpp index 05068f1c..a046f28b 100644 --- a/BeefySysLib/platform/win/WinBFApp.cpp +++ b/BeefySysLib/platform/win/WinBFApp.cpp @@ -634,11 +634,16 @@ LRESULT WinBFWindow::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar aWindow->mIsMouseInside = true; cursorWindow = aWindow; } - } + } ++itr; } } + UINT ucNumLines = 0; + SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, &ucNumLines, 0); + if (ucNumLines == 0) + ucNumLines = 3; // Default + if ((cursorWindow != this) && (mIsMouseInside)) { mMouseLeaveFunc(this); @@ -648,7 +653,7 @@ LRESULT WinBFWindow::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar POINT pt = {x, y}; ScreenToClient(cursorWindow->mHWnd, &pt); - int delta = ((int16)HIWORD(wParam)) / 120; + float delta = ((int16)HIWORD(wParam)) / 120.0f * (float)ucNumLines; mMouseWheelFunc(cursorWindow, pt.x, pt.y, delta); } break; diff --git a/IDE/src/ui/BinaryDataWidget.bf b/IDE/src/ui/BinaryDataWidget.bf index 972ed17d..6b0fdb79 100644 --- a/IDE/src/ui/BinaryDataWidget.bf +++ b/IDE/src/ui/BinaryDataWidget.bf @@ -2135,7 +2135,7 @@ namespace IDE.ui } */ - public override void MouseWheel(float x, float y, int32 delta) + public override void MouseWheel(float x, float y, float delta) { base.MouseWheel(x, y, delta); if (mInfiniteScrollbar != null)