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.
master
David Capello 2022-05-30 18:44:12 -03:00
parent 0d0cfa7bb6
commit 251323a4d5
7 changed files with 39 additions and 40 deletions

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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));
}
}

View File

@ -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,

View File

@ -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); }

View File

@ -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<MouseMessage*>(msg);
MouseMessage mouseMsg2(kMouseDownMessage,
mouseMsg->pointerType(),
mouseMsg->button(),
mouseMsg->modifiers(),
mouseMsg->position(),
mouseMsg->wheelDelta());
MouseMessage mouseMsg2(kMouseDownMessage, *mouseMsg);
sendMessage(&mouseMsg2);
break;
}