[gtk+/wip/wayland-tablet: 539/555] GdkDeviceTool: Add GdkDeviceToolType to identify the physical tool type



commit e2d2f85be3bd77565f6277c77841d5997f1c46d7
Author: Stephen Chandler Paul <thatslyude gmail com>
Date:   Tue Jan 13 00:03:49 2015 -0500

    GdkDeviceTool: Add GdkDeviceToolType to identify the physical tool type
    
    Because there are multiple different types of styluses that can be used with
    tablets, we have to have some sort of identifier for them attached to the
    GdkDeviceTool, especially since knowing the actual tool type for a GdkDeviceTool
    is necessary for matching up a GdkDeviceTool with it's appropriate
    GdkInputSource in Wayland (eg. matching up a GdkDeviceTool eraser with the
    GDK_SOURCE_ERASER GdkInputSource of a wayland tablet).
    
    Signed-off-by: Stephen Chandler Paul <thatslyude gmail com>

 docs/reference/gdk/gdk3-sections.txt |    2 ++
 gdk/gdkdevice.c                      |   23 ++++++++++++++++++++++-
 gdk/gdkdevice.h                      |   26 ++++++++++++++++++++++++++
 gdk/gdkdeviceprivate.h               |    4 +++-
 gdk/x11/gdkdevicemanager-xi2.c       |    3 ++-
 5 files changed, 55 insertions(+), 3 deletions(-)
---
diff --git a/docs/reference/gdk/gdk3-sections.txt b/docs/reference/gdk/gdk3-sections.txt
index a2757c7..786a5ad 100644
--- a/docs/reference/gdk/gdk3-sections.txt
+++ b/docs/reference/gdk/gdk3-sections.txt
@@ -716,6 +716,7 @@ GdkInputSource
 GdkInputMode
 GdkAxisUse
 GdkAxisFlags
+GdkDeviceToolType
 GdkDeviceType
 GdkGrabOwnership
 
@@ -761,6 +762,7 @@ gdk_device_get_last_event_window
 
 <SUBSECTION>
 gdk_device_tool_get_serial
+gdk_device_tool_get_tool_type
 
 <SUBSECTION Standard>
 GDK_TYPE_AXIS_USE
diff --git a/gdk/gdkdevice.c b/gdk/gdkdevice.c
index 0f49369..0e7d0a7 100644
--- a/gdk/gdkdevice.c
+++ b/gdk/gdkdevice.c
@@ -2043,12 +2043,14 @@ G_DEFINE_BOXED_TYPE (GdkDeviceTool, gdk_device_tool,
                      gdk_device_tool_ref, gdk_device_tool_unref);
 
 GdkDeviceTool *
-gdk_device_tool_new (guint64 serial)
+gdk_device_tool_new (guint64           serial,
+                     GdkDeviceToolType type)
 {
   GdkDeviceTool *tool;
 
   tool = g_new0 (GdkDeviceTool, 1);
   tool->serial = serial;
+  tool->type = type;
 
   return tool;
 }
@@ -2085,3 +2087,22 @@ gdk_device_tool_get_serial (GdkDeviceTool *tool)
 
   return tool->serial;
 }
+
+/**
+ * gdk_device_tool_get_tool_type:
+ * @tool: a #GdkDeviceTool
+ *
+ * Gets the #GdkDeviceToolType of the tool.
+ *
+ * Returns: The physical type for this tool. This can be used to figure out what
+ * sort of pen is being used, such as an airbrush or a pencil.
+ *
+ * Since: 3.22
+ **/
+GdkDeviceToolType
+gdk_device_tool_get_tool_type (GdkDeviceTool *tool)
+{
+  g_return_val_if_fail (tool != NULL, GDK_DEVICE_TOOL_TYPE_UNKNOWN);
+
+  return tool->type;
+}
diff --git a/gdk/gdkdevice.h b/gdk/gdkdevice.h
index acfc123..26c0d36 100644
--- a/gdk/gdkdevice.h
+++ b/gdk/gdkdevice.h
@@ -162,6 +162,29 @@ typedef enum {
   GDK_DEVICE_TYPE_FLOATING
 } GdkDeviceType;
 
+/**
+ * GdkDeviceToolType:
+ * @GDK_DEVICE_TOOL_TYPE_UNKNOWN: Tool is of an unknown type.
+ * @GDK_DEVICE_TOOL_TYPE_PEN: Tool is a standard tablet stylus.
+ * @GDK_DEVICE_TOOL_TYPE_ERASER: Tool is standard tablet eraser.
+ * @GDK_DEVICE_TOOL_TYPE_BRUSH: Tool is a brush stylus.
+ * @GDK_DEVICE_TOOL_TYPE_PENCIL: Tool is a pencil stylus.
+ * @GDK_DEVICE_TOOL_TYPE_AIRBRUSH: Tool is an airbrush stylus.
+ *
+ * Indicates the specific type of tool being used being a tablet. Such as an
+ * airbrush, pencil, etc.
+ *
+ * Since: 3.22
+ */
+typedef enum {
+  GDK_DEVICE_TOOL_TYPE_UNKNOWN,
+  GDK_DEVICE_TOOL_TYPE_PEN,
+  GDK_DEVICE_TOOL_TYPE_ERASER,
+  GDK_DEVICE_TOOL_TYPE_BRUSH,
+  GDK_DEVICE_TOOL_TYPE_PENCIL,
+  GDK_DEVICE_TOOL_TYPE_AIRBRUSH
+} GdkDeviceToolType;
+
 /* We don't allocate each coordinate this big, but we use it to
  * be ANSI compliant and avoid accessing past the defined limits.
  */
@@ -329,6 +352,9 @@ GType gdk_device_tool_get_type (void) G_GNUC_CONST;
 GDK_AVAILABLE_IN_3_22
 guint gdk_device_tool_get_serial (GdkDeviceTool *tool);
 
+GDK_AVAILABLE_IN_3_22
+GdkDeviceToolType gdk_device_tool_get_tool_type (GdkDeviceTool *tool);
+
 G_END_DECLS
 
 #endif /* __GDK_DEVICE_H__ */
diff --git a/gdk/gdkdeviceprivate.h b/gdk/gdkdeviceprivate.h
index be9a358..37cac78 100644
--- a/gdk/gdkdeviceprivate.h
+++ b/gdk/gdkdeviceprivate.h
@@ -35,6 +35,7 @@ typedef struct _GdkDeviceKey GdkDeviceKey;
 struct _GdkDeviceTool
 {
   guint64 serial;
+  GdkDeviceToolType type;
   gint ref_count;
 };
 
@@ -192,7 +193,8 @@ void  gdk_device_set_seat  (GdkDevice *device,
                             GdkSeat   *seat);
 
 /* Device tools */
-GdkDeviceTool *gdk_device_tool_new    (guint64        serial);
+GdkDeviceTool *gdk_device_tool_new    (guint64            serial,
+                                       GdkDeviceToolType  type);
 GdkDeviceTool *gdk_device_tool_ref    (GdkDeviceTool *tool);
 void           gdk_device_tool_unref  (GdkDeviceTool *tool);
 void           gdk_device_update_tool (GdkDevice     *device,
diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c
index b70f5a7..71d014d 100644
--- a/gdk/x11/gdkdevicemanager-xi2.c
+++ b/gdk/x11/gdkdevicemanager-xi2.c
@@ -1022,7 +1022,8 @@ handle_property_change (GdkX11DeviceManagerXI2 *device_manager,
 
           if (!tool && serial_id > 0)
             {
-              tool = gdk_device_tool_new (serial_id);
+              tool = gdk_device_tool_new (serial_id,
+                                          GDK_DEVICE_TOOL_TYPE_UNKNOWN);
               gdk_seat_default_add_tool (GDK_SEAT_DEFAULT (seat), tool);
             }
         }


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