diff --git a/src/ogfx/gui/Events.hpp b/src/ogfx/gui/Events.hpp index 734afc8..696bc9a 100644 --- a/src/ogfx/gui/Events.hpp +++ b/src/ogfx/gui/Events.hpp @@ -61,6 +61,7 @@ namespace ogfx f32 position_y; eButton button; eScrollDirection scroll { eScrollDirection::None }; + f32 scrollAmount { 0 }; gui::Widget* mousePressedOnWidget { nullptr }; WindowCore& parentWindow; }; diff --git a/src/ogfx/gui/Window.cpp b/src/ogfx/gui/Window.cpp index 5cc6edb..2634a3d 100644 --- a/src/ogfx/gui/Window.cpp +++ b/src/ogfx/gui/Window.cpp @@ -462,12 +462,16 @@ namespace ogfx else if (event.type == SDL_EVENT_MOUSE_WHEEL) { MouseEventData mmd = get_mouse_state(event); - if (event.wheel.y == -1) + f32 delta = event.wheel.y; + if (event.wheel.direction == SDL_MOUSEWHEEL_FLIPPED) + delta = -delta; + if (delta < 0) mmd.scroll = MouseEventData::eScrollDirection::Down; - else if (event.wheel.y == 1) + else if (delta > 0) mmd.scroll = MouseEventData::eScrollDirection::Up; else mmd.scroll = MouseEventData::eScrollDirection::None; + mmd.scrollAmount = delta; ostd::SignalHandler::emitSignal(ostd::BuiltinSignals::MouseScrolled, ostd::Signal::Priority::RealTime, mmd); } else if (event.type == SDL_EVENT_MOUSE_BUTTON_DOWN) diff --git a/src/ogfx/gui/widgets/Containers.cpp b/src/ogfx/gui/widgets/Containers.cpp index 9f39d40..fcc2c10 100644 --- a/src/ogfx/gui/widgets/Containers.cpp +++ b/src/ogfx/gui/widgets/Containers.cpp @@ -83,9 +83,9 @@ namespace ogfx return; f32 offset_y = 0; if (event.mouse->scroll == MouseEventData::eScrollDirection::Down) - offset_y = -(m_scrollSpeed.y * 15.0f); + offset_y = (m_scrollSpeed.y * event.mouse->scrollAmount * 15.0f); else if (event.mouse->scroll == MouseEventData::eScrollDirection::Up) - offset_y = (m_scrollSpeed.y * 15.0f); + offset_y = (m_scrollSpeed.y * event.mouse->scrollAmount * 15.0f); addScrollOffset({ 0, offset_y }); event.handle(); }