From 251323a4d520fd9f418037e5ca81d71b35edb9d5 Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 30 May 2022 18:44:12 -0300 Subject: [PATCH] Add new MouseMessage() ctor to copy full information of the original message This is mainly to keep the pressure information when a MouseMessage is copied, and any future property which could be added in MouseMessage. --- src/app/ui/toolbar.cpp | 10 ++-------- src/ui/combobox.cpp | 6 +----- src/ui/int_entry.cpp | 8 ++------ src/ui/manager.cpp | 21 +++++++++++++++------ src/ui/manager.h | 6 ++++-- src/ui/message.h | 12 ++++++++++++ src/ui/widget.cpp | 16 +++------------- 7 files changed, 39 insertions(+), 40 deletions(-) diff --git a/src/app/ui/toolbar.cpp b/src/app/ui/toolbar.cpp index 2122a9ef3..912499696 100644 --- a/src/app/ui/toolbar.cpp +++ b/src/app/ui/toolbar.cpp @@ -226,10 +226,7 @@ bool ToolBar::onProcessMessage(Message* msg) MouseMessage* mouseMsg2 = new MouseMessage( kMouseDownMessage, - mouseMsg->pointerType(), - mouseMsg->button(), - mouseMsg->modifiers(), - mouseMsg->position()); + *mouseMsg); mouseMsg2->setRecipient(strip); manager()->enqueueMessage(mouseMsg2); } @@ -658,10 +655,7 @@ bool ToolBar::ToolStrip::onProcessMessage(Message* msg) MouseMessage* mouseMsg2 = new MouseMessage( kMouseDownMessage, - mouseMsg->pointerType(), - mouseMsg->button(), - mouseMsg->modifiers(), - mouseMsg->position()); + *mouseMsg); mouseMsg2->setRecipient(bar); manager()->enqueueMessage(mouseMsg2); } diff --git a/src/ui/combobox.cpp b/src/ui/combobox.cpp index 58826d567..2d277ad6a 100644 --- a/src/ui/combobox.cpp +++ b/src/ui/combobox.cpp @@ -514,11 +514,7 @@ bool ComboBoxEntry::onProcessMessage(Message* msg) (pick == listbox || pick->hasAncestor(listbox))) { releaseMouse(); - MouseMessage mouseMsg2(kMouseDownMessage, - mouseMsg->pointerType(), - mouseMsg->button(), - mouseMsg->modifiers(), - mouseMsg->position()); + MouseMessage mouseMsg2(kMouseDownMessage, *mouseMsg); pick->sendMessage(&mouseMsg2); return true; } diff --git a/src/ui/int_entry.cpp b/src/ui/int_entry.cpp index 5e88a0dc0..94fd72028 100644 --- a/src/ui/int_entry.cpp +++ b/src/ui/int_entry.cpp @@ -1,5 +1,5 @@ // Aseprite UI Library -// Copyright (C) 2019-2020 Igara Studio S.A. +// Copyright (C) 2019-2022 Igara Studio S.A. // Copyright (C) 2001-2017 David Capello // // This file is released under the terms of the MIT license. @@ -94,11 +94,7 @@ bool IntEntry::onProcessMessage(Message* msg) if (pick == &m_slider) { releaseMouse(); - MouseMessage mouseMsg2(kMouseDownMessage, - mouseMsg->pointerType(), - mouseMsg->button(), - mouseMsg->modifiers(), - mouseMsg->position()); + MouseMessage mouseMsg2(kMouseDownMessage, *mouseMsg); m_slider.sendMessage(&mouseMsg2); } } diff --git a/src/ui/manager.cpp b/src/ui/manager.cpp index 744de6198..1f17a4449 100644 --- a/src/ui/manager.cpp +++ b/src/ui/manager.cpp @@ -467,7 +467,8 @@ void Manager::generateMessagesFromOSEvents() osEvent.position(), m_mouseButton = mouse_button_from_os_to_ui(osEvent), osEvent.modifiers(), - osEvent.pointerType()); + osEvent.pointerType(), + osEvent.pressure()); break; } @@ -486,7 +487,8 @@ void Manager::generateMessagesFromOSEvents() osEvent.position(), m_mouseButton = mouse_button_from_os_to_ui(osEvent), osEvent.modifiers(), - osEvent.pointerType()); + osEvent.pointerType(), + osEvent.pressure()); break; } @@ -550,7 +552,8 @@ void Manager::handleMouseMove(const gfx::Point& mousePos, void Manager::handleMouseDown(const gfx::Point& mousePos, MouseButton mouseButton, KeyModifiers modifiers, - PointerType pointerType) + PointerType pointerType, + const float pressure) { handleWindowZOrder(); @@ -561,7 +564,10 @@ void Manager::handleMouseDown(const gfx::Point& mousePos, mousePos, pointerType, mouseButton, - modifiers)); + modifiers, + gfx::Point(0, 0), + false, + pressure)); } void Manager::handleMouseUp(const gfx::Point& mousePos, @@ -582,7 +588,8 @@ void Manager::handleMouseUp(const gfx::Point& mousePos, void Manager::handleMouseDoubleClick(const gfx::Point& mousePos, MouseButton mouseButton, KeyModifiers modifiers, - PointerType pointerType) + PointerType pointerType, + const float pressure) { Widget* dst = (capture_widget ? capture_widget: mouse_widget); if (dst) { @@ -590,7 +597,9 @@ void Manager::handleMouseDoubleClick(const gfx::Point& mousePos, newMouseMessage( kDoubleClickMessage, dst, mousePos, pointerType, - mouseButton, modifiers)); + mouseButton, modifiers, + gfx::Point(0, 0), false, + pressure)); } } diff --git a/src/ui/manager.h b/src/ui/manager.h index 4cce3e231..70f67e0c2 100644 --- a/src/ui/manager.h +++ b/src/ui/manager.h @@ -129,7 +129,8 @@ namespace ui { void handleMouseDown(const gfx::Point& mousePos, MouseButton mouseButton, KeyModifiers modifiers, - PointerType pointerType); + PointerType pointerType, + const float pressure); void handleMouseUp(const gfx::Point& mousePos, MouseButton mouseButton, KeyModifiers modifiers, @@ -137,7 +138,8 @@ namespace ui { void handleMouseDoubleClick(const gfx::Point& mousePos, MouseButton mouseButton, KeyModifiers modifiers, - PointerType pointerType); + PointerType pointerType, + const float pressure); void handleMouseWheel(const gfx::Point& mousePos, KeyModifiers modifiers, PointerType pointerType, diff --git a/src/ui/message.h b/src/ui/message.h index f80f04d9b..99e54f9e0 100644 --- a/src/ui/message.h +++ b/src/ui/message.h @@ -131,6 +131,18 @@ namespace ui { m_pressure(pressure) { } + // Copy other MouseMessage converting its type + MouseMessage(MessageType type, + const MouseMessage& other) + : Message(type, other.modifiers()), + m_pointerType(other.pointerType()), + m_button(other.button()), + m_pos(other.position()), + m_wheelDelta(other.wheelDelta()), + m_preciseWheel(other.preciseWheel()), + m_pressure(other.pressure()) { + } + PointerType pointerType() const { return m_pointerType; } MouseButton button() const { return m_button; } bool left() const { return (m_button == kButtonLeft); } diff --git a/src/ui/widget.cpp b/src/ui/widget.cpp index b28bccacc..096a56b55 100644 --- a/src/ui/widget.cpp +++ b/src/ui/widget.cpp @@ -1403,12 +1403,8 @@ bool Widget::offerCapture(ui::MouseMessage* mouseMsg, int widget_type) if (pick && pick != this && pick->type() == widget_type) { releaseMouse(); - MouseMessage* mouseMsg2 = new MouseMessage( - kMouseDownMessage, - mouseMsg->pointerType(), - mouseMsg->button(), - mouseMsg->modifiers(), - mouseMsg->position()); + MouseMessage* mouseMsg2 = new MouseMessage(kMouseDownMessage, + *mouseMsg); mouseMsg2->setRecipient(pick); man->enqueueMessage(mouseMsg2); return true; @@ -1490,13 +1486,7 @@ bool Widget::onProcessMessage(Message* msg) case kDoubleClickMessage: { // Convert double clicks into mouse down MouseMessage* mouseMsg = static_cast(msg); - MouseMessage mouseMsg2(kMouseDownMessage, - mouseMsg->pointerType(), - mouseMsg->button(), - mouseMsg->modifiers(), - mouseMsg->position(), - mouseMsg->wheelDelta()); - + MouseMessage mouseMsg2(kMouseDownMessage, *mouseMsg); sendMessage(&mouseMsg2); break; }