mirror of
https://github.com/aseprite/aseprite.git
synced 2025-04-16 05:42:32 +00:00
Enable eraser support for Wacom tablets on Skia/Win back-end
Related to #610
This commit is contained in:
parent
47708a6826
commit
a58cbfbc1c
@ -113,6 +113,7 @@ protected:
|
|||||||
if (lmb->isPressed(msg) || rmb->isPressed(msg)) {
|
if (lmb->isPressed(msg) || rmb->isPressed(msg)) {
|
||||||
MouseMessage mouseMsg(
|
MouseMessage mouseMsg(
|
||||||
(msg->type() == kKeyDownMessage ? kMouseDownMessage: kMouseUpMessage),
|
(msg->type() == kKeyDownMessage ? kMouseDownMessage: kMouseUpMessage),
|
||||||
|
PointerType::Unknown,
|
||||||
(lmb->isPressed(msg) ? kButtonLeft: kButtonRight),
|
(lmb->isPressed(msg) ? kButtonLeft: kButtonRight),
|
||||||
msg->modifiers(),
|
msg->modifiers(),
|
||||||
ui::get_mouse_position());
|
ui::get_mouse_position());
|
||||||
|
@ -164,6 +164,7 @@ Editor::Editor(Document* document, EditorFlags flags)
|
|||||||
, m_antsOffset(0)
|
, m_antsOffset(0)
|
||||||
, m_customizationDelegate(NULL)
|
, m_customizationDelegate(NULL)
|
||||||
, m_docView(NULL)
|
, m_docView(NULL)
|
||||||
|
, m_lastPointerType(ui::PointerType::Unknown)
|
||||||
, m_flags(flags)
|
, m_flags(flags)
|
||||||
, m_secondaryButton(false)
|
, m_secondaryButton(false)
|
||||||
, m_aniSpeed(1.0)
|
, m_aniSpeed(1.0)
|
||||||
@ -919,6 +920,12 @@ tools::Tool* Editor::getCurrentEditorTool()
|
|||||||
if (m_quicktool)
|
if (m_quicktool)
|
||||||
return m_quicktool;
|
return m_quicktool;
|
||||||
|
|
||||||
|
// Eraser tip
|
||||||
|
if (m_lastPointerType == ui::PointerType::Eraser) {
|
||||||
|
tools::ToolBox* toolbox = App::instance()->getToolBox();
|
||||||
|
return toolbox->getToolById(tools::WellKnownTools::Eraser);
|
||||||
|
}
|
||||||
|
|
||||||
tools::Tool* tool = App::instance()->activeTool();
|
tools::Tool* tool = App::instance()->activeTool();
|
||||||
|
|
||||||
if (m_secondaryButton &&
|
if (m_secondaryButton &&
|
||||||
@ -1277,6 +1284,8 @@ bool Editor::onProcessMessage(Message* msg)
|
|||||||
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
|
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
|
||||||
|
|
||||||
m_oldPos = mouseMsg->position();
|
m_oldPos = mouseMsg->position();
|
||||||
|
m_lastPointerType = mouseMsg->pointerType();
|
||||||
|
|
||||||
if (!m_secondaryButton && mouseMsg->right()) {
|
if (!m_secondaryButton && mouseMsg->right()) {
|
||||||
m_secondaryButton = mouseMsg->right();
|
m_secondaryButton = mouseMsg->right();
|
||||||
|
|
||||||
@ -1293,6 +1302,9 @@ bool Editor::onProcessMessage(Message* msg)
|
|||||||
case kMouseMoveMessage:
|
case kMouseMoveMessage:
|
||||||
if (m_sprite) {
|
if (m_sprite) {
|
||||||
EditorStatePtr holdState(m_state);
|
EditorStatePtr holdState(m_state);
|
||||||
|
|
||||||
|
m_lastPointerType = static_cast<MouseMessage*>(msg)->pointerType();
|
||||||
|
|
||||||
return m_state->onMouseMove(this, static_cast<MouseMessage*>(msg));
|
return m_state->onMouseMove(this, static_cast<MouseMessage*>(msg));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1303,6 +1315,8 @@ bool Editor::onProcessMessage(Message* msg)
|
|||||||
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
|
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
|
||||||
bool result = m_state->onMouseUp(this, mouseMsg);
|
bool result = m_state->onMouseUp(this, mouseMsg);
|
||||||
|
|
||||||
|
m_lastPointerType = mouseMsg->pointerType();
|
||||||
|
|
||||||
if (!hasCapture()) {
|
if (!hasCapture()) {
|
||||||
m_secondaryButton = false;
|
m_secondaryButton = false;
|
||||||
|
|
||||||
@ -1320,6 +1334,9 @@ bool Editor::onProcessMessage(Message* msg)
|
|||||||
if (m_sprite) {
|
if (m_sprite) {
|
||||||
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
|
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
|
||||||
EditorStatePtr holdState(m_state);
|
EditorStatePtr holdState(m_state);
|
||||||
|
|
||||||
|
m_lastPointerType = mouseMsg->pointerType();
|
||||||
|
|
||||||
bool used = m_state->onDoubleClick(this, mouseMsg);
|
bool used = m_state->onDoubleClick(this, mouseMsg);
|
||||||
if (used)
|
if (used)
|
||||||
return true;
|
return true;
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include "render/zoom.h"
|
#include "render/zoom.h"
|
||||||
#include "ui/base.h"
|
#include "ui/base.h"
|
||||||
#include "ui/cursor_type.h"
|
#include "ui/cursor_type.h"
|
||||||
|
#include "ui/pointer_type.h"
|
||||||
#include "ui/timer.h"
|
#include "ui/timer.h"
|
||||||
#include "ui/widget.h"
|
#include "ui/widget.h"
|
||||||
|
|
||||||
@ -324,6 +325,7 @@ namespace app {
|
|||||||
DocumentView* m_docView;
|
DocumentView* m_docView;
|
||||||
|
|
||||||
gfx::Point m_oldPos;
|
gfx::Point m_oldPos;
|
||||||
|
ui::PointerType m_lastPointerType;
|
||||||
|
|
||||||
EditorFlags m_flags;
|
EditorFlags m_flags;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2001-2015 David Capello
|
// Copyright (C) 2001-2016 David Capello
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify
|
// This program is free software; you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License version 2 as
|
// it under the terms of the GNU General Public License version 2 as
|
||||||
@ -221,6 +221,7 @@ bool ToolBar::onProcessMessage(Message* msg)
|
|||||||
|
|
||||||
MouseMessage* mouseMsg2 = new MouseMessage(
|
MouseMessage* mouseMsg2 = new MouseMessage(
|
||||||
kMouseDownMessage,
|
kMouseDownMessage,
|
||||||
|
mouseMsg->pointerType(),
|
||||||
mouseMsg->buttons(),
|
mouseMsg->buttons(),
|
||||||
mouseMsg->modifiers(),
|
mouseMsg->modifiers(),
|
||||||
mouseMsg->position());
|
mouseMsg->position());
|
||||||
@ -635,6 +636,7 @@ bool ToolBar::ToolStrip::onProcessMessage(Message* msg)
|
|||||||
|
|
||||||
MouseMessage* mouseMsg2 = new MouseMessage(
|
MouseMessage* mouseMsg2 = new MouseMessage(
|
||||||
kMouseDownMessage,
|
kMouseDownMessage,
|
||||||
|
mouseMsg->pointerType(),
|
||||||
mouseMsg->buttons(),
|
mouseMsg->buttons(),
|
||||||
mouseMsg->modifiers(),
|
mouseMsg->modifiers(),
|
||||||
mouseMsg->position());
|
mouseMsg->position());
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite UI Library
|
// Aseprite UI Library
|
||||||
// Copyright (C) 2001-2013, 2015 David Capello
|
// Copyright (C) 2001-2016 David Capello
|
||||||
//
|
//
|
||||||
// This file is released under the terms of the MIT license.
|
// This file is released under the terms of the MIT license.
|
||||||
// Read LICENSE.txt for more information.
|
// Read LICENSE.txt for more information.
|
||||||
@ -481,6 +481,7 @@ bool ComboBoxEntry::onProcessMessage(Message* msg)
|
|||||||
releaseMouse();
|
releaseMouse();
|
||||||
|
|
||||||
MouseMessage mouseMsg2(kMouseDownMessage,
|
MouseMessage mouseMsg2(kMouseDownMessage,
|
||||||
|
mouseMsg->pointerType(),
|
||||||
mouseMsg->buttons(),
|
mouseMsg->buttons(),
|
||||||
mouseMsg->modifiers(),
|
mouseMsg->modifiers(),
|
||||||
mouseMsg->position());
|
mouseMsg->position());
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite UI Library
|
// Aseprite UI Library
|
||||||
// Copyright (C) 2001-2013, 2015 David Capello
|
// Copyright (C) 2001-2016 David Capello
|
||||||
//
|
//
|
||||||
// This file is released under the terms of the MIT license.
|
// This file is released under the terms of the MIT license.
|
||||||
// Read LICENSE.txt for more information.
|
// Read LICENSE.txt for more information.
|
||||||
@ -90,6 +90,7 @@ bool IntEntry::onProcessMessage(Message* msg)
|
|||||||
releaseMouse();
|
releaseMouse();
|
||||||
|
|
||||||
MouseMessage mouseMsg2(kMouseDownMessage,
|
MouseMessage mouseMsg2(kMouseDownMessage,
|
||||||
|
mouseMsg->pointerType(),
|
||||||
mouseMsg->buttons(),
|
mouseMsg->buttons(),
|
||||||
mouseMsg->modifiers(),
|
mouseMsg->modifiers(),
|
||||||
mouseMsg->position());
|
mouseMsg->position());
|
||||||
|
@ -247,7 +247,8 @@ bool Manager::generateMessages()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Manager::generateSetCursorMessage(const gfx::Point& mousePos,
|
void Manager::generateSetCursorMessage(const gfx::Point& mousePos,
|
||||||
KeyModifiers modifiers)
|
KeyModifiers modifiers,
|
||||||
|
PointerType pointerType)
|
||||||
{
|
{
|
||||||
if (get_mouse_cursor() == kOutsideDisplay)
|
if (get_mouse_cursor() == kOutsideDisplay)
|
||||||
return;
|
return;
|
||||||
@ -257,7 +258,9 @@ void Manager::generateSetCursorMessage(const gfx::Point& mousePos,
|
|||||||
enqueueMessage(
|
enqueueMessage(
|
||||||
newMouseMessage(
|
newMouseMessage(
|
||||||
kSetCursorMessage, dst,
|
kSetCursorMessage, dst,
|
||||||
mousePos, _internal_get_mouse_buttons(),
|
mousePos,
|
||||||
|
pointerType,
|
||||||
|
_internal_get_mouse_buttons(),
|
||||||
modifiers));
|
modifiers));
|
||||||
else
|
else
|
||||||
set_mouse_cursor(kArrowCursor);
|
set_mouse_cursor(kArrowCursor);
|
||||||
@ -273,6 +276,18 @@ static MouseButtons mouse_buttons_from_she_to_ui(const she::Event& sheEvent)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PointerType pointer_type_from_she_event(const she::Event& sheEvent)
|
||||||
|
{
|
||||||
|
switch (sheEvent.device()) {
|
||||||
|
case she::Event::MouseDevice: return PointerType::Mouse; break;
|
||||||
|
case she::Event::MultitouchDevice: return PointerType::Multitouch; break;
|
||||||
|
case she::Event::StylusDevice: return PointerType::Pen; break;
|
||||||
|
case she::Event::EraserDevice: return PointerType::Eraser; break;
|
||||||
|
default:
|
||||||
|
return PointerType::Unknown;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Manager::generateMessagesFromSheEvents()
|
void Manager::generateMessagesFromSheEvents()
|
||||||
{
|
{
|
||||||
she::Event lastMouseMoveEvent;
|
she::Event lastMouseMoveEvent;
|
||||||
@ -346,8 +361,11 @@ void Manager::generateMessagesFromSheEvents()
|
|||||||
|
|
||||||
case she::Event::MouseMove: {
|
case she::Event::MouseMove: {
|
||||||
_internal_set_mouse_position(sheEvent.position());
|
_internal_set_mouse_position(sheEvent.position());
|
||||||
handleMouseMove(sheEvent.position(), m_mouseButtons,
|
handleMouseMove(
|
||||||
sheEvent.modifiers());
|
sheEvent.position(),
|
||||||
|
m_mouseButtons,
|
||||||
|
sheEvent.modifiers(),
|
||||||
|
pointer_type_from_she_event(sheEvent));
|
||||||
lastMouseMoveEvent = sheEvent;
|
lastMouseMoveEvent = sheEvent;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -357,8 +375,11 @@ void Manager::generateMessagesFromSheEvents()
|
|||||||
m_mouseButtons = (MouseButtons)((int)m_mouseButtons | (int)pressedButton);
|
m_mouseButtons = (MouseButtons)((int)m_mouseButtons | (int)pressedButton);
|
||||||
_internal_set_mouse_buttons(m_mouseButtons);
|
_internal_set_mouse_buttons(m_mouseButtons);
|
||||||
|
|
||||||
handleMouseDown(sheEvent.position(), pressedButton,
|
handleMouseDown(
|
||||||
sheEvent.modifiers());
|
sheEvent.position(),
|
||||||
|
pressedButton,
|
||||||
|
sheEvent.modifiers(),
|
||||||
|
pointer_type_from_she_event(sheEvent));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -367,21 +388,28 @@ void Manager::generateMessagesFromSheEvents()
|
|||||||
m_mouseButtons = (MouseButtons)((int)m_mouseButtons & ~(int)releasedButton);
|
m_mouseButtons = (MouseButtons)((int)m_mouseButtons & ~(int)releasedButton);
|
||||||
_internal_set_mouse_buttons(m_mouseButtons);
|
_internal_set_mouse_buttons(m_mouseButtons);
|
||||||
|
|
||||||
handleMouseUp(sheEvent.position(), releasedButton,
|
handleMouseUp(
|
||||||
sheEvent.modifiers());
|
sheEvent.position(),
|
||||||
|
releasedButton,
|
||||||
|
sheEvent.modifiers(),
|
||||||
|
pointer_type_from_she_event(sheEvent));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case she::Event::MouseDoubleClick: {
|
case she::Event::MouseDoubleClick: {
|
||||||
MouseButtons clickedButton = mouse_buttons_from_she_to_ui(sheEvent);
|
MouseButtons clickedButton = mouse_buttons_from_she_to_ui(sheEvent);
|
||||||
handleMouseDoubleClick(sheEvent.position(), clickedButton,
|
handleMouseDoubleClick(
|
||||||
sheEvent.modifiers());
|
sheEvent.position(),
|
||||||
|
clickedButton,
|
||||||
|
sheEvent.modifiers(),
|
||||||
|
pointer_type_from_she_event(sheEvent));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case she::Event::MouseWheel: {
|
case she::Event::MouseWheel: {
|
||||||
handleMouseWheel(sheEvent.position(), m_mouseButtons,
|
handleMouseWheel(sheEvent.position(), m_mouseButtons,
|
||||||
sheEvent.modifiers(),
|
sheEvent.modifiers(),
|
||||||
|
pointer_type_from_she_event(sheEvent),
|
||||||
sheEvent.wheelDelta(),
|
sheEvent.wheelDelta(),
|
||||||
sheEvent.preciseWheel());
|
sheEvent.preciseWheel());
|
||||||
break;
|
break;
|
||||||
@ -403,13 +431,15 @@ void Manager::generateMessagesFromSheEvents()
|
|||||||
if (lastMouseMoveEvent.type() != she::Event::None) {
|
if (lastMouseMoveEvent.type() != she::Event::None) {
|
||||||
sheEvent = lastMouseMoveEvent;
|
sheEvent = lastMouseMoveEvent;
|
||||||
generateSetCursorMessage(sheEvent.position(),
|
generateSetCursorMessage(sheEvent.position(),
|
||||||
sheEvent.modifiers());
|
sheEvent.modifiers(),
|
||||||
|
pointer_type_from_she_event(sheEvent));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Manager::handleMouseMove(const gfx::Point& mousePos,
|
void Manager::handleMouseMove(const gfx::Point& mousePos,
|
||||||
MouseButtons mouseButtons,
|
MouseButtons mouseButtons,
|
||||||
KeyModifiers modifiers)
|
KeyModifiers modifiers,
|
||||||
|
PointerType pointerType)
|
||||||
{
|
{
|
||||||
// Get the list of widgets to send mouse messages.
|
// Get the list of widgets to send mouse messages.
|
||||||
mouse_widgets_list.clear();
|
mouse_widgets_list.clear();
|
||||||
@ -436,12 +466,16 @@ void Manager::handleMouseMove(const gfx::Point& mousePos,
|
|||||||
enqueueMessage(
|
enqueueMessage(
|
||||||
newMouseMessage(
|
newMouseMessage(
|
||||||
kMouseMoveMessage, dst,
|
kMouseMoveMessage, dst,
|
||||||
mousePos, mouseButtons, modifiers));
|
mousePos,
|
||||||
|
pointerType,
|
||||||
|
mouseButtons,
|
||||||
|
modifiers));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Manager::handleMouseDown(const gfx::Point& mousePos,
|
void Manager::handleMouseDown(const gfx::Point& mousePos,
|
||||||
MouseButtons mouseButtons,
|
MouseButtons mouseButtons,
|
||||||
KeyModifiers modifiers)
|
KeyModifiers modifiers,
|
||||||
|
PointerType pointerType)
|
||||||
{
|
{
|
||||||
handleWindowZOrder();
|
handleWindowZOrder();
|
||||||
|
|
||||||
@ -449,41 +483,53 @@ void Manager::handleMouseDown(const gfx::Point& mousePos,
|
|||||||
newMouseMessage(
|
newMouseMessage(
|
||||||
kMouseDownMessage,
|
kMouseDownMessage,
|
||||||
(capture_widget ? capture_widget: mouse_widget),
|
(capture_widget ? capture_widget: mouse_widget),
|
||||||
mousePos, mouseButtons, modifiers));
|
mousePos,
|
||||||
|
pointerType,
|
||||||
|
mouseButtons,
|
||||||
|
modifiers));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Manager::handleMouseUp(const gfx::Point& mousePos,
|
void Manager::handleMouseUp(const gfx::Point& mousePos,
|
||||||
MouseButtons mouseButtons,
|
MouseButtons mouseButtons,
|
||||||
KeyModifiers modifiers)
|
KeyModifiers modifiers,
|
||||||
|
PointerType pointerType)
|
||||||
{
|
{
|
||||||
enqueueMessage(
|
enqueueMessage(
|
||||||
newMouseMessage(
|
newMouseMessage(
|
||||||
kMouseUpMessage,
|
kMouseUpMessage,
|
||||||
(capture_widget ? capture_widget: mouse_widget),
|
(capture_widget ? capture_widget: mouse_widget),
|
||||||
mousePos, mouseButtons, modifiers));
|
mousePos,
|
||||||
|
pointerType,
|
||||||
|
mouseButtons,
|
||||||
|
modifiers));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Manager::handleMouseDoubleClick(const gfx::Point& mousePos,
|
void Manager::handleMouseDoubleClick(const gfx::Point& mousePos,
|
||||||
MouseButtons mouseButtons,
|
MouseButtons mouseButtons,
|
||||||
KeyModifiers modifiers)
|
KeyModifiers modifiers,
|
||||||
|
PointerType pointerType)
|
||||||
{
|
{
|
||||||
Widget* dst = (capture_widget ? capture_widget: mouse_widget);
|
Widget* dst = (capture_widget ? capture_widget: mouse_widget);
|
||||||
if (dst) {
|
if (dst) {
|
||||||
enqueueMessage(
|
enqueueMessage(
|
||||||
newMouseMessage(
|
newMouseMessage(
|
||||||
kDoubleClickMessage,
|
kDoubleClickMessage,
|
||||||
dst, mousePos, mouseButtons, modifiers));
|
dst, mousePos, pointerType,
|
||||||
|
mouseButtons, modifiers));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Manager::handleMouseWheel(const gfx::Point& mousePos,
|
void Manager::handleMouseWheel(const gfx::Point& mousePos,
|
||||||
MouseButtons mouseButtons, KeyModifiers modifiers,
|
MouseButtons mouseButtons,
|
||||||
const gfx::Point& wheelDelta, bool preciseWheel)
|
KeyModifiers modifiers,
|
||||||
|
PointerType pointerType,
|
||||||
|
const gfx::Point& wheelDelta,
|
||||||
|
bool preciseWheel)
|
||||||
{
|
{
|
||||||
enqueueMessage(newMouseMessage(
|
enqueueMessage(newMouseMessage(
|
||||||
kMouseWheelMessage,
|
kMouseWheelMessage,
|
||||||
(capture_widget ? capture_widget: mouse_widget),
|
(capture_widget ? capture_widget: mouse_widget),
|
||||||
mousePos, mouseButtons, modifiers,
|
mousePos, pointerType, mouseButtons, modifiers,
|
||||||
wheelDelta, preciseWheel));
|
wheelDelta, preciseWheel));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -776,7 +822,9 @@ void Manager::setMouse(Widget* widget)
|
|||||||
|
|
||||||
Message* msg = newMouseMessage(
|
Message* msg = newMouseMessage(
|
||||||
kMouseEnterMessage, NULL,
|
kMouseEnterMessage, NULL,
|
||||||
get_mouse_position(), _internal_get_mouse_buttons(),
|
get_mouse_position(),
|
||||||
|
PointerType::Unknown,
|
||||||
|
_internal_get_mouse_buttons(),
|
||||||
kKeyUninitializedModifier);
|
kKeyUninitializedModifier);
|
||||||
|
|
||||||
for (; it != widget_parents.end(); ++it) {
|
for (; it != widget_parents.end(); ++it) {
|
||||||
@ -786,7 +834,8 @@ void Manager::setMouse(Widget* widget)
|
|||||||
|
|
||||||
enqueueMessage(msg);
|
enqueueMessage(msg);
|
||||||
generateSetCursorMessage(get_mouse_position(),
|
generateSetCursorMessage(get_mouse_position(),
|
||||||
kKeyUninitializedModifier);
|
kKeyUninitializedModifier,
|
||||||
|
PointerType::Unknown);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1419,12 +1468,16 @@ Widget* Manager::findMagneticWidget(Widget* widget)
|
|||||||
// static
|
// static
|
||||||
Message* Manager::newMouseMessage(
|
Message* Manager::newMouseMessage(
|
||||||
MessageType type,
|
MessageType type,
|
||||||
Widget* widget, const gfx::Point& mousePos,
|
Widget* widget,
|
||||||
MouseButtons buttons, KeyModifiers modifiers,
|
const gfx::Point& mousePos,
|
||||||
const gfx::Point& wheelDelta, bool preciseWheel)
|
PointerType pointerType,
|
||||||
|
MouseButtons buttons,
|
||||||
|
KeyModifiers modifiers,
|
||||||
|
const gfx::Point& wheelDelta,
|
||||||
|
bool preciseWheel)
|
||||||
{
|
{
|
||||||
Message* msg = new MouseMessage(
|
Message* msg = new MouseMessage(
|
||||||
type, buttons, modifiers, mousePos,
|
type, pointerType, buttons, modifiers, mousePos,
|
||||||
wheelDelta, preciseWheel);
|
wheelDelta, preciseWheel);
|
||||||
|
|
||||||
if (widget != NULL)
|
if (widget != NULL)
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "ui/keys.h"
|
#include "ui/keys.h"
|
||||||
#include "ui/message_type.h"
|
#include "ui/message_type.h"
|
||||||
#include "ui/mouse_buttons.h"
|
#include "ui/mouse_buttons.h"
|
||||||
|
#include "ui/pointer_type.h"
|
||||||
#include "ui/widget.h"
|
#include "ui/widget.h"
|
||||||
|
|
||||||
namespace she {
|
namespace she {
|
||||||
@ -115,14 +116,32 @@ namespace ui {
|
|||||||
virtual void onNewDisplayConfiguration();
|
virtual void onNewDisplayConfiguration();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void generateSetCursorMessage(const gfx::Point& mousePos, KeyModifiers modifiers);
|
void generateSetCursorMessage(const gfx::Point& mousePos,
|
||||||
|
KeyModifiers modifiers,
|
||||||
|
PointerType pointerType);
|
||||||
void generateMessagesFromSheEvents();
|
void generateMessagesFromSheEvents();
|
||||||
void handleMouseMove(const gfx::Point& mousePos, MouseButtons mouseButtons, KeyModifiers modifiers);
|
void handleMouseMove(const gfx::Point& mousePos,
|
||||||
void handleMouseDown(const gfx::Point& mousePos, MouseButtons mouseButtons, KeyModifiers modifiers);
|
MouseButtons mouseButtons,
|
||||||
void handleMouseUp(const gfx::Point& mousePos, MouseButtons mouseButtons, KeyModifiers modifiers);
|
KeyModifiers modifiers,
|
||||||
void handleMouseDoubleClick(const gfx::Point& mousePos, MouseButtons mouseButtons, KeyModifiers modifiers);
|
PointerType pointerType);
|
||||||
void handleMouseWheel(const gfx::Point& mousePos, MouseButtons mouseButtons, KeyModifiers modifiers,
|
void handleMouseDown(const gfx::Point& mousePos,
|
||||||
const gfx::Point& wheelDelta, bool preciseWheel);
|
MouseButtons mouseButtons,
|
||||||
|
KeyModifiers modifiers,
|
||||||
|
PointerType pointerType);
|
||||||
|
void handleMouseUp(const gfx::Point& mousePos,
|
||||||
|
MouseButtons mouseButtons,
|
||||||
|
KeyModifiers modifiers,
|
||||||
|
PointerType pointerType);
|
||||||
|
void handleMouseDoubleClick(const gfx::Point& mousePos,
|
||||||
|
MouseButtons mouseButtons,
|
||||||
|
KeyModifiers modifiers,
|
||||||
|
PointerType pointerType);
|
||||||
|
void handleMouseWheel(const gfx::Point& mousePos,
|
||||||
|
MouseButtons mouseButtons,
|
||||||
|
KeyModifiers modifiers,
|
||||||
|
PointerType pointerType,
|
||||||
|
const gfx::Point& wheelDelta,
|
||||||
|
bool preciseWheel);
|
||||||
void handleTouchMagnify(const gfx::Point& mousePos,
|
void handleTouchMagnify(const gfx::Point& mousePos,
|
||||||
const KeyModifiers modifiers,
|
const KeyModifiers modifiers,
|
||||||
const double magnification);
|
const double magnification);
|
||||||
@ -135,7 +154,9 @@ namespace ui {
|
|||||||
static Message* newMouseMessage(
|
static Message* newMouseMessage(
|
||||||
MessageType type,
|
MessageType type,
|
||||||
Widget* widget, const gfx::Point& mousePos,
|
Widget* widget, const gfx::Point& mousePos,
|
||||||
MouseButtons buttons, KeyModifiers modifiers,
|
PointerType pointerType,
|
||||||
|
MouseButtons buttons,
|
||||||
|
KeyModifiers modifiers,
|
||||||
const gfx::Point& wheelDelta = gfx::Point(0, 0),
|
const gfx::Point& wheelDelta = gfx::Point(0, 0),
|
||||||
bool preciseWheel = false);
|
bool preciseWheel = false);
|
||||||
void broadcastKeyMsg(Message* msg);
|
void broadcastKeyMsg(Message* msg);
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "ui/keys.h"
|
#include "ui/keys.h"
|
||||||
#include "ui/message_type.h"
|
#include "ui/message_type.h"
|
||||||
#include "ui/mouse_buttons.h"
|
#include "ui/mouse_buttons.h"
|
||||||
|
#include "ui/pointer_type.h"
|
||||||
#include "ui/widgets_list.h"
|
#include "ui/widgets_list.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -103,18 +104,21 @@ namespace ui {
|
|||||||
class MouseMessage : public Message {
|
class MouseMessage : public Message {
|
||||||
public:
|
public:
|
||||||
MouseMessage(MessageType type,
|
MouseMessage(MessageType type,
|
||||||
|
PointerType pointerType,
|
||||||
MouseButtons buttons,
|
MouseButtons buttons,
|
||||||
KeyModifiers modifiers,
|
KeyModifiers modifiers,
|
||||||
const gfx::Point& pos,
|
const gfx::Point& pos,
|
||||||
const gfx::Point& wheelDelta = gfx::Point(0, 0),
|
const gfx::Point& wheelDelta = gfx::Point(0, 0),
|
||||||
bool preciseWheel = false)
|
bool preciseWheel = false)
|
||||||
: Message(type, modifiers),
|
: Message(type, modifiers),
|
||||||
|
m_pointerType(pointerType),
|
||||||
m_buttons(buttons),
|
m_buttons(buttons),
|
||||||
m_pos(pos),
|
m_pos(pos),
|
||||||
m_wheelDelta(wheelDelta),
|
m_wheelDelta(wheelDelta),
|
||||||
m_preciseWheel(preciseWheel) {
|
m_preciseWheel(preciseWheel) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PointerType pointerType() const { return m_pointerType; }
|
||||||
MouseButtons buttons() const { return m_buttons; }
|
MouseButtons buttons() const { return m_buttons; }
|
||||||
bool left() const { return (m_buttons & kButtonLeft) == kButtonLeft; }
|
bool left() const { return (m_buttons & kButtonLeft) == kButtonLeft; }
|
||||||
bool right() const { return (m_buttons & kButtonRight) == kButtonRight; }
|
bool right() const { return (m_buttons & kButtonRight) == kButtonRight; }
|
||||||
@ -125,6 +129,7 @@ namespace ui {
|
|||||||
const gfx::Point& position() const { return m_pos; }
|
const gfx::Point& position() const { return m_pos; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
PointerType m_pointerType;
|
||||||
MouseButtons m_buttons; // Pressed buttons
|
MouseButtons m_buttons; // Pressed buttons
|
||||||
gfx::Point m_pos; // Mouse position
|
gfx::Point m_pos; // Mouse position
|
||||||
gfx::Point m_wheelDelta; // Wheel axis variation
|
gfx::Point m_wheelDelta; // Wheel axis variation
|
||||||
|
23
src/ui/pointer_type.h
Normal file
23
src/ui/pointer_type.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// Aseprite UI Library
|
||||||
|
// Copyright (C) 2016 David Capello
|
||||||
|
//
|
||||||
|
// This file is released under the terms of the MIT license.
|
||||||
|
// Read LICENSE.txt for more information.
|
||||||
|
|
||||||
|
#ifndef UI_POINTER_TYPE_H_INCLUDED
|
||||||
|
#define UI_POINTER_TYPE_H_INCLUDED
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
enum class PointerType {
|
||||||
|
Unknown,
|
||||||
|
Mouse,
|
||||||
|
Multitouch,
|
||||||
|
Pen,
|
||||||
|
Eraser
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite UI Library
|
// Aseprite UI Library
|
||||||
// Copyright (C) 2001-2013, 2015 David Capello
|
// Copyright (C) 2001-2016 David Capello
|
||||||
//
|
//
|
||||||
// This file is released under the terms of the MIT license.
|
// This file is released under the terms of the MIT license.
|
||||||
// Read LICENSE.txt for more information.
|
// Read LICENSE.txt for more information.
|
||||||
@ -43,14 +43,15 @@
|
|||||||
#include "ui/overlay_manager.h"
|
#include "ui/overlay_manager.h"
|
||||||
#include "ui/paint_event.h"
|
#include "ui/paint_event.h"
|
||||||
#include "ui/panel.h"
|
#include "ui/panel.h"
|
||||||
|
#include "ui/pointer_type.h"
|
||||||
#include "ui/popup_window.h"
|
#include "ui/popup_window.h"
|
||||||
#include "ui/size_hint_event.h"
|
|
||||||
#include "ui/property.h"
|
#include "ui/property.h"
|
||||||
#include "ui/register_message.h"
|
#include "ui/register_message.h"
|
||||||
#include "ui/resize_event.h"
|
#include "ui/resize_event.h"
|
||||||
#include "ui/save_layout_event.h"
|
#include "ui/save_layout_event.h"
|
||||||
#include "ui/scroll_bar.h"
|
#include "ui/scroll_bar.h"
|
||||||
#include "ui/separator.h"
|
#include "ui/separator.h"
|
||||||
|
#include "ui/size_hint_event.h"
|
||||||
#include "ui/slider.h"
|
#include "ui/slider.h"
|
||||||
#include "ui/splitter.h"
|
#include "ui/splitter.h"
|
||||||
#include "ui/system.h"
|
#include "ui/system.h"
|
||||||
|
@ -1242,6 +1242,7 @@ bool Widget::offerCapture(ui::MouseMessage* mouseMsg, int widget_type)
|
|||||||
|
|
||||||
MouseMessage* mouseMsg2 = new MouseMessage(
|
MouseMessage* mouseMsg2 = new MouseMessage(
|
||||||
kMouseDownMessage,
|
kMouseDownMessage,
|
||||||
|
mouseMsg->pointerType(),
|
||||||
mouseMsg->buttons(),
|
mouseMsg->buttons(),
|
||||||
mouseMsg->modifiers(),
|
mouseMsg->modifiers(),
|
||||||
mouseMsg->position());
|
mouseMsg->position());
|
||||||
@ -1328,6 +1329,7 @@ bool Widget::onProcessMessage(Message* msg)
|
|||||||
if (kMouseDownMessage) {
|
if (kMouseDownMessage) {
|
||||||
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
|
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
|
||||||
MouseMessage mouseMsg2(kMouseDownMessage,
|
MouseMessage mouseMsg2(kMouseDownMessage,
|
||||||
|
mouseMsg->pointerType(),
|
||||||
mouseMsg->buttons(),
|
mouseMsg->buttons(),
|
||||||
mouseMsg->modifiers(),
|
mouseMsg->modifiers(),
|
||||||
mouseMsg->position(),
|
mouseMsg->position(),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user