[aseprite] 161/250: Add she::is_key_pressed() impl on Skia/OSX port
Tobias Hansen
thansen at moszumanska.debian.org
Sun Dec 20 15:27:24 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 b8f5a0236c211277fd15fd49e3b5160da91f966e
Author: David Capello <davidcapello at gmail.com>
Date: Tue Oct 13 17:12:51 2015 -0300
Add she::is_key_pressed() impl on Skia/OSX port
---
src/she/CMakeLists.txt | 1 +
src/she/osx/event_queue.mm | 23 ++++++
src/she/osx/view.mm | 174 ++++++++-------------------------------------
src/she/osx/vk.mm | 161 +++++++++++++++++++++++++++++++++++++++++
src/she/osx/window.h | 5 ++
src/she/skia/she.cpp | 7 --
6 files changed, 220 insertions(+), 151 deletions(-)
diff --git a/src/she/CMakeLists.txt b/src/she/CMakeLists.txt
index c02f32a..50e8648 100644
--- a/src/she/CMakeLists.txt
+++ b/src/she/CMakeLists.txt
@@ -148,6 +148,7 @@ if(USE_SKIA_BACKEND)
osx/app_delegate.mm
osx/event_queue.mm
osx/view.mm
+ osx/vk.mm
osx/window.mm
skia/skia_window_osx.mm)
endif()
diff --git a/src/she/osx/event_queue.mm b/src/she/osx/event_queue.mm
index 94c177d..2805d2c 100644
--- a/src/she/osx/event_queue.mm
+++ b/src/she/osx/event_queue.mm
@@ -16,8 +16,31 @@ namespace she {
static NSWindow* g_window = nil;
+#ifndef _WIN32
+static bool pressedkeys[kKeyScancodes];
+bool is_key_pressed(KeyScancode scancode)
+{
+ if (scancode >= 0 && scancode < kKeyScancodes)
+ return pressedkeys[scancode];
+ else
+ return false;
+}
+#endif
+
void OSXEventQueue::getEvent(Event& ev, bool canWait)
{
+#ifndef _WIN32
+ switch (ev.type()) {
+ case Event::KeyDown:
+ case Event::KeyUp: {
+ KeyScancode scancode = ev.scancode();
+ if (scancode >= 0 && scancode < kKeyScancodes)
+ pressedkeys[scancode] = (ev.type() == Event::KeyDown);
+ break;
+ }
+ }
+#endif
+
ev.setType(Event::None);
retry:;
diff --git a/src/she/osx/view.mm b/src/she/osx/view.mm
index 754b6dc..8a0714a 100644
--- a/src/she/osx/view.mm
+++ b/src/she/osx/view.mm
@@ -20,150 +20,6 @@ using namespace she;
namespace {
-KeyScancode cocoavk_to_scancode(UInt16 vk) {
- static KeyScancode keymap[256] = {
- // 0x00
- kKeyA, // 0x00 - kVK_ANSI_A
- kKeyS, // 0x01 - kVK_ANSI_S
- kKeyD, // 0x02 - kVK_ANSI_D
- kKeyF, // 0x03 - kVK_ANSI_F
- kKeyH, // 0x04 - kVK_ANSI_H
- kKeyG, // 0x05 - kVK_ANSI_G
- kKeyZ, // 0x06 - kVK_ANSI_Z
- kKeyX, // 0x07 - kVK_ANSI_X
- kKeyC, // 0x08 - kVK_ANSI_C
- kKeyV, // 0x09 - kVK_ANSI_V
- kKeyNil, // 0x0A - kVK_ISO_Section
- kKeyB, // 0x0B - kVK_ANSI_B
- kKeyQ, // 0x0C - kVK_ANSI_Q
- kKeyW, // 0x0D - kVK_ANSI_W
- kKeyE, // 0x0E - kVK_ANSI_E
- kKeyR, // 0x0F - kVK_ANSI_R
- // 0x10
- kKeyY, // 0x10 - kVK_ANSI_Y
- kKeyT, // 0x11 - kVK_ANSI_T
- kKey1, // 0x12 - kVK_ANSI_1
- kKey2, // 0x13 - kVK_ANSI_2
- kKey3, // 0x14 - kVK_ANSI_3
- kKey4, // 0x15 - kVK_ANSI_4
- kKey6, // 0x16 - kVK_ANSI_6
- kKey5, // 0x17 - kVK_ANSI_5
- kKeyEquals, // 0x18 - kVK_ANSI_Equal
- kKey9, // 0x19 - kVK_ANSI_9
- kKey7, // 0x1A - kVK_ANSI_7
- kKeyMinus, // 0x1B - kVK_ANSI_Minus
- kKey8, // 0x1C - kVK_ANSI_8
- kKey0, // 0x1D - kVK_ANSI_0
- kKeyClosebrace, // 0x1E - kVK_ANSI_RightBracket
- kKeyO, // 0x1F - kVK_ANSI_O
- // 0x20
- kKeyU, // 0x20 - kVK_ANSI_U
- kKeyOpenbrace, // 0x21 - kVK_ANSI_LeftBracket
- kKeyI, // 0x22 - kVK_ANSI_I
- kKeyP, // 0x23 - kVK_ANSI_P
- kKeyEnter, // 0x24 - kVK_Return
- kKeyL, // 0x25 - kVK_ANSI_L
- kKeyJ, // 0x26 - kVK_ANSI_J
- kKeyQuote, // 0x27 - kVK_ANSI_Quote
- kKeyK, // 0x28 - kVK_ANSI_K
- kKeySemicolon, // 0x29 - kVK_ANSI_Semicolon
- kKeyBackslash, // 0x2A - kVK_ANSI_Backslash
- kKeyComma, // 0x2B - kVK_ANSI_Comma
- kKeySlash, // 0x2C - kVK_ANSI_Slash
- kKeyN, // 0x2D - kVK_ANSI_N
- kKeyM, // 0x2E - kVK_ANSI_M
- kKeyStop, // 0x2F - kVK_ANSI_Period
- // 0x30
- kKeyTab, // 0x30 - kVK_Tab
- kKeySpace, // 0x31 - kVK_Space
- kKeyNil, // 0x32 - kVK_ANSI_Grave
- kKeyBackspace, // 0x33 - kVK_Delete
- kKeyNil, // 0x34 - ?
- kKeyEsc, // 0x35 - kVK_Escape
- kKeyNil, // 0x36 - ?
- kKeyCommand, // 0x37 - kVK_Command
- kKeyLShift, // 0x38 - kVK_Shift
- kKeyCapsLock, // 0x39 - kVK_CapsLock
- kKeyAlt, // 0x3A - kVK_Option
- kKeyLControl, // 0x3B - kVK_Control
- kKeyRShift, // 0x3C - kVK_RightShift
- kKeyAltGr, // 0x3D - kVK_RightOption
- kKeyRControl, // 0x3E - kVK_RightControl
- kKeyNil, // 0x3F - kVK_Function
- // 0x40
- kKeyNil, // 0x40 - kVK_F17
- kKeyNil, // 0x41 - kVK_ANSI_KeypadDecimal
- kKeyNil, // 0x42 - ?
- kKeyAsterisk, // 0x43 - kVK_ANSI_KeypadMultiply
- kKeyNil, // 0x44 - ?
- kKeyPlusPad, // 0x45 - kVK_ANSI_KeypadPlus
- kKeyNil, // 0x46 - ?
- kKeyDelPad, // 0x47 - kVK_ANSI_KeypadClear
- kKeyNil, // 0x48 - kVK_VolumeUp
- kKeyNil, // 0x49 - kVK_VolumeDown
- kKeyNil, // 0x4A - kVK_Mute
- kKeySlashPad, // 0x4B - kVK_ANSI_KeypadDivide
- kKeyEnterPad, // 0x4C - kVK_ANSI_KeypadEnter
- kKeyNil, // 0x4D - ?
- kKeyMinusPad, // 0x4E - kVK_ANSI_KeypadMinus
- kKeyNil, // 0x4F - kVK_F18
- // 0x50
- kKeyNil, // 0x50 - kVK_F19
- kKeyEqualsPad, // 0x51 - kVK_ANSI_KeypadEquals
- kKey0Pad, // 0x52 - kVK_ANSI_Keypad0
- kKey1Pad, // 0x53 - kVK_ANSI_Keypad1
- kKey2Pad, // 0x54 - kVK_ANSI_Keypad2
- kKey3Pad, // 0x55 - kVK_ANSI_Keypad3
- kKey4Pad, // 0x56 - kVK_ANSI_Keypad4
- kKey5Pad, // 0x57 - kVK_ANSI_Keypad5
- kKey6Pad, // 0x58 - kVK_ANSI_Keypad6
- kKey7Pad, // 0x59 - kVK_ANSI_Keypad7
- kKeyNil, // 0x5A - kVK_F20
- kKey8Pad, // 0x5B - kVK_ANSI_Keypad8
- kKey9Pad, // 0x5C - kVK_ANSI_Keypad9
- kKeyYen, // 0x5D - kVK_JIS_Yen
- kKeyNil, // 0x5E - kVK_JIS_Underscore
- kKeyNil, // 0x5F - kVK_JIS_KeypadComma
- // 0x60
- kKeyF5, // 0x60 - kVK_F5
- kKeyF6, // 0x61 - kVK_F6
- kKeyF7, // 0x62 - kVK_F7
- kKeyF3, // 0x63 - kVK_F3
- kKeyF8, // 0x64 - kVK_F8
- kKeyF9, // 0x65 - kVK_F9
- kKeyNil, // 0x66 - kVK_JIS_Eisu
- kKeyF11, // 0x67 - kVK_F11
- kKeyKana, // 0x68 - kVK_JIS_Kana
- kKeyNil, // 0x69 - kVK_F13
- kKeyNil, // 0x6A - kVK_F16
- kKeyNil, // 0x6B - kVK_F14
- kKeyNil, // 0x6C - ?
- kKeyF10, // 0x6D - kVK_F10
- kKeyNil, // 0x6E - ?
- kKeyF12, // 0x6F - kVK_F12
- // 0x70
- kKeyNil, // 0x70 - ?
- kKeyNil, // 0x71 - kVK_F15
- kKeyNil, // 0x72 - kVK_Help
- kKeyHome, // 0x73 - kVK_Home
- kKeyPageUp, // 0x74 - kVK_PageUp
- kKeyDel, // 0x75 - kVK_ForwardDelete
- kKeyF4, // 0x76 - kVK_F4
- kKeyEnd, // 0x77 - kVK_End
- kKeyF2, // 0x78 - kVK_F2
- kKeyPageDown, // 0x79 - kVK_PageDown
- kKeyF1, // 0x7A - kVK_F1
- kKeyLeft, // 0x7B - kVK_LeftArrow
- kKeyRight, // 0x7C - kVK_RightArrow
- kKeyDown, // 0x7D - kVK_DownArrow
- kKeyUp, // 0x7E - kVK_UpArrow
- kKeyNil // 0x7F - ?
- };
- if (vk < 0 || vk > 127)
- vk = 0;
- return keymap[vk];
-}
-
inline gfx::Point get_local_mouse_pos(NSView* view, NSEvent* event)
{
NSPoint point = [view convertPoint:[event locationInWindow]
@@ -285,6 +141,36 @@ inline Event::MouseButton get_mouse_buttons(NSEvent* event)
- (void)flagsChanged:(NSEvent*)event
{
[super flagsChanged:event];
+
+ static int lastFlags = 0;
+ static int flags[] = {
+ NSShiftKeyMask,
+ NSControlKeyMask,
+ NSAlternateKeyMask,
+ NSCommandKeyMask
+ };
+ static KeyScancode scancodes[] = {
+ kKeyLShift,
+ kKeyLControl,
+ kKeyAlt,
+ kKeyCommand
+ };
+
+ int newFlags = event.modifierFlags;
+
+ for (int i=0; i<sizeof(flags)/sizeof(flags[0]); ++i) {
+ if ((lastFlags & flags[i]) != (newFlags & flags[i])) {
+ Event ev;
+ ev.setType(
+ ((newFlags & flags[i]) != 0 ? Event::KeyDown:
+ Event::KeyUp));
+ ev.setScancode(scancodes[i]);
+ ev.setRepeat(0);
+ queue_event(ev);
+ }
+ }
+
+ lastFlags = newFlags;
}
- (void)mouseEntered:(NSEvent*)event
diff --git a/src/she/osx/vk.mm b/src/she/osx/vk.mm
new file mode 100644
index 0000000..e0713b4
--- /dev/null
+++ b/src/she/osx/vk.mm
@@ -0,0 +1,161 @@
+// SHE library
+// Copyright (C) 2015 David Capello
+//
+// This file is released under the terms of the MIT license.
+// Read LICENSE.txt for more information.
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "she/keys.h"
+
+#include <Cocoa/Cocoa.h>
+
+namespace she {
+
+KeyScancode cocoavk_to_scancode(UInt16 vk) {
+ static KeyScancode keymap[256] = {
+ // 0x00
+ kKeyA, // 0x00 - kVK_ANSI_A
+ kKeyS, // 0x01 - kVK_ANSI_S
+ kKeyD, // 0x02 - kVK_ANSI_D
+ kKeyF, // 0x03 - kVK_ANSI_F
+ kKeyH, // 0x04 - kVK_ANSI_H
+ kKeyG, // 0x05 - kVK_ANSI_G
+ kKeyZ, // 0x06 - kVK_ANSI_Z
+ kKeyX, // 0x07 - kVK_ANSI_X
+ kKeyC, // 0x08 - kVK_ANSI_C
+ kKeyV, // 0x09 - kVK_ANSI_V
+ kKeyNil, // 0x0A - kVK_ISO_Section
+ kKeyB, // 0x0B - kVK_ANSI_B
+ kKeyQ, // 0x0C - kVK_ANSI_Q
+ kKeyW, // 0x0D - kVK_ANSI_W
+ kKeyE, // 0x0E - kVK_ANSI_E
+ kKeyR, // 0x0F - kVK_ANSI_R
+ // 0x10
+ kKeyY, // 0x10 - kVK_ANSI_Y
+ kKeyT, // 0x11 - kVK_ANSI_T
+ kKey1, // 0x12 - kVK_ANSI_1
+ kKey2, // 0x13 - kVK_ANSI_2
+ kKey3, // 0x14 - kVK_ANSI_3
+ kKey4, // 0x15 - kVK_ANSI_4
+ kKey6, // 0x16 - kVK_ANSI_6
+ kKey5, // 0x17 - kVK_ANSI_5
+ kKeyEquals, // 0x18 - kVK_ANSI_Equal
+ kKey9, // 0x19 - kVK_ANSI_9
+ kKey7, // 0x1A - kVK_ANSI_7
+ kKeyMinus, // 0x1B - kVK_ANSI_Minus
+ kKey8, // 0x1C - kVK_ANSI_8
+ kKey0, // 0x1D - kVK_ANSI_0
+ kKeyClosebrace, // 0x1E - kVK_ANSI_RightBracket
+ kKeyO, // 0x1F - kVK_ANSI_O
+ // 0x20
+ kKeyU, // 0x20 - kVK_ANSI_U
+ kKeyOpenbrace, // 0x21 - kVK_ANSI_LeftBracket
+ kKeyI, // 0x22 - kVK_ANSI_I
+ kKeyP, // 0x23 - kVK_ANSI_P
+ kKeyEnter, // 0x24 - kVK_Return
+ kKeyL, // 0x25 - kVK_ANSI_L
+ kKeyJ, // 0x26 - kVK_ANSI_J
+ kKeyQuote, // 0x27 - kVK_ANSI_Quote
+ kKeyK, // 0x28 - kVK_ANSI_K
+ kKeySemicolon, // 0x29 - kVK_ANSI_Semicolon
+ kKeyBackslash, // 0x2A - kVK_ANSI_Backslash
+ kKeyComma, // 0x2B - kVK_ANSI_Comma
+ kKeySlash, // 0x2C - kVK_ANSI_Slash
+ kKeyN, // 0x2D - kVK_ANSI_N
+ kKeyM, // 0x2E - kVK_ANSI_M
+ kKeyStop, // 0x2F - kVK_ANSI_Period
+ // 0x30
+ kKeyTab, // 0x30 - kVK_Tab
+ kKeySpace, // 0x31 - kVK_Space
+ kKeyNil, // 0x32 - kVK_ANSI_Grave
+ kKeyBackspace, // 0x33 - kVK_Delete
+ kKeyNil, // 0x34 - ?
+ kKeyEsc, // 0x35 - kVK_Escape
+ kKeyNil, // 0x36 - ?
+ kKeyCommand, // 0x37 - kVK_Command
+ kKeyLShift, // 0x38 - kVK_Shift
+ kKeyCapsLock, // 0x39 - kVK_CapsLock
+ kKeyAlt, // 0x3A - kVK_Option
+ kKeyLControl, // 0x3B - kVK_Control
+ kKeyRShift, // 0x3C - kVK_RightShift
+ kKeyAltGr, // 0x3D - kVK_RightOption
+ kKeyRControl, // 0x3E - kVK_RightControl
+ kKeyNil, // 0x3F - kVK_Function
+ // 0x40
+ kKeyNil, // 0x40 - kVK_F17
+ kKeyNil, // 0x41 - kVK_ANSI_KeypadDecimal
+ kKeyNil, // 0x42 - ?
+ kKeyAsterisk, // 0x43 - kVK_ANSI_KeypadMultiply
+ kKeyNil, // 0x44 - ?
+ kKeyPlusPad, // 0x45 - kVK_ANSI_KeypadPlus
+ kKeyNil, // 0x46 - ?
+ kKeyDelPad, // 0x47 - kVK_ANSI_KeypadClear
+ kKeyNil, // 0x48 - kVK_VolumeUp
+ kKeyNil, // 0x49 - kVK_VolumeDown
+ kKeyNil, // 0x4A - kVK_Mute
+ kKeySlashPad, // 0x4B - kVK_ANSI_KeypadDivide
+ kKeyEnterPad, // 0x4C - kVK_ANSI_KeypadEnter
+ kKeyNil, // 0x4D - ?
+ kKeyMinusPad, // 0x4E - kVK_ANSI_KeypadMinus
+ kKeyNil, // 0x4F - kVK_F18
+ // 0x50
+ kKeyNil, // 0x50 - kVK_F19
+ kKeyEqualsPad, // 0x51 - kVK_ANSI_KeypadEquals
+ kKey0Pad, // 0x52 - kVK_ANSI_Keypad0
+ kKey1Pad, // 0x53 - kVK_ANSI_Keypad1
+ kKey2Pad, // 0x54 - kVK_ANSI_Keypad2
+ kKey3Pad, // 0x55 - kVK_ANSI_Keypad3
+ kKey4Pad, // 0x56 - kVK_ANSI_Keypad4
+ kKey5Pad, // 0x57 - kVK_ANSI_Keypad5
+ kKey6Pad, // 0x58 - kVK_ANSI_Keypad6
+ kKey7Pad, // 0x59 - kVK_ANSI_Keypad7
+ kKeyNil, // 0x5A - kVK_F20
+ kKey8Pad, // 0x5B - kVK_ANSI_Keypad8
+ kKey9Pad, // 0x5C - kVK_ANSI_Keypad9
+ kKeyYen, // 0x5D - kVK_JIS_Yen
+ kKeyNil, // 0x5E - kVK_JIS_Underscore
+ kKeyNil, // 0x5F - kVK_JIS_KeypadComma
+ // 0x60
+ kKeyF5, // 0x60 - kVK_F5
+ kKeyF6, // 0x61 - kVK_F6
+ kKeyF7, // 0x62 - kVK_F7
+ kKeyF3, // 0x63 - kVK_F3
+ kKeyF8, // 0x64 - kVK_F8
+ kKeyF9, // 0x65 - kVK_F9
+ kKeyNil, // 0x66 - kVK_JIS_Eisu
+ kKeyF11, // 0x67 - kVK_F11
+ kKeyKana, // 0x68 - kVK_JIS_Kana
+ kKeyNil, // 0x69 - kVK_F13
+ kKeyNil, // 0x6A - kVK_F16
+ kKeyNil, // 0x6B - kVK_F14
+ kKeyNil, // 0x6C - ?
+ kKeyF10, // 0x6D - kVK_F10
+ kKeyNil, // 0x6E - ?
+ kKeyF12, // 0x6F - kVK_F12
+ // 0x70
+ kKeyNil, // 0x70 - ?
+ kKeyNil, // 0x71 - kVK_F15
+ kKeyNil, // 0x72 - kVK_Help
+ kKeyHome, // 0x73 - kVK_Home
+ kKeyPageUp, // 0x74 - kVK_PageUp
+ kKeyDel, // 0x75 - kVK_ForwardDelete
+ kKeyF4, // 0x76 - kVK_F4
+ kKeyEnd, // 0x77 - kVK_End
+ kKeyF2, // 0x78 - kVK_F2
+ kKeyPageDown, // 0x79 - kVK_PageDown
+ kKeyF1, // 0x7A - kVK_F1
+ kKeyLeft, // 0x7B - kVK_LeftArrow
+ kKeyRight, // 0x7C - kVK_RightArrow
+ kKeyDown, // 0x7D - kVK_DownArrow
+ kKeyUp, // 0x7E - kVK_UpArrow
+ kKeyNil // 0x7F - ?
+ };
+ if (vk < 0 || vk > 127)
+ vk = 0;
+ return keymap[vk];
+}
+
+} // namespace shse
diff --git a/src/she/osx/window.h b/src/she/osx/window.h
index 75c8e85..859313f 100644
--- a/src/she/osx/window.h
+++ b/src/she/osx/window.h
@@ -12,6 +12,11 @@
#include "gfx/rect.h"
#include "gfx/size.h"
+#include "she/keys.h"
+
+namespace she {
+ KeyScancode cocoavk_to_scancode(UInt16 vk);
+}
class OSXWindowImpl {
public:
diff --git a/src/she/skia/she.cpp b/src/she/skia/she.cpp
index 1dfe934..e3c4af7 100644
--- a/src/she/skia/she.cpp
+++ b/src/she/skia/she.cpp
@@ -41,13 +41,6 @@ void error_message(const char* msg)
// TODO
}
-#ifndef _WIN32
-bool is_key_pressed(KeyScancode scancode)
-{
- return false; // Do nothing
-}
-#endif
-
void clear_keyboard_buffer()
{
// Do nothing
--
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