summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgnacio Casal Quinteiro <qignacio@amazon.com>2020-06-30 11:02:33 +0200
committerIgnacio Casal Quinteiro <qignacio@amazon.com>2020-06-30 11:02:33 +0200
commitd8d9d8bdf1d5c3567c5ba44a711d68e97c7a44a4 (patch)
treece756102ab7a9059a6ac85d480c6dd031037211f
parent74ff79ef60e97a106259d6516e75087ada541408 (diff)
downloadgtk+-wip/nacho/quartz-stylus.tar.gz
quartz: factor out translate_axes methodwip/nacho/quartz-stylus
-rw-r--r--gdk/quartz/gdkevents-quartz.c64
1 files changed, 45 insertions, 19 deletions
diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
index 0d492c1619..3320185e3e 100644
--- a/gdk/quartz/gdkevents-quartz.c
+++ b/gdk/quartz/gdkevents-quartz.c
@@ -42,7 +42,6 @@
#define GRIP_WIDTH 15
#define GRIP_HEIGHT 15
#define GDK_LION_RESIZE 5
-#define TABLET_AXES 5
#if MAC_OS_X_VERSION_MAX_ALLOWED < 1060
#define NSEventTypeRotate 13
@@ -1011,6 +1010,49 @@ fill_pinch_event (GdkWindow *window,
}
#endif /* OSX Version >= 10.8 */
+static gdouble *
+translate_axes (GdkDevice *device,
+ gdouble x,
+ gdouble y,
+ NSEvent *nsevent)
+{
+ guint n_axes, i;
+ gdouble *axes;
+
+ g_object_get (device, "n-axes", &n_axes, NULL);
+ axes = g_new0 (gdouble, n_axes);
+
+ for (i = 0; i < n_axes; i++)
+ {
+ GdkAxisUse use;
+
+ use = gdk_device_get_axis_use (device, i);
+ switch (use)
+ {
+ case GDK_AXIS_X:
+ axes[i] = x;
+ break;
+ case GDK_AXIS_Y:
+ axes[i] = y;
+ break;
+ case GDK_AXIS_PRESSURE:
+ axes[i] = [nsevent pressure];
+ break;
+ case GDK_AXIS_XTILT:
+ axes[i] = [nsevent tilt].x;
+ break;
+ case GDK_AXIS_YTILT:
+ axes[i] = [nsevent tilt].y;
+ break;
+ default:
+ g_warn_if_reached ();
+ break;
+ }
+ }
+
+ return axes;
+}
+
static void
fill_button_event (GdkWindow *window,
GdkEvent *event,
@@ -1053,15 +1095,7 @@ fill_button_event (GdkWindow *window,
nsevent);
if ([nsevent subtype] == GDK_QUARTZ_EVENT_SUBTYPE_TABLET_POINT)
- {
- axes = g_new (gdouble, TABLET_AXES);
-
- axes[0] = x;
- axes[1] = y;
- axes[2] = [nsevent pressure];
- axes[3] = [nsevent tilt].x;
- axes[4] = [nsevent tilt].y;
- }
+ axes = translate_axes (event_device, x, y, nsevent);
event->any.type = type;
event->button.window = window;
@@ -1096,15 +1130,7 @@ fill_motion_event (GdkWindow *window,
nsevent);
if ([nsevent subtype] == GDK_QUARTZ_EVENT_SUBTYPE_TABLET_POINT)
- {
- axes = g_new (gdouble, TABLET_AXES);
-
- axes[0] = x;
- axes[1] = y;
- axes[2] = [nsevent pressure];
- axes[3] = [nsevent tilt].x;
- axes[4] = [nsevent tilt].y;
- }
+ axes = translate_axes (event_device, x, y, nsevent);
event->any.type = GDK_MOTION_NOTIFY;
event->motion.window = window;