From e73489e958c87151d38b835812b77f10c831ad40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Tue, 30 Nov 2021 12:38:57 +0100 Subject: [PATCH] Platform/Events: Replace MousebuttonDoubleClicked with clickCount in MouseButtonEvent --- include/Nazara/Platform/Enums.hpp | 1 - include/Nazara/Platform/Event.hpp | 5 +++-- include/Nazara/Platform/EventHandler.hpp | 1 - include/Nazara/Platform/EventHandler.inl | 4 ---- include/Nazara/Widgets/BaseWidget.hpp | 2 ++ src/Nazara/Platform/SDL2/WindowImpl.cpp | 9 +-------- src/Nazara/Widgets/BaseWidget.cpp | 8 ++++++++ src/Nazara/Widgets/Canvas.cpp | 7 ++++++- 8 files changed, 20 insertions(+), 17 deletions(-) diff --git a/include/Nazara/Platform/Enums.hpp b/include/Nazara/Platform/Enums.hpp index 90498e3ef..9ce5eeb2f 100644 --- a/include/Nazara/Platform/Enums.hpp +++ b/include/Nazara/Platform/Enums.hpp @@ -52,7 +52,6 @@ namespace Nz LostFocus, KeyPressed, KeyReleased, - MouseButtonDoubleClicked, MouseButtonPressed, MouseButtonReleased, MouseEntered, diff --git a/include/Nazara/Platform/Event.hpp b/include/Nazara/Platform/Event.hpp index 22b86c239..4837b4d8b 100644 --- a/include/Nazara/Platform/Event.hpp +++ b/include/Nazara/Platform/Event.hpp @@ -34,13 +34,14 @@ namespace Nz }; // Used by: - // -WindowEventType::MouseButtonDoubleClicked // -WindowEventType::MouseButtonPressed + // -WindowEventType::MouseButtonReleased struct MouseButtonEvent { Mouse::Button button; int x; int y; + unsigned int clickCount; //< 1 for simple click, 2 for double click, 3 for triple click. (always 1 on release event) }; // Used by: @@ -104,8 +105,8 @@ namespace Nz KeyEvent key; // Used by: - // -WindowEventType::MouseButtonDoubleClicked // -WindowEventType::MouseButtonPressed + // -WindowEventType::MouseButtonReleased MouseButtonEvent mouseButton; // Used by: diff --git a/include/Nazara/Platform/EventHandler.hpp b/include/Nazara/Platform/EventHandler.hpp index 9dbce9f50..bd9b26a75 100644 --- a/include/Nazara/Platform/EventHandler.hpp +++ b/include/Nazara/Platform/EventHandler.hpp @@ -38,7 +38,6 @@ namespace Nz NazaraSignal(OnLostFocus, const EventHandler* /*eventHandler*/); NazaraSignal(OnKeyPressed, const EventHandler* /*eventHandler*/, const WindowEvent::KeyEvent& /*event*/); NazaraSignal(OnKeyReleased, const EventHandler* /*eventHandler*/, const WindowEvent::KeyEvent& /*event*/); - NazaraSignal(OnMouseButtonDoubleClicked, const EventHandler* /*eventHandler*/, const WindowEvent::MouseButtonEvent& /*event*/); NazaraSignal(OnMouseButtonPressed, const EventHandler* /*eventHandler*/, const WindowEvent::MouseButtonEvent& /*event*/); NazaraSignal(OnMouseButtonReleased, const EventHandler* /*eventHandler*/, const WindowEvent::MouseButtonEvent& /*event*/); NazaraSignal(OnMouseEntered, const EventHandler* /*eventHandler*/); diff --git a/include/Nazara/Platform/EventHandler.inl b/include/Nazara/Platform/EventHandler.inl index b557e3235..32a674e2a 100644 --- a/include/Nazara/Platform/EventHandler.inl +++ b/include/Nazara/Platform/EventHandler.inl @@ -35,10 +35,6 @@ namespace Nz OnLostFocus(this); break; - case WindowEventType::MouseButtonDoubleClicked: - OnMouseButtonDoubleClicked(this, event.mouseButton); - break; - case WindowEventType::MouseButtonPressed: OnMouseButtonPressed(this, event.mouseButton); break; diff --git a/include/Nazara/Widgets/BaseWidget.hpp b/include/Nazara/Widgets/BaseWidget.hpp index 56cb3f034..c531ec2d7 100644 --- a/include/Nazara/Widgets/BaseWidget.hpp +++ b/include/Nazara/Widgets/BaseWidget.hpp @@ -129,8 +129,10 @@ namespace Nz virtual void OnKeyReleased(const WindowEvent::KeyEvent& key); virtual void OnMouseEnter(); virtual void OnMouseMoved(int x, int y, int deltaX, int deltaY); + virtual void OnMouseButtonDoublePress(int x, int y, Mouse::Button button); virtual void OnMouseButtonPress(int x, int y, Mouse::Button button); virtual void OnMouseButtonRelease(int x, int y, Mouse::Button button); + virtual void OnMouseButtonTriplePress(int x, int y, Mouse::Button button); virtual void OnMouseWheelMoved(int x, int y, float delta); virtual void OnMouseExit(); virtual void OnParentResized(const Vector2f& newSize); diff --git a/src/Nazara/Platform/SDL2/WindowImpl.cpp b/src/Nazara/Platform/SDL2/WindowImpl.cpp index a5742026a..bbc6b2bae 100644 --- a/src/Nazara/Platform/SDL2/WindowImpl.cpp +++ b/src/Nazara/Platform/SDL2/WindowImpl.cpp @@ -389,14 +389,7 @@ namespace Nz evt.mouseButton.button = SDLToNazaraButton(event->button.button); evt.mouseButton.x = event->button.x; evt.mouseButton.y = event->button.y; - - if (event->button.clicks % 2 == 0) - { - evt.type = WindowEventType::MouseButtonDoubleClicked; - - window->m_parent->PushEvent(evt); - } - + evt.mouseButton.clickCount = event->button.clicks; evt.type = WindowEventType::MouseButtonPressed; break; diff --git a/src/Nazara/Widgets/BaseWidget.cpp b/src/Nazara/Widgets/BaseWidget.cpp index 2d124817f..ed99e0b44 100644 --- a/src/Nazara/Widgets/BaseWidget.cpp +++ b/src/Nazara/Widgets/BaseWidget.cpp @@ -282,6 +282,10 @@ namespace Nz { } + void BaseWidget::OnMouseButtonDoublePress(int /*x*/, int /*y*/, Mouse::Button /*button*/) + { + } + void BaseWidget::OnMouseButtonPress(int /*x*/, int /*y*/, Mouse::Button /*button*/) { } @@ -290,6 +294,10 @@ namespace Nz { } + void BaseWidget::OnMouseButtonTriplePress(int /*x*/, int /*y*/, Mouse::Button /*button*/) + { + } + void BaseWidget::OnMouseWheelMoved(int /*x*/, int /*y*/, float /*delta*/) { } diff --git a/src/Nazara/Widgets/Canvas.cpp b/src/Nazara/Widgets/Canvas.cpp index e2d180469..98e5957d7 100644 --- a/src/Nazara/Widgets/Canvas.cpp +++ b/src/Nazara/Widgets/Canvas.cpp @@ -98,7 +98,12 @@ namespace Nz int x = static_cast(std::round(event.x - hoveredWidget.box.x)); int y = static_cast(std::round(m_size.y - event.y - hoveredWidget.box.y)); - hoveredWidget.widget->OnMouseButtonPress(x, y, event.button); + if (event.clickCount == 2) + targetWidget.widget->OnMouseButtonDoublePress(x, y, event.button); + else if (event.clickCount == 3) + targetWidget.widget->OnMouseButtonTriplePress(x, y, event.button); + else + targetWidget.widget->OnMouseButtonPress(x, y, event.button); } SetMouseOwner(m_hoveredWidget);