Signed-off-by: Stephen Chandler Paul <thatsly...@gmail.com>
---
 clients/window.c | 45 ++++++++++++++++++++++++++++++++++++++++++---
 clients/window.h | 25 +++++++++++++++++++++++++
 2 files changed, 67 insertions(+), 3 deletions(-)

diff --git a/clients/window.c b/clients/window.c
index 7b844f8..3896b31 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -315,6 +315,9 @@ struct widget {
        widget_touch_cancel_handler_t touch_cancel_handler;
        widget_axis_handler_t axis_handler;
        widget_tablet_motion_handler_t tablet_motion_handler;
+       widget_tablet_pressure_handler_t tablet_pressure_handler;
+       widget_tablet_distance_handler_t tablet_distance_handler;
+       widget_tablet_tilt_handler_t tablet_tilt_handler;
        widget_tablet_proximity_in_handler_t tablet_proximity_in_handler;
        widget_tablet_proximity_out_handler_t tablet_proximity_out_handler;
        widget_tablet_button_handler_t tablet_button_handler;
@@ -3469,6 +3472,42 @@ tablet_handle_motion(void *data, struct wl_tablet 
*wl_tablet, uint32_t time,
 }
 
 static void
+tablet_handle_pressure(void *data, struct wl_tablet *wl_tablet, uint32_t time,
+                      wl_fixed_t pressure)
+{
+       struct tablet *tablet = data;
+       struct widget *widget = tablet->focus_widget;
+
+       if (widget && widget->tablet_pressure_handler)
+               widget->tablet_pressure_handler(widget, tablet, time, pressure,
+                                               widget->user_data);
+}
+
+static void
+tablet_handle_distance(void *data, struct wl_tablet *wl_tablet, uint32_t time,
+                      wl_fixed_t distance)
+{
+       struct tablet *tablet = data;
+       struct widget *widget = tablet->focus_widget;
+
+       if (widget && widget->tablet_distance_handler)
+               widget->tablet_distance_handler(widget, tablet, time, distance,
+                                               widget->user_data);
+}
+
+static void
+tablet_handle_tilt(void *data, struct wl_tablet *wl_tablet, uint32_t time,
+                  wl_fixed_t tilt_x, wl_fixed_t tilt_y)
+{
+       struct tablet *tablet = data;
+       struct widget *widget = tablet->focus_widget;
+
+       if (widget && widget->tablet_tilt_handler)
+               widget->tablet_tilt_handler(widget, tablet, time,
+                                           tilt_x, tilt_y, widget->user_data);
+}
+
+static void
 tablet_handle_removed(void *data, struct wl_tablet *wl_tablet)
 {
        struct tablet *tablet = data;
@@ -3534,9 +3573,9 @@ static const struct wl_tablet_listener tablet_listener = {
        tablet_handle_motion,
        tablet_handle_down,
        tablet_handle_up,
-       NULL,
-       NULL,
-       NULL,
+       tablet_handle_pressure,
+       tablet_handle_distance,
+       tablet_handle_tilt,
        tablet_handle_button,
        tablet_handle_frame,
        tablet_handle_removed,
diff --git a/clients/window.h b/clients/window.h
index 7d2b6bf..203a7fe 100644
--- a/clients/window.h
+++ b/clients/window.h
@@ -279,6 +279,22 @@ typedef int (*widget_tablet_motion_handler_t)(struct 
widget *widget,
                                              float y,
                                              uint32_t time,
                                              void *data);
+typedef void (*widget_tablet_pressure_handler_t)(struct widget *widget,
+                                                struct tablet *tablet,
+                                                uint32_t time,
+                                                wl_fixed_t pressure,
+                                                void *data);
+typedef void (*widget_tablet_distance_handler_t)(struct widget *widget,
+                                                struct tablet *tablet,
+                                                uint32_t time,
+                                                wl_fixed_t distance,
+                                                void *data);
+typedef void (*widget_tablet_tilt_handler_t)(struct widget *widget,
+                                            struct tablet *tablet,
+                                            uint32_t time,
+                                            wl_fixed_t tilt_x,
+                                            wl_fixed_t tilt_y,
+                                            void *data);
 typedef void (*widget_tablet_proximity_in_handler_t)(struct widget *widget,
                                                     struct tablet *tablet,
                                                     struct tablet_tool *tool,
@@ -559,6 +575,15 @@ void
 widget_set_tablet_motion_handler(struct widget *widget,
                                 widget_tablet_motion_handler_t handler);
 void
+widget_set_tablet_pressure_handler(struct widget *widget,
+                                  widget_tablet_pressure_handler_t handler);
+void
+widget_set_tablet_distance_handler(struct widget *widget,
+                                  widget_tablet_distance_handler_t handler);
+void
+widget_set_tablet_tilt_handler(struct widget *widget,
+                              widget_tablet_tilt_handler_t handler);
+void
 widget_set_tablet_proximity_in_handler(struct widget *widget,
                                       widget_tablet_proximity_in_handler_t 
handler);
 void
-- 
1.8.5.5

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to