diff --git a/docs/reference/gdk/gdk-docs.sgml b/docs/reference/gdk/gdk-docs.sgml index 18d863dc00..a34b30c155 100644 --- a/docs/reference/gdk/gdk-docs.sgml +++ b/docs/reference/gdk/gdk-docs.sgml @@ -25,6 +25,7 @@ + diff --git a/docs/reference/gdk/gdk3-sections.txt b/docs/reference/gdk/gdk3-sections.txt index c8cd0fc9d6..3c44ce6adc 100644 --- a/docs/reference/gdk/gdk3-sections.txt +++ b/docs/reference/gdk/gdk3-sections.txt @@ -796,6 +796,25 @@ gdk_device_type_get_type GDK_MAX_TIMECOORD_AXES +
+GdkDevicePad +gdkdevicepad +GdkDevicePad +GdkDevicePadFeature +gdk_device_pad_get_n_groups +gdk_device_pad_get_group_n_modes +gdk_device_pad_get_n_features +gdk_device_pad_get_feature_group + + +GDK_TYPE_DEVICE_PAD +GDK_DEVICE_PAD +GDK_IS_DEVICE_PAD + + +gdk_device_pad_get_type +
+
GdkSeat gdkseat diff --git a/docs/reference/gdk/gdk3.types b/docs/reference/gdk/gdk3.types index d0b773e7b6..115f6e4bcf 100644 --- a/docs/reference/gdk/gdk3.types +++ b/docs/reference/gdk/gdk3.types @@ -4,6 +4,7 @@ gdk_app_launch_context_get_type gdk_cursor_get_type gdk_device_get_type gdk_device_manager_get_type +gdk_device_pad_get_type gdk_display_get_type gdk_display_manager_get_type gdk_drag_context_get_type diff --git a/gdk/Makefile.am b/gdk/Makefile.am index 684c7aba0a..052d4876d3 100644 --- a/gdk/Makefile.am +++ b/gdk/Makefile.am @@ -71,6 +71,7 @@ gdk_public_h_sources = \ gdkcairo.h \ gdkcursor.h \ gdkdevice.h \ + gdkdevicepad.h \ gdkdevicetool.h \ gdkdevicemanager.h \ gdkdisplay.h \ @@ -114,6 +115,7 @@ gdk_private_headers = \ gdkcursorprivate.h \ gdkdevicemanagerprivate.h \ gdkdeviceprivate.h \ + gdkdevicepadprivate.h \ gdkdevicetoolprivate.h \ gdkdisplaymanagerprivate.h \ gdkdisplayprivate.h \ @@ -144,6 +146,7 @@ gdk_c_sources = \ gdkcursor.c \ gdkdeprecated.c \ gdkdevice.c \ + gdkdevicepad.c \ gdkdevicetool.c \ gdkdevicemanager.c \ gdkdisplay.c \ diff --git a/gdk/gdk.h b/gdk/gdk.h index 92bafe1822..3878f10820 100644 --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include diff --git a/gdk/gdkdevicepad.c b/gdk/gdkdevicepad.c new file mode 100644 index 0000000000..02282f1068 --- /dev/null +++ b/gdk/gdkdevicepad.c @@ -0,0 +1,150 @@ +/* GDK - The GIMP Drawing Kit + * Copyright (C) 2016 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + * + * Author: Carlos Garnacho + */ + +/** + * SECTION:gdkdevicepad + * @Short_description: Pad device interface + * @Title: GtkDevicePad + * + * #GdkDevicePad is an interface implemented by devices of type + * %GDK_SOURCE_TABLET_PAD, it allows querying the features provided + * by the pad device. + * + * Tablet pads may contain one or more groups, each containing a subset + * of the buttons/rings/strips available. gdk_device_pad_get_n_groups() + * can be used to obtain the number of groups, gdk_device_pad_get_n_features() + * and gdk_device_pad_get_feature_group() can be combined to find out the + * number of buttons/rings/strips the device has, and how are they grouped. + * + * Each of those groups have different modes, which may be used to map + * each individual pad feature to multiple actions. Only one mode is + * effective (current) for each given group, different groups may have + * different current modes. The number of available modes in a group can + * be found out through gdk_device_pad_get_group_n_modes(), and the current + * mode for a given group will be notified through the #GdkEventPadGroupMode + * event. + * + */ + +#include "config.h" + +#include "gdkdevicepad.h" +#include "gdkdevicepadprivate.h" +#include "gdkdeviceprivate.h" + +G_DEFINE_INTERFACE (GdkDevicePad, gdk_device_pad, GDK_TYPE_DEVICE) + +static void +gdk_device_pad_default_init (GdkDevicePadInterface *pad) +{ +} + +/** + * gdk_device_pad_get_n_groups: + * @pad: a #GdkDevicePad + * + * Returns the number of groups this pad device has. Pads have + * at least one group. A pad group is a subcollection of + * buttons/strip/rings that is affected collectively by a same + * current mode. + * + * Returns: The number of button/ring/strip groups in the pad. + * + * Since: 3.22 + **/ +gint +gdk_device_pad_get_n_groups (GdkDevicePad *pad) +{ + GdkDevicePadInterface *iface = GDK_DEVICE_PAD_GET_IFACE (pad); + + g_return_val_if_fail (GDK_IS_DEVICE_PAD (pad), 0); + + return iface->get_n_groups (pad); +} + +/** + * gdk_device_pad_get_group_n_modes: + * @pad: a #GdkDevicePad + * @group_idx: group to get the number of available modes from + * + * Returns the number of modes that @group may have. + * + * Returns: The number of modes available in @group. + * + * Since: 3.22 + **/ +gint +gdk_device_pad_get_group_n_modes (GdkDevicePad *pad, + gint group_idx) +{ + GdkDevicePadInterface *iface = GDK_DEVICE_PAD_GET_IFACE (pad); + + g_return_val_if_fail (GDK_IS_DEVICE_PAD (pad), 0); + g_return_val_if_fail (group_idx >= 0, 0); + + return iface->get_group_n_modes (pad, group_idx); +} + +/** + * gdk_device_pad_get_n_features: + * @pad: a #GdkDevicePad + * @feature: a pad feature + * + * Returns the number of features a tablet pad has. + * + * Returns: The amount of elements of type @feature that this pad has. + * + * Since: 3.22 + **/ +gint +gdk_device_pad_get_n_features (GdkDevicePad *pad, + GdkDevicePadFeature feature) +{ + GdkDevicePadInterface *iface = GDK_DEVICE_PAD_GET_IFACE (pad); + + g_return_val_if_fail (GDK_IS_DEVICE_PAD (pad), 0); + + return iface->get_n_features (pad, feature); +} + +/** + * gdk_device_pad_get_feature_group: + * @pad: a #GdkDevicePad + * @feature: the feature type to get the group from + * @feature_idx: the index of the feature to get the group from + * + * Returns the group the given @feature and @idx belong to, + * or -1 if feature/index do not exist in @pad. + * + * Returns: The group number of the queried pad feature. + * + * Since: 3.22 + **/ +gint +gdk_device_pad_get_feature_group (GdkDevicePad *pad, + GdkDevicePadFeature feature, + gint idx) +{ + GdkDevicePadInterface *iface = GDK_DEVICE_PAD_GET_IFACE (pad); + + g_return_val_if_fail (GDK_IS_DEVICE_PAD (pad), -1); + g_return_val_if_fail (idx >= 0, -1); + + return iface->get_feature_group (pad, feature, idx); +} diff --git a/gdk/gdkdevicepad.h b/gdk/gdkdevicepad.h new file mode 100644 index 0000000000..040f0da32c --- /dev/null +++ b/gdk/gdkdevicepad.h @@ -0,0 +1,74 @@ +/* GDK - The GIMP Drawing Kit + * Copyright (C) 2016 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + * + * Author: Carlos Garnacho + */ + +#ifndef __GDK_DEVICE_PAD_H__ +#define __GDK_DEVICE_PAD_H__ + +#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION) +#error "Only can be included directly." +#endif + +#include +#include + +G_BEGIN_DECLS + +#define GDK_TYPE_DEVICE_PAD (gdk_device_pad_get_type ()) +#define GDK_DEVICE_PAD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDK_TYPE_DEVICE_PAD, GdkDevicePad)) +#define GDK_IS_DEVICE_PAD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDK_TYPE_DEVICE_PAD)) + +typedef struct _GdkDevicePad GdkDevicePad; +typedef struct _GdkDevicePadInterface GdkDevicePadInterface; + +/** + * GdkDevicePadFeature: + * @GDK_DEVICE_PAD_FEATURE_BUTTON: a button + * @GDK_DEVICE_PAD_FEATURE_RING: a ring-shaped interactive area + * @GDK_DEVICE_PAD_FEATURE_STRIP: a straight interactive area + * + * A pad feature. + */ +typedef enum { + GDK_DEVICE_PAD_FEATURE_BUTTON, + GDK_DEVICE_PAD_FEATURE_RING, + GDK_DEVICE_PAD_FEATURE_STRIP +} GdkDevicePadFeature; + +GDK_AVAILABLE_IN_3_22 +GType gdk_device_pad_get_type (void) G_GNUC_CONST; + +GDK_AVAILABLE_IN_3_22 +gint gdk_device_pad_get_n_groups (GdkDevicePad *pad); + +GDK_AVAILABLE_IN_3_22 +gint gdk_device_pad_get_group_n_modes (GdkDevicePad *pad, + gint group_idx); + +GDK_AVAILABLE_IN_3_22 +gint gdk_device_pad_get_n_features (GdkDevicePad *pad, + GdkDevicePadFeature feature); + +GDK_AVAILABLE_IN_3_22 +gint gdk_device_pad_get_feature_group (GdkDevicePad *pad, + GdkDevicePadFeature feature, + gint feature_idx); + +G_END_DECLS + +#endif /* __GDK_DEVICE_PAD_H__ */ diff --git a/gdk/gdkdevicepadprivate.h b/gdk/gdkdevicepadprivate.h new file mode 100644 index 0000000000..a4f190066b --- /dev/null +++ b/gdk/gdkdevicepadprivate.h @@ -0,0 +1,45 @@ +/* GDK - The GIMP Drawing Kit + * Copyright (C) 2016 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + * + * Author: Carlos Garnacho + */ + +#ifndef __GDK_DEVICE_PAD_PRIVATE_H__ +#define __GDK_DEVICE_PAD_PRIVATE_H__ + +#include "gdkdevicepad.h" + +G_BEGIN_DECLS + +#define GDK_DEVICE_PAD_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GDK_TYPE_DEVICE_PAD, GdkDevicePadInterface)) + +struct _GdkDevicePadInterface { + GTypeInterface parent_interface; + + gint (* get_n_groups) (GdkDevicePad *pad); + + gint (* get_group_n_modes) (GdkDevicePad *pad, + gint group); + gint (* get_n_features) (GdkDevicePad *pad, + GdkDevicePadFeature feature); + gint (* get_feature_group) (GdkDevicePad *pad, + GdkDevicePadFeature feature, + gint idx); +}; + +G_END_DECLS + +#endif /* __GDK_DEVICE_PAD_PRIVATE_H__ */