[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