[gnome-games/wip/exalm/gameapd: 14/14] gamepad-mapper: Animate analog sticks when mapping them
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games/wip/exalm/gameapd: 14/14] gamepad-mapper: Animate analog sticks when mapping them
- Date: Wed, 4 Mar 2020 16:51:40 +0000 (UTC)
commit c52e353380df9b51b42216dc50211258ab336444
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Wed Mar 4 20:14:28 2020 +0500
gamepad-mapper: Animate analog sticks when mapping them
src/ui/gamepad-mapper.vala | 33 ++++++++++++++++++++++++++++++++-
1 file changed, 32 insertions(+), 1 deletion(-)
---
diff --git a/src/ui/gamepad-mapper.vala b/src/ui/gamepad-mapper.vala
index 4b6bd099..d9ccb340 100644
--- a/src/ui/gamepad-mapper.vala
+++ b/src/ui/gamepad-mapper.vala
@@ -2,6 +2,8 @@
[GtkTemplate (ui = "/org/gnome/Games/ui/gamepad-mapper.ui")]
private class Games.GamepadMapper : Gtk.Bin {
+ private const double ANALOG_ANIMATION_SPEED = 166660.0;
+
public signal void finished (string sdl_string);
[GtkChild]
@@ -12,6 +14,9 @@ private class Games.GamepadMapper : Gtk.Bin {
private GamepadInput input;
private uint current_input_index;
+ private uint tick_cb;
+ private uint64 animation_start_time;
+
public string info_message { get; private set; }
private ulong gamepad_event_handler_id;
@@ -124,9 +129,35 @@ private class Games.GamepadMapper : Gtk.Bin {
return;
}
+ if (tick_cb != 0) {
+ remove_tick_callback (tick_cb);
+ tick_cb = 0;
+ }
+
gamepad_view.reset ();
input = mapping_inputs[current_input_index++];
- gamepad_view.highlight (input, true);
+
+ switch (input.type) {
+ case EventCode.EV_KEY:
+ gamepad_view.highlight (input, true);
+
+ break;
+ case EventCode.EV_ABS:
+ animation_start_time = get_frame_clock ().get_frame_time ();
+ tick_cb = add_tick_callback ((widget, clock) => {
+ var time = clock.get_frame_time () - animation_start_time;
+
+ double t = time / ANALOG_ANIMATION_SPEED;
+
+ gamepad_view.set_analog (input, Math.sin (t));
+
+ return Source.CONTINUE;
+ });
+
+ break;
+ default:
+ break;
+ }
update_info_message ();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]