[aseprite] 176/250: Add support to transport key modifiers from she events to UI messages
Tobias Hansen
thansen at moszumanska.debian.org
Sun Dec 20 15:27:28 UTC 2015
This is an automated email from the git hooks/post-receive script.
thansen pushed a commit to branch master
in repository aseprite.
commit bd1a1ffafbcba57875351de9a72c4105d1141fe6
Author: David Capello <davidcapello at gmail.com>
Date: Wed Oct 14 16:42:49 2015 -0300
Add support to transport key modifiers from she events to UI messages
It’s better if we use the original key modifiers from she::Events (given
by Cocoa or Win32 APIs) instead of asking for the current state of
the modifier when the ui::Message is created (which can be different
from the original value).
This commit adds support to transport the modifiers, but it is not
using the original key modifiers yet.
---
src/app/ui/document_view.cpp | 1 +
src/app/ui/editor/drawing_state.cpp | 2 +-
src/app/ui/keyboard_shortcuts.cpp | 2 +-
src/app/ui/select_accelerator.cpp | 2 +-
src/app/ui/toolbar.cpp | 2 +
src/she/event.h | 4 ++
src/she/keys.h | 17 ++++---
src/ui/combobox.cpp | 4 +-
src/ui/entry.cpp | 2 +-
src/ui/int_entry.cpp | 5 +-
src/ui/keys.h | 3 +-
src/ui/manager.cpp | 98 +++++++++++++++++++++++++------------
src/ui/manager.h | 16 +++---
src/ui/menu.cpp | 7 +--
src/ui/message.cpp | 30 ++++++++----
src/ui/message.h | 32 ++++++------
src/ui/widget.cpp | 8 +--
17 files changed, 150 insertions(+), 85 deletions(-)
diff --git a/src/app/ui/document_view.cpp b/src/app/ui/document_view.cpp
index 6d767df..1c7de06 100644
--- a/src/app/ui/document_view.cpp
+++ b/src/app/ui/document_view.cpp
@@ -115,6 +115,7 @@ protected:
MouseMessage mouseMsg(
(msg->type() == kKeyDownMessage ? kMouseDownMessage: kMouseUpMessage),
(lmb->isPressed(msg) ? kButtonLeft: kButtonRight),
+ msg->modifiers(),
ui::get_mouse_position());
sendMessage(&mouseMsg);
diff --git a/src/app/ui/editor/drawing_state.cpp b/src/app/ui/editor/drawing_state.cpp
index 17e839d..a20d922 100644
--- a/src/app/ui/editor/drawing_state.cpp
+++ b/src/app/ui/editor/drawing_state.cpp
@@ -94,7 +94,7 @@ void DrawingState::initToolLoop(Editor* editor, MouseMessage* msg)
pointer = pointer_from_msg(editor, msg);
}
- m_toolLoopManager->prepareLoop(pointer, msg->keyModifiers());
+ m_toolLoopManager->prepareLoop(pointer, msg->modifiers());
m_toolLoopManager->pressButton(pointer);
// This first movement is done when the user pressed Shift+click in
diff --git a/src/app/ui/keyboard_shortcuts.cpp b/src/app/ui/keyboard_shortcuts.cpp
index c0649d1..b4024ec 100644
--- a/src/app/ui/keyboard_shortcuts.cpp
+++ b/src/app/ui/keyboard_shortcuts.cpp
@@ -198,7 +198,7 @@ bool Key::isPressed(Message* msg) const
ASSERT(dynamic_cast<KeyMessage*>(msg) != NULL);
for (const Accelerator& accel : accels()) {
- if (accel.isPressed(msg->keyModifiers(),
+ if (accel.isPressed(msg->modifiers(),
static_cast<KeyMessage*>(msg)->scancode(),
static_cast<KeyMessage*>(msg)->unicodeChar()) &&
(m_keycontext == KeyContext::Any ||
diff --git a/src/app/ui/select_accelerator.cpp b/src/app/ui/select_accelerator.cpp
index eb8e4b4..0f81cea 100644
--- a/src/app/ui/select_accelerator.cpp
+++ b/src/app/ui/select_accelerator.cpp
@@ -42,7 +42,7 @@ protected:
case kKeyDownMessage:
if (hasFocus() && !isReadOnly()) {
KeyMessage* keymsg = static_cast<KeyMessage*>(msg);
- KeyModifiers modifiers = keymsg->keyModifiers();
+ KeyModifiers modifiers = keymsg->modifiers();
if (keymsg->scancode() == kKeySpace)
modifiers = (KeyModifiers)(modifiers & ~kKeySpaceModifier);
diff --git a/src/app/ui/toolbar.cpp b/src/app/ui/toolbar.cpp
index 5440cfb..cb85a37 100644
--- a/src/app/ui/toolbar.cpp
+++ b/src/app/ui/toolbar.cpp
@@ -222,6 +222,7 @@ bool ToolBar::onProcessMessage(Message* msg)
MouseMessage* mouseMsg2 = new MouseMessage(
kMouseDownMessage,
mouseMsg->buttons(),
+ mouseMsg->modifiers(),
mouseMsg->position());
mouseMsg2->addRecipient(strip);
getManager()->enqueueMessage(mouseMsg2);
@@ -640,6 +641,7 @@ bool ToolBar::ToolStrip::onProcessMessage(Message* msg)
MouseMessage* mouseMsg2 = new MouseMessage(
kMouseDownMessage,
mouseMsg->buttons(),
+ mouseMsg->modifiers(),
mouseMsg->position());
mouseMsg2->addRecipient(bar);
getManager()->enqueueMessage(mouseMsg2);
diff --git a/src/she/event.h b/src/she/event.h
index 79d7558..9009cf0 100644
--- a/src/she/event.h
+++ b/src/she/event.h
@@ -49,6 +49,7 @@ namespace she {
Event() : m_type(None),
m_display(nullptr),
m_scancode(kKeyNil),
+ m_modifiers(kKeyUninitializedModifier),
m_unicodeChar(0),
m_repeat(0),
m_preciseWheel(false),
@@ -59,6 +60,7 @@ namespace she {
Display* display() const { return m_display; }
const Files& files() const { return m_files; }
KeyScancode scancode() const { return m_scancode; }
+ KeyModifiers modifiers() const { return m_modifiers; }
int unicodeChar() const { return m_unicodeChar; }
int repeat() const { return m_repeat; }
gfx::Point position() const { return m_position; }
@@ -71,6 +73,7 @@ namespace she {
void setFiles(const Files& files) { m_files = files; }
void setScancode(KeyScancode scancode) { m_scancode = scancode; }
+ void setModifiers(KeyModifiers modifiers) { m_modifiers = modifiers; }
void setUnicodeChar(int unicodeChar) { m_unicodeChar = unicodeChar; }
void setRepeat(int repeat) { m_repeat = repeat; }
void setPosition(const gfx::Point& pos) { m_position = pos; }
@@ -83,6 +86,7 @@ namespace she {
Display* m_display;
Files m_files;
KeyScancode m_scancode;
+ KeyModifiers m_modifiers;
int m_unicodeChar;
int m_repeat; // repeat=0 means the first time the key is pressed
gfx::Point m_position;
diff --git a/src/she/keys.h b/src/she/keys.h
index 170d6a2..6724d4d 100644
--- a/src/she/keys.h
+++ b/src/she/keys.h
@@ -1,5 +1,5 @@
// SHE library
-// Copyright (C) 2012-2013 David Capello
+// Copyright (C) 2012-2013, 2015 David Capello
//
// This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information.
@@ -11,12 +11,13 @@
namespace she {
enum KeyModifiers {
- kKeyNoneModifier = 0,
- kKeyShiftModifier = 1,
- kKeyCtrlModifier = 2,
- kKeyAltModifier = 4,
- kKeyCmdModifier = 8,
- kKeySpaceModifier = 16
+ kKeyNoneModifier = 0,
+ kKeyShiftModifier = 1,
+ kKeyCtrlModifier = 2,
+ kKeyAltModifier = 4,
+ kKeyCmdModifier = 8,
+ kKeySpaceModifier = 16,
+ kKeyUninitializedModifier = 32,
};
enum KeyScancode {
@@ -154,6 +155,8 @@ namespace she {
kKeyScancodes = 127
};
+ // Deprecated API, use modifiers in she::Event
+ // TODO mark these functions as deprecated
bool is_key_pressed(KeyScancode scancode);
void clear_keyboard_buffer();
diff --git a/src/ui/combobox.cpp b/src/ui/combobox.cpp
index e07a4a0..064e293 100644
--- a/src/ui/combobox.cpp
+++ b/src/ui/combobox.cpp
@@ -486,7 +486,9 @@ bool ComboBoxEntry::onProcessMessage(Message* msg)
releaseMouse();
MouseMessage mouseMsg2(kMouseDownMessage,
- mouseMsg->buttons(), mouseMsg->position());
+ mouseMsg->buttons(),
+ mouseMsg->modifiers(),
+ mouseMsg->position());
pick->sendMessage(&mouseMsg2);
return true;
}
diff --git a/src/ui/entry.cpp b/src/ui/entry.cpp
index bac0784..5b0af39 100644
--- a/src/ui/entry.cpp
+++ b/src/ui/entry.cpp
@@ -295,7 +295,7 @@ bool Entry::onProcessMessage(Message* msg)
else if (keymsg->unicodeChar() >= 32) {
// Ctrl and Alt must be unpressed to insert a character
// in the text-field.
- if ((msg->keyModifiers() & (kKeyCtrlModifier | kKeyAltModifier)) == 0) {
+ if ((msg->modifiers() & (kKeyCtrlModifier | kKeyAltModifier)) == 0) {
cmd = EntryCmd::InsertChar;
}
}
diff --git a/src/ui/int_entry.cpp b/src/ui/int_entry.cpp
index b7ede23..87bb9bc 100644
--- a/src/ui/int_entry.cpp
+++ b/src/ui/int_entry.cpp
@@ -90,8 +90,9 @@ bool IntEntry::onProcessMessage(Message* msg)
releaseMouse();
MouseMessage mouseMsg2(kMouseDownMessage,
- mouseMsg->buttons(),
- mouseMsg->position());
+ mouseMsg->buttons(),
+ mouseMsg->modifiers(),
+ mouseMsg->position());
m_slider.sendMessage(&mouseMsg2);
}
}
diff --git a/src/ui/keys.h b/src/ui/keys.h
index b3113c3..1f4f2b2 100644
--- a/src/ui/keys.h
+++ b/src/ui/keys.h
@@ -1,5 +1,5 @@
// Aseprite UI Library
-// Copyright (C) 2001-2014 David Capello
+// Copyright (C) 2001-2015 David Capello
//
// This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information.
@@ -21,6 +21,7 @@ namespace ui {
using she::kKeyAltModifier;
using she::kKeyCmdModifier;
using she::kKeySpaceModifier;
+ using she::kKeyUninitializedModifier;
using she::kKeyNil;
using she::kKeyA;
diff --git a/src/ui/manager.cpp b/src/ui/manager.cpp
index f4d2bd3..8f0d3e1 100644
--- a/src/ui/manager.cpp
+++ b/src/ui/manager.cpp
@@ -248,12 +248,16 @@ bool Manager::generateMessages()
return false;
}
-void Manager::generateSetCursorMessage(const gfx::Point& mousePos)
+void Manager::generateSetCursorMessage(const gfx::Point& mousePos,
+ KeyModifiers modifiers)
{
Widget* dst = (capture_widget ? capture_widget: mouse_widget);
if (dst)
- enqueueMessage(newMouseMessage(kSetCursorMessage, dst,
- mousePos, _internal_get_mouse_buttons()));
+ enqueueMessage(
+ newMouseMessage(
+ kSetCursorMessage, dst,
+ mousePos, _internal_get_mouse_buttons(),
+ modifiers));
else
set_mouse_cursor(kArrowCursor);
}
@@ -308,10 +312,11 @@ void Manager::generateMessagesFromSheEvents()
case she::Event::KeyDown:
case she::Event::KeyUp: {
Message* msg = new KeyMessage(
- sheEvent.type() == she::Event::KeyDown ?
- kKeyDownMessage:
- kKeyUpMessage,
+ (sheEvent.type() == she::Event::KeyDown ?
+ kKeyDownMessage:
+ kKeyUpMessage),
sheEvent.scancode(),
+ sheEvent.modifiers(),
sheEvent.unicodeChar(),
sheEvent.repeat());
broadcastKeyMsg(msg);
@@ -347,7 +352,8 @@ void Manager::generateMessagesFromSheEvents()
m_mouseButtons = (MouseButtons)((int)m_mouseButtons | (int)pressedButton);
_internal_set_mouse_buttons(m_mouseButtons);
- handleMouseDown(sheEvent.position(), pressedButton);
+ handleMouseDown(sheEvent.position(), pressedButton,
+ sheEvent.modifiers());
break;
}
@@ -356,19 +362,23 @@ void Manager::generateMessagesFromSheEvents()
m_mouseButtons = (MouseButtons)((int)m_mouseButtons & ~(int)releasedButton);
_internal_set_mouse_buttons(m_mouseButtons);
- handleMouseUp(sheEvent.position(), releasedButton);
+ handleMouseUp(sheEvent.position(), releasedButton,
+ sheEvent.modifiers());
break;
}
case she::Event::MouseDoubleClick: {
MouseButtons clickedButton = mouse_buttons_from_she_to_ui(sheEvent);
- handleMouseDoubleClick(sheEvent.position(), clickedButton);
+ handleMouseDoubleClick(sheEvent.position(), clickedButton,
+ sheEvent.modifiers());
break;
}
case she::Event::MouseWheel: {
handleMouseWheel(sheEvent.position(), m_mouseButtons,
- sheEvent.wheelDelta(), sheEvent.preciseWheel());
+ sheEvent.modifiers(),
+ sheEvent.wheelDelta(),
+ sheEvent.preciseWheel());
break;
}
}
@@ -377,11 +387,14 @@ void Manager::generateMessagesFromSheEvents()
if (lastMouseMoveEvent.type() != she::Event::None) {
_internal_set_mouse_position(lastMouseMoveEvent.position());
- handleMouseMove(lastMouseMoveEvent.position(), m_mouseButtons);
+ handleMouseMove(lastMouseMoveEvent.position(), m_mouseButtons,
+ lastMouseMoveEvent.modifiers());
}
}
-void Manager::handleMouseMove(const gfx::Point& mousePos, MouseButtons mouseButtons)
+void Manager::handleMouseMove(const gfx::Point& mousePos,
+ MouseButtons mouseButtons,
+ KeyModifiers modifiers)
{
// Get the list of widgets to send mouse messages.
mouse_widgets_list.clear();
@@ -405,43 +418,60 @@ void Manager::handleMouseMove(const gfx::Point& mousePos, MouseButtons mouseButt
// Send the mouse movement message
Widget* dst = (capture_widget ? capture_widget: mouse_widget);
- enqueueMessage(newMouseMessage(kMouseMoveMessage, dst, mousePos, mouseButtons));
+ enqueueMessage(
+ newMouseMessage(
+ kMouseMoveMessage, dst,
+ mousePos, mouseButtons, modifiers));
- generateSetCursorMessage(mousePos);
+ generateSetCursorMessage(mousePos, modifiers);
}
-void Manager::handleMouseDown(const gfx::Point& mousePos, MouseButtons mouseButtons)
+void Manager::handleMouseDown(const gfx::Point& mousePos,
+ MouseButtons mouseButtons,
+ KeyModifiers modifiers)
{
handleWindowZOrder();
- enqueueMessage(newMouseMessage(kMouseDownMessage,
+ enqueueMessage(
+ newMouseMessage(
+ kMouseDownMessage,
(capture_widget ? capture_widget: mouse_widget),
- mousePos, mouseButtons));
+ mousePos, mouseButtons, modifiers));
}
-void Manager::handleMouseUp(const gfx::Point& mousePos, MouseButtons mouseButtons)
+void Manager::handleMouseUp(const gfx::Point& mousePos,
+ MouseButtons mouseButtons,
+ KeyModifiers modifiers)
{
- enqueueMessage(newMouseMessage(kMouseUpMessage,
+ enqueueMessage(
+ newMouseMessage(
+ kMouseUpMessage,
(capture_widget ? capture_widget: mouse_widget),
- mousePos, mouseButtons));
+ mousePos, mouseButtons, modifiers));
}
-void Manager::handleMouseDoubleClick(const gfx::Point& mousePos, MouseButtons mouseButtons)
+void Manager::handleMouseDoubleClick(const gfx::Point& mousePos,
+ MouseButtons mouseButtons,
+ KeyModifiers modifiers)
{
Widget* dst = (capture_widget ? capture_widget: mouse_widget);
if (dst) {
- enqueueMessage(newMouseMessage(kDoubleClickMessage,
- dst, mousePos, mouseButtons));
+ enqueueMessage(
+ newMouseMessage(
+ kDoubleClickMessage,
+ dst, mousePos, mouseButtons, modifiers));
}
}
-void Manager::handleMouseWheel(const gfx::Point& mousePos, MouseButtons mouseButtons,
+void Manager::handleMouseWheel(const gfx::Point& mousePos,
+ MouseButtons mouseButtons, KeyModifiers modifiers,
const gfx::Point& wheelDelta, bool preciseWheel)
{
enqueueMessage(newMouseMessage(
kMouseWheelMessage,
(capture_widget ? capture_widget: mouse_widget),
- mousePos, mouseButtons, wheelDelta, preciseWheel));
+ mousePos, mouseButtons, modifiers,
+ wheelDelta, preciseWheel));
}
// Handles Z order: Send the window to top (only when you click in a
@@ -713,8 +743,10 @@ void Manager::setMouse(Widget* widget)
else
it = widget_parents.begin();
- Message* msg = newMouseMessage(kMouseEnterMessage, NULL,
- get_mouse_position(), _internal_get_mouse_buttons());
+ Message* msg = newMouseMessage(
+ kMouseEnterMessage, NULL,
+ get_mouse_position(), _internal_get_mouse_buttons(),
+ kKeyUninitializedModifier);
for (; it != widget_parents.end(); ++it) {
(*it)->enableFlags(HAS_MOUSE);
@@ -722,7 +754,8 @@ void Manager::setMouse(Widget* widget)
}
enqueueMessage(msg);
- generateSetCursorMessage(get_mouse_position());
+ generateSetCursorMessage(get_mouse_position(),
+ kKeyUninitializedModifier);
}
}
}
@@ -1341,11 +1374,12 @@ Widget* Manager::findMagneticWidget(Widget* widget)
Message* Manager::newMouseMessage(
MessageType type,
Widget* widget, const gfx::Point& mousePos,
- MouseButtons buttons,
+ MouseButtons buttons, KeyModifiers modifiers,
const gfx::Point& wheelDelta, bool preciseWheel)
{
- Message* msg = new MouseMessage(type, buttons, mousePos,
- wheelDelta, preciseWheel);
+ Message* msg = new MouseMessage(
+ type, buttons, modifiers, mousePos,
+ wheelDelta, preciseWheel);
if (widget != NULL)
msg->addRecipient(widget);
@@ -1419,7 +1453,7 @@ static bool move_focus(Manager* manager, Message* msg)
case kKeyTab:
// Reverse tab
- if ((msg->keyModifiers() & (kKeyShiftModifier | kKeyCtrlModifier | kKeyAltModifier)) != 0) {
+ if ((msg->modifiers() & (kKeyShiftModifier | kKeyCtrlModifier | kKeyAltModifier)) != 0) {
focus = list[count-1];
}
// Normal tab
diff --git a/src/ui/manager.h b/src/ui/manager.h
index 8c7eb08..ea25bb8 100644
--- a/src/ui/manager.h
+++ b/src/ui/manager.h
@@ -9,6 +9,7 @@
#pragma once
#include "gfx/region.h"
+#include "ui/keys.h"
#include "ui/message_type.h"
#include "ui/mouse_buttons.h"
#include "ui/widget.h"
@@ -100,13 +101,13 @@ namespace ui {
virtual void onNewDisplayConfiguration();
private:
- void generateSetCursorMessage(const gfx::Point& mousePos);
+ void generateSetCursorMessage(const gfx::Point& mousePos, KeyModifiers modifiers);
void generateMessagesFromSheEvents();
- void handleMouseMove(const gfx::Point& mousePos, MouseButtons mouseButtons);
- void handleMouseDown(const gfx::Point& mousePos, MouseButtons mouseButtons);
- void handleMouseUp(const gfx::Point& mousePos, MouseButtons mouseButtons);
- void handleMouseDoubleClick(const gfx::Point& mousePos, MouseButtons mouseButtons);
- void handleMouseWheel(const gfx::Point& mousePos, MouseButtons mouseButtons,
+ void handleMouseMove(const gfx::Point& mousePos, MouseButtons mouseButtons, KeyModifiers modifiers);
+ void handleMouseDown(const gfx::Point& mousePos, MouseButtons mouseButtons, KeyModifiers modifiers);
+ void handleMouseUp(const gfx::Point& mousePos, MouseButtons mouseButtons, KeyModifiers modifiers);
+ void handleMouseDoubleClick(const gfx::Point& mousePos, MouseButtons mouseButtons, KeyModifiers modifiers);
+ void handleMouseWheel(const gfx::Point& mousePos, MouseButtons mouseButtons, KeyModifiers modifiers,
const gfx::Point& wheelDelta, bool preciseWheel);
void handleWindowZOrder();
@@ -117,7 +118,8 @@ namespace ui {
static Message* newMouseMessage(
MessageType type,
Widget* widget, const gfx::Point& mousePos,
- MouseButtons buttons, const gfx::Point& wheelDelta = gfx::Point(0, 0),
+ MouseButtons buttons, KeyModifiers modifiers,
+ const gfx::Point& wheelDelta = gfx::Point(0, 0),
bool preciseWheel = false);
void broadcastKeyMsg(Message* msg);
diff --git a/src/ui/menu.cpp b/src/ui/menu.cpp
index 1b4c06d..d98359e 100644
--- a/src/ui/menu.cpp
+++ b/src/ui/menu.cpp
@@ -482,9 +482,10 @@ bool MenuBox::onProcessMessage(Message* msg)
get_base(this)->was_clicked = false;
// Check for ALT+some underlined letter
- if (((this->type() == kMenuBoxWidget) && (msg->keyModifiers() == kKeyNoneModifier || // <-- Inside menu-boxes we can use letters without Alt modifier pressed
- msg->keyModifiers() == kKeyAltModifier)) ||
- ((this->type() == kMenuBarWidget) && (msg->keyModifiers() == kKeyAltModifier))) {
+ if (((this->type() == kMenuBoxWidget) && (msg->modifiers() == kKeyNoneModifier || // <-- Inside menu-boxes we can use letters without Alt modifier pressed
+ msg->modifiers() == kKeyAltModifier)) ||
+ ((this->type() == kMenuBarWidget) && (msg->modifiers() == kKeyAltModifier))) {
+ // TODO use scancode instead of unicodeChar
selected = check_for_letter(menu,
static_cast<KeyMessage*>(msg)->unicodeChar());
diff --git a/src/ui/message.cpp b/src/ui/message.cpp
index aec39fb..541f872 100644
--- a/src/ui/message.cpp
+++ b/src/ui/message.cpp
@@ -1,5 +1,5 @@
// Aseprite UI Library
-// Copyright (C) 2001-2013 David Capello
+// Copyright (C) 2001-2013, 2015 David Capello
//
// This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information.
@@ -18,16 +18,23 @@
namespace ui {
-Message::Message(MessageType type)
+Message::Message(MessageType type, KeyModifiers modifiers)
: m_type(type)
, m_used(false)
- , m_modifiers((KeyModifiers)
- ((she::is_key_pressed(kKeyLShift) || she::is_key_pressed(kKeyRShift) ? kKeyShiftModifier: 0) |
- (she::is_key_pressed(kKeyLControl) || she::is_key_pressed(kKeyRControl) ? kKeyCtrlModifier: 0) |
- (she::is_key_pressed(kKeyAlt) ? kKeyAltModifier: 0) |
- (she::is_key_pressed(kKeyCommand) ? kKeyCmdModifier: 0) |
- (she::is_key_pressed(kKeySpace) ? kKeySpaceModifier: 0)))
{
+ if (modifiers == kKeyUninitializedModifier) {
+ // Get modifiers from the deprecated API
+ // TODO remove this
+ m_modifiers = (KeyModifiers)
+ ((she::is_key_pressed(kKeyLShift) || she::is_key_pressed(kKeyRShift) ? kKeyShiftModifier: 0) |
+ (she::is_key_pressed(kKeyLControl) || she::is_key_pressed(kKeyRControl) ? kKeyCtrlModifier: 0) |
+ (she::is_key_pressed(kKeyAlt) ? kKeyAltModifier: 0) |
+ (she::is_key_pressed(kKeyCommand) ? kKeyCmdModifier: 0) |
+ (she::is_key_pressed(kKeySpace) ? kKeySpaceModifier: 0));
+ }
+ else {
+ m_modifiers = modifiers;
+ }
}
Message::~Message()
@@ -68,8 +75,11 @@ void Message::broadcastToChildren(Widget* widget)
addRecipient(widget);
}
-KeyMessage::KeyMessage(MessageType type, KeyScancode scancode, int unicodeChar, int repeat)
- : Message(type)
+KeyMessage::KeyMessage(MessageType type,
+ KeyScancode scancode,
+ KeyModifiers modifiers,
+ int unicodeChar, int repeat)
+ : Message(type, modifiers)
, m_scancode(scancode)
, m_unicodeChar(unicodeChar)
, m_repeat(repeat)
diff --git a/src/ui/message.h b/src/ui/message.h
index df2dc29..db27fa5 100644
--- a/src/ui/message.h
+++ b/src/ui/message.h
@@ -28,7 +28,8 @@ namespace ui {
public:
typedef WidgetsList::iterator& recipients_iterator;
- Message(MessageType type);
+ Message(MessageType type,
+ KeyModifiers modifiers = kKeyUninitializedModifier);
virtual ~Message();
MessageType type() const { return m_type; }
@@ -36,7 +37,7 @@ namespace ui {
bool hasRecipients() const { return !m_recipients.empty(); }
bool isUsed() const { return m_used; }
void markAsUsed() { m_used = true; }
- KeyModifiers keyModifiers() const { return m_modifiers; }
+ KeyModifiers modifiers() const { return m_modifiers; }
bool shiftPressed() const { return (m_modifiers & kKeyShiftModifier) == kKeyShiftModifier; }
bool ctrlPressed() const { return (m_modifiers & kKeyCtrlModifier) == kKeyCtrlModifier; }
bool altPressed() const { return (m_modifiers & kKeyAltModifier) == kKeyAltModifier; }
@@ -59,10 +60,13 @@ namespace ui {
KeyModifiers m_modifiers; // Key modifiers pressed when message was created
};
- class KeyMessage : public Message
- {
+ class KeyMessage : public Message {
public:
- KeyMessage(MessageType type, KeyScancode scancode, int unicodeChar, int repeat);
+ KeyMessage(MessageType type,
+ KeyScancode scancode,
+ KeyModifiers modifiers,
+ int unicodeChar,
+ int repeat);
KeyScancode scancode() const { return m_scancode; }
int unicodeChar() const { return m_unicodeChar; }
@@ -80,8 +84,7 @@ namespace ui {
bool m_propagate_to_parent : 1;
};
- class PaintMessage : public Message
- {
+ class PaintMessage : public Message {
public:
PaintMessage(int count, const gfx::Rect& rect)
: Message(kPaintMessage), m_count(count), m_rect(rect) {
@@ -95,14 +98,15 @@ namespace ui {
gfx::Rect m_rect; // Area to draw
};
- class MouseMessage : public Message
- {
+ class MouseMessage : public Message {
public:
- MouseMessage(MessageType type, MouseButtons buttons,
+ MouseMessage(MessageType type,
+ MouseButtons buttons,
+ KeyModifiers modifiers,
const gfx::Point& pos,
const gfx::Point& wheelDelta = gfx::Point(0, 0),
bool preciseWheel = false)
- : Message(type),
+ : Message(type, modifiers),
m_buttons(buttons),
m_pos(pos),
m_wheelDelta(wheelDelta),
@@ -125,8 +129,7 @@ namespace ui {
bool m_preciseWheel;
};
- class TimerMessage : public Message
- {
+ class TimerMessage : public Message {
public:
TimerMessage(int count, Timer* timer)
: Message(kTimerMessage), m_count(count), m_timer(timer) {
@@ -140,8 +143,7 @@ namespace ui {
Timer* m_timer; // Timer handle
};
- class DropFilesMessage : public Message
- {
+ class DropFilesMessage : public Message {
public:
typedef std::vector<std::string> Files;
diff --git a/src/ui/widget.cpp b/src/ui/widget.cpp
index 42d78a8..e294a67 100644
--- a/src/ui/widget.cpp
+++ b/src/ui/widget.cpp
@@ -1256,6 +1256,7 @@ void Widget::offerCapture(ui::MouseMessage* mouseMsg, int widget_type)
MouseMessage* mouseMsg2 = new MouseMessage(
kMouseDownMessage,
mouseMsg->buttons(),
+ mouseMsg->modifiers(),
mouseMsg->position());
mouseMsg2->addRecipient(pick);
getManager()->enqueueMessage(mouseMsg2);
@@ -1338,9 +1339,10 @@ bool Widget::onProcessMessage(Message* msg)
if (kMouseDownMessage) {
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
MouseMessage mouseMsg2(kMouseDownMessage,
- mouseMsg->buttons(),
- mouseMsg->position(),
- mouseMsg->wheelDelta());
+ mouseMsg->buttons(),
+ mouseMsg->modifiers(),
+ mouseMsg->position(),
+ mouseMsg->wheelDelta());
sendMessage(&mouseMsg2);
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/aseprite.git
More information about the Pkg-games-commits
mailing list