[gtk/event-recorder: 2/6] inspector: Add axes to event details in recorder




commit ee7541c032f7afe6361d1a003e4bd8109170678d
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Dec 15 18:05:14 2021 -0500

    inspector: Add axes to event details in recorder
    
    This is useful information if you have devices
    producing such events.

 gtk/inspector/recorder.c | 87 +++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 79 insertions(+), 8 deletions(-)
---
diff --git a/gtk/inspector/recorder.c b/gtk/inspector/recorder.c
index 9a50567c17..f626e8690a 100644
--- a/gtk/inspector/recorder.c
+++ b/gtk/inspector/recorder.c
@@ -1360,12 +1360,51 @@ key_event_string (GdkEvent *event)
   return g_strdup (gdk_keyval_name (keyval));
 }
 
+static const char *
+device_tool_name (GdkDeviceTool *tool)
+{
+  const char *name[] = {
+    "Unknown",
+    "Pen",
+    "Eraser",
+    "Brush",
+    "Pencil",
+    "Airbrush",
+    "Mouse",
+    "Lens"
+  };
+
+  return name[gdk_device_tool_get_tool_type (tool)];
+}
+
+static const char *
+axis_name (GdkAxisUse axis)
+{
+  const char *name[] = {
+    "",
+    "X",
+    "Y",
+    "Delta X",
+    "Delta Y",
+    "Pressure",
+    "X Tilt",
+    "Y Tilt",
+    "Wheel",
+    "Distance",
+    "Rotation",
+    "Slider"
+  };
+
+  return name[axis];
+}
+
 static void
 populate_event_properties (GtkListStore *store,
                            GdkEvent     *event)
 {
   GdkEventType type;
   GdkDevice *device;
+  GdkDeviceTool *tool;
   double x, y;
   char *tmp;
   GdkModifierType state;
@@ -1381,6 +1420,10 @@ populate_event_properties (GtkListStore *store,
   if (device)
     add_text_row (store, "Device", gdk_device_get_name (device));
 
+  tool = gdk_event_get_device_tool (event);
+  if (tool)
+    add_text_row (store, "Device Tool", device_tool_name (tool));
+
   if (gdk_event_get_position (event, &x, &y))
     {
       tmp = g_strdup_printf ("%.2f %.2f", x, y);
@@ -1388,6 +1431,26 @@ populate_event_properties (GtkListStore *store,
       g_free (tmp);
     }
 
+  if (tool)
+    {
+      GdkAxisFlags axes = gdk_device_tool_get_axes (tool);
+
+      /* We report position and scroll delta separately, so skip them here */
+      axes &= ~(GDK_AXIS_FLAG_X|GDK_AXIS_FLAG_Y|GDK_AXIS_FLAG_DELTA_X|GDK_AXIS_FLAG_DELTA_Y);
+
+      for (int i = 1; i < GDK_AXIS_LAST; i++)
+        {
+          if (axes & (1 << i))
+            {
+              double val;
+              gdk_event_get_axis (event, i, &val);
+              tmp = g_strdup_printf ("%.2f", val);
+              add_text_row (store, axis_name (i), tmp);
+              g_free (tmp);
+            }
+        }
+    }
+
   state = gdk_event_get_modifier_state (event);
   if (state != 0)
     {
@@ -1458,18 +1521,26 @@ populate_event_properties (GtkListStore *store,
       history = gdk_event_get_history (event, &n_coords);
       if (history)
         {
-          GString *s;
-
-          s = g_string_new ("");
+          GString *s = g_string_new ("");
 
           for (int i = 0; i < n_coords; i++)
             {
               if (i > 0)
                 g_string_append (s, "\n");
-              if ((history[i].flags & (GDK_AXIS_FLAG_X|GDK_AXIS_FLAG_Y)) == 
(GDK_AXIS_FLAG_X|GDK_AXIS_FLAG_Y))
-                g_string_append_printf (s, "%d: %.2f %.2f", history[i].time, history[i].axes[GDK_AXIS_X], 
history[i].axes[GDK_AXIS_Y]);
-              if ((history[i].flags & (GDK_AXIS_FLAG_DELTA_X|GDK_AXIS_FLAG_DELTA_Y)) == 
(GDK_AXIS_FLAG_DELTA_X|GDK_AXIS_FLAG_DELTA_Y))
-                g_string_append_printf (s, "%d: %.2f %.2f", history[i].time, 
history[i].axes[GDK_AXIS_DELTA_X], history[i].axes[GDK_AXIS_DELTA_Y]);
+
+              g_string_append_printf (s, "%d", history[i].time);
+
+              if (history[i].flags & (GDK_AXIS_FLAG_X|GDK_AXIS_FLAG_Y))
+                g_string_append_printf (s, " Position %.2f %.2f", history[i].axes[GDK_AXIS_X], 
history[i].axes[GDK_AXIS_Y]);
+
+              if (history[i].flags & (GDK_AXIS_FLAG_DELTA_X|GDK_AXIS_FLAG_DELTA_Y))
+                g_string_append_printf (s, " Delta %.2f %.2f", history[i].axes[GDK_AXIS_DELTA_X], 
history[i].axes[GDK_AXIS_DELTA_Y]);
+
+              for (int j = GDK_AXIS_PRESSURE; j < GDK_AXIS_LAST; j++)
+                {
+                  if (history[i].flags & (1 << j))
+                    g_string_append_printf (s, " %s %.2f", axis_name (j), history[i].axes[j]);
+                }
             }
 
           add_text_row (store, "History", s->str);
@@ -2093,4 +2164,4 @@ gtk_inspector_recorder_set_debug_nodes (GtkInspectorRecorder *recorder,
   g_object_notify_by_pspec (G_OBJECT (recorder), props[PROP_DEBUG_NODES]);
 }
 
-// vim: set et sw=2 ts=2:
+


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