[retro-gtk] core: Use Gdk.EventKey instead of Libretro equivalent



commit 1479f1974c3b4d0ab1dd487779187e15ccf0bde1
Author: Adrien Plazas <kekun plazas laposte net>
Date:   Thu Jul 20 17:31:36 2017 +0200

    core: Use Gdk.EventKey instead of Libretro equivalent
    
    This helps to make the conversion from the GDK keyboard events to the
    Libretro equivalent hidden inside the library without the need to expose
    the Libretro symbols on the public API.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=777489

 retro-gtk/core.vala                       |    4 +-
 retro-gtk/input/input-device-manager.vala |    4 +--
 retro-gtk/input/input.vala                |   10 +--------
 retro-gtk/input/keyboard-state.vala       |    2 +-
 retro-gtk/input/keyboard.vala             |   25 ++++++----------------
 retro-gtk/retro-core.c                    |   32 ++++++++++++++++++++--------
 6 files changed, 35 insertions(+), 42 deletions(-)
---
diff --git a/retro-gtk/core.vala b/retro-gtk/core.vala
index 0183ba1..27fa302 100644
--- a/retro-gtk/core.vala
+++ b/retro-gtk/core.vala
@@ -133,7 +133,7 @@ public class Core : Object {
 
                        input_interface.controller_connected.connect (on_input_controller_connected);
                        input_interface.controller_disconnected.connect (on_input_controller_disconnected);
-                       input_interface.key_event.connect (on_input_key_event);
+                       input_interface.key_event.connect (on_key_event);
 
                        if (is_initiated)
                                init_input ();
@@ -250,7 +250,7 @@ public class Core : Object {
        private extern void init_input ();
        private extern void on_input_controller_connected (uint port, InputDevice device);
        private extern void on_input_controller_disconnected (uint port);
-       private extern void on_input_key_event (bool down, KeyboardKey keycode, uint32 character, 
KeyboardModifierKey key_modifiers);
+       private extern bool on_key_event (Gdk.EventKey event);
 
        private extern void set_system_av_info (SystemAvInfo system_av_info);
 }
diff --git a/retro-gtk/input/input-device-manager.vala b/retro-gtk/input/input-device-manager.vala
index 0abf83c..653cc72 100644
--- a/retro-gtk/input/input-device-manager.vala
+++ b/retro-gtk/input/input-device-manager.vala
@@ -49,9 +49,7 @@ public class InputDeviceManager : Object, Input {
        public void set_keyboard (Keyboard keyboard) {
                this.keyboard = keyboard;
 
-               keyboard.key_event.connect ((p, k, c, m) => {
-                       key_event (p, k, c, m);
-               });
+               keyboard.key_event.connect ((k, e) => key_event (e));
        }
 
        public void remove_controller_device (uint port) {
diff --git a/retro-gtk/input/input.vala b/retro-gtk/input/input.vala
index 22217b2..110abb7 100644
--- a/retro-gtk/input/input.vala
+++ b/retro-gtk/input/input.vala
@@ -11,15 +11,7 @@ public interface Input : Object {
        public signal void controller_connected (uint port, InputDevice device);
        public signal void controller_disconnected (uint port);
 
-       /**
-        * Warns of keyboard events.
-        *
-        * @param down whether the key has been pressed or released
-        * @param keycode the core of the key
-        * @param character the character of the key
-        * @param key_modifiers the modifier key which are held
-        */
-       public signal void key_event (bool down, KeyboardKey keycode, uint32 character, KeyboardModifierKey 
key_modifiers);
+       public signal bool key_event (Gdk.EventKey event);
 
        /**
         * Asks the frontend to poll inputs.
diff --git a/retro-gtk/input/keyboard-state.vala b/retro-gtk/input/keyboard-state.vala
index bea8fa9..45f1952 100644
--- a/retro-gtk/input/keyboard-state.vala
+++ b/retro-gtk/input/keyboard-state.vala
@@ -1,6 +1,6 @@
 // This file is part of retro-gtk. License: GPL-3.0+.
 
-public class Retro.KeyboardState : Object {
+private class Retro.KeyboardState : Object {
        public Gtk.Widget widget { get; construct; }
 
        private HashTable<uint?, bool?> key_state;
diff --git a/retro-gtk/input/keyboard.vala b/retro-gtk/input/keyboard.vala
index df6f65f..7e04bb8 100644
--- a/retro-gtk/input/keyboard.vala
+++ b/retro-gtk/input/keyboard.vala
@@ -3,7 +3,7 @@
 /**
  * Key types to feed to a {@link Core} via {@link Input.key_event}.
  */
-public enum Retro.KeyboardKey {
+private enum Retro.KeyboardKey {
        UNKNOWN        = 0,
        FIRST          = 0,
        BACKSPACE      = 8,
@@ -154,7 +154,7 @@ public enum Retro.KeyboardKey {
  * Modifier key types to feed to a {@link Core} via {@link Input.key_event}.
  */
 [Flags]
-public enum Retro.KeyboardModifierKey {
+private enum Retro.KeyboardModifierKey {
        NONE       = 0x0000,
 
        SHIFT      = 0x01,
@@ -170,18 +170,18 @@ public enum Retro.KeyboardModifierKey {
 public class Retro.Keyboard : Object {
        public Gtk.Widget widget { get; construct; }
 
-       public signal void key_event (bool down, KeyboardKey keycode, uint32 character, KeyboardModifierKey 
key_modifiers);
+       public signal bool key_event (Gdk.EventKey event);
 
        public Keyboard (Gtk.Widget widget) {
                Object (widget: widget);
        }
 
        construct {
-               widget.key_press_event.connect ((w, e) => on_key_event (e, true));
-               widget.key_release_event.connect ((w, e) => on_key_event (e, false));
+               widget.key_press_event.connect ((w, e) => key_event (e));
+               widget.key_release_event.connect ((w, e) => key_event (e));
        }
 
-       private KeyboardModifierKey modifier_key_converter (uint keyval, Gdk.ModifierType modifiers) {
+       internal static KeyboardModifierKey modifier_key_converter (uint keyval, Gdk.ModifierType modifiers) {
                var retro_modifiers = KeyboardModifierKey.NONE;
                if ((bool) (modifiers & Gdk.ModifierType.SHIFT_MASK))
                        retro_modifiers |= KeyboardModifierKey.SHIFT;
@@ -200,7 +200,7 @@ public class Retro.Keyboard : Object {
                return retro_modifiers;
        }
 
-       private KeyboardKey key_converter (uint keyval) {
+       internal static KeyboardKey key_converter (uint keyval) {
                // Common keys (0x0020 to 0x00fe)
                if (keyval < 0x80) {
                        var key = (0x7f & keyval);
@@ -318,15 +318,4 @@ public class Retro.Keyboard : Object {
                                return KeyboardKey.UNKNOWN;
                }
        }
-
-       private bool on_key_event (Gdk.EventKey event, bool pressed) {
-               key_event (
-                       pressed,
-                       key_converter (event.keyval),
-                       event.str.to_utf8 ()[0],
-                       modifier_key_converter (event.keyval, event.state)
-               );
-
-               return false;
-       }
 }
diff --git a/retro-gtk/retro-core.c b/retro-gtk/retro-core.c
index 0776446..2e109ff 100644
--- a/retro-gtk/retro-core.c
+++ b/retro-gtk/retro-core.c
@@ -160,21 +160,35 @@ retro_core_send_input_key_event (RetroCore                *self,
 }
 
 // FIXME Make static as soon as possible.
-void
-retro_core_on_input_key_event (RetroCore                *self,
-                               gboolean                  down,
-                               RetroKeyboardKey          keycode,
-                               guint32                   character,
-                               RetroKeyboardModifierKey  key_modifiers)
+gboolean
+retro_core_on_key_event (RetroCore   *self,
+                         GdkEventKey *event)
 {
-  g_return_if_fail (self != NULL);
+  gboolean pressed;
+  RetroKeyboardKey retro_key;
+  RetroKeyboardModifierKey retro_modifier_key;
+  guint32 character;
+
+  g_return_val_if_fail (self != NULL, FALSE);
+  g_return_val_if_fail (event != NULL, FALSE);
 
   if (!retro_core_get_is_initiated (self))
-    return;
+    return FALSE;
+
+  pressed = event->type == GDK_KEY_PRESS;
+  retro_key = retro_keyboard_key_converter (event->keyval);
+  retro_modifier_key = retro_keyboard_modifier_key_converter (event->keyval, event->state);
+  character = gdk_keyval_to_unicode (event->keyval);
 
   retro_core_push_cb_data (self);
-  retro_core_send_input_key_event (self, down, keycode, character, key_modifiers);
+  retro_core_send_input_key_event (self,
+                                   pressed,
+                                   retro_key,
+                                   character,
+                                   retro_modifier_key);
   retro_core_pop_cb_data ();
+
+  return FALSE;
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]