[gimp] app: let tools control how they recieve modifier keys during a stroke
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: let tools control how they recieve modifier keys during a stroke
- Date: Sun, 29 Oct 2017 15:43:32 +0000 (UTC)
commit dd30cc79b5397c6b71bf900e1568ac7672469336
Author: Michael Natterer <mitch gimp org>
Date: Sun Oct 29 16:28:46 2017 +0100
app: let tools control how they recieve modifier keys during a stroke
Add new enum GimpToolActiveModifiers { OFF, SAME, SEPARATE } and
new API gimp_tool_control_set,get_active_modifiers(), the default
value is OFF.
OFF: the tool gets no modifier keys at all during a stroke
SAME: all modifiers are always delivered via GimpTool::modifier_key(),
and no magic is applied whatsoever when a mouse button is pressed or
released.
SEPARATE: this is the "classic" way: modifiers while hovering and
while stroking are delivered separately, and hover modifiers don't
affect stroke modifiers.
app/tools/gimptoolcontrol.c | 20 +++++
app/tools/gimptoolcontrol.h | 190 ++++++++++++++++++++++++-------------------
app/tools/tools-enums.c | 31 +++++++
app/tools/tools-enums.h | 12 +++
4 files changed, 168 insertions(+), 85 deletions(-)
---
diff --git a/app/tools/gimptoolcontrol.c b/app/tools/gimptoolcontrol.c
index a7d83ff..e93784e 100644
--- a/app/tools/gimptoolcontrol.c
+++ b/app/tools/gimptoolcontrol.c
@@ -69,6 +69,8 @@ gimp_tool_control_init (GimpToolControl *control)
control->wants_triple_click = FALSE;
control->wants_all_key_events = FALSE;
+ control->active_modifiers = GIMP_TOOL_ACTIVE_MODIFIERS_OFF;
+
control->cursor = GIMP_CURSOR_MOUSE;
control->tool_cursor = GIMP_TOOL_CURSOR_NONE;
control->cursor_modifier = GIMP_CURSOR_MODIFIER_NONE;
@@ -348,6 +350,24 @@ gimp_tool_control_get_wants_all_key_events (GimpToolControl *control)
}
void
+gimp_tool_control_set_active_modifiers (GimpToolControl *control,
+ GimpToolActiveModifiers active_modifiers)
+{
+ g_return_if_fail (GIMP_IS_TOOL_CONTROL (control));
+
+ control->active_modifiers = active_modifiers;
+}
+
+GimpToolActiveModifiers
+gimp_tool_control_get_active_modifiers (GimpToolControl *control)
+{
+ g_return_val_if_fail (GIMP_IS_TOOL_CONTROL (control),
+ GIMP_TOOL_ACTIVE_MODIFIERS_OFF);
+
+ return control->active_modifiers;
+}
+
+void
gimp_tool_control_set_snap_offsets (GimpToolControl *control,
gint offset_x,
gint offset_y,
diff --git a/app/tools/gimptoolcontrol.h b/app/tools/gimptoolcontrol.h
index c308511..8d3f6aa 100644
--- a/app/tools/gimptoolcontrol.h
+++ b/app/tools/gimptoolcontrol.h
@@ -64,6 +64,8 @@ struct _GimpToolControl
gboolean wants_triple_click;
gboolean wants_all_key_events;
+ GimpToolActiveModifiers active_modifiers;
+
gboolean toggled;
GimpCursorType cursor;
@@ -91,92 +93,110 @@ struct _GimpToolControlClass
};
-GType gimp_tool_control_get_type (void) G_GNUC_CONST;
-
-void gimp_tool_control_activate (GimpToolControl *control);
-void gimp_tool_control_halt (GimpToolControl *control);
-gboolean gimp_tool_control_is_active (GimpToolControl *control);
-
-void gimp_tool_control_pause (GimpToolControl *control);
-void gimp_tool_control_resume (GimpToolControl *control);
-gboolean gimp_tool_control_is_paused (GimpToolControl *control);
-
-void gimp_tool_control_set_preserve (GimpToolControl *control,
- gboolean preserve);
-gboolean gimp_tool_control_get_preserve (GimpToolControl *control);
-
-void gimp_tool_control_push_preserve (GimpToolControl *control,
- gboolean preserve);
-void gimp_tool_control_pop_preserve (GimpToolControl *control);
-
-void gimp_tool_control_set_scroll_lock (GimpToolControl *control,
- gboolean scroll_lock);
-gboolean gimp_tool_control_get_scroll_lock (GimpToolControl *control);
-
-void gimp_tool_control_set_handle_empty_image (GimpToolControl *control,
- gboolean handle_empty);
-gboolean gimp_tool_control_get_handle_empty_image (GimpToolControl *control);
-
-void gimp_tool_control_set_dirty_mask (GimpToolControl *control,
- GimpDirtyMask dirty_mask);
-GimpDirtyMask gimp_tool_control_get_dirty_mask (GimpToolControl *control);
-
-void gimp_tool_control_set_motion_mode (GimpToolControl *control,
- GimpMotionMode motion_mode);
-GimpMotionMode gimp_tool_control_get_motion_mode (GimpToolControl *control);
-
-void gimp_tool_control_set_snap_to (GimpToolControl *control,
- gboolean snap_to);
-gboolean gimp_tool_control_get_snap_to (GimpToolControl *control);
-
-void gimp_tool_control_set_wants_click (GimpToolControl *control,
- gboolean wants_click);
-gboolean gimp_tool_control_get_wants_click (GimpToolControl *control);
-
-void gimp_tool_control_set_wants_double_click (GimpToolControl *control,
- gboolean wants_double_click);
-gboolean gimp_tool_control_get_wants_double_click (GimpToolControl *control);
-
-void gimp_tool_control_set_wants_triple_click (GimpToolControl *control,
- gboolean wants_double_click);
-gboolean gimp_tool_control_get_wants_triple_click (GimpToolControl *control);
-
-void gimp_tool_control_set_wants_all_key_events (GimpToolControl *control,
- gboolean wants_key_events);
-gboolean gimp_tool_control_get_wants_all_key_events (GimpToolControl *control);
-
-void gimp_tool_control_set_snap_offsets (GimpToolControl *control,
- gint offset_x,
- gint offset_y,
- gint width,
- gint height);
-void gimp_tool_control_get_snap_offsets (GimpToolControl *control,
- gint *offset_x,
- gint *offset_y,
- gint *width,
- gint *height);
-
-void gimp_tool_control_set_precision (GimpToolControl *control,
- GimpCursorPrecision precision);
+GType gimp_tool_control_get_type (void) G_GNUC_CONST;
+
+void gimp_tool_control_activate (GimpToolControl *control);
+void gimp_tool_control_halt (GimpToolControl *control);
+gboolean gimp_tool_control_is_active (GimpToolControl *control);
+
+void gimp_tool_control_pause (GimpToolControl *control);
+void gimp_tool_control_resume (GimpToolControl *control);
+gboolean gimp_tool_control_is_paused (GimpToolControl *control);
+
+void gimp_tool_control_set_preserve (GimpToolControl *control,
+ gboolean preserve);
+gboolean gimp_tool_control_get_preserve (GimpToolControl *control);
+
+void gimp_tool_control_push_preserve (GimpToolControl *control,
+ gboolean preserve);
+void gimp_tool_control_pop_preserve (GimpToolControl *control);
+
+void gimp_tool_control_set_scroll_lock (GimpToolControl *control,
+ gboolean scroll_lock);
+gboolean gimp_tool_control_get_scroll_lock (GimpToolControl *control);
+
+void gimp_tool_control_set_handle_empty_image
+ (GimpToolControl *control,
+ gboolean handle_empty);
+gboolean gimp_tool_control_get_handle_empty_image
+ (GimpToolControl *control);
+
+void gimp_tool_control_set_dirty_mask (GimpToolControl *control,
+ GimpDirtyMask dirty_mask);
+GimpDirtyMask gimp_tool_control_get_dirty_mask (GimpToolControl *control);
+
+void gimp_tool_control_set_motion_mode (GimpToolControl *control,
+ GimpMotionMode motion_mode);
+GimpMotionMode gimp_tool_control_get_motion_mode (GimpToolControl *control);
+
+void gimp_tool_control_set_snap_to (GimpToolControl *control,
+ gboolean snap_to);
+gboolean gimp_tool_control_get_snap_to (GimpToolControl *control);
+
+void gimp_tool_control_set_wants_click (GimpToolControl *control,
+ gboolean wants_click);
+gboolean gimp_tool_control_get_wants_click (GimpToolControl *control);
+
+void gimp_tool_control_set_wants_double_click
+ (GimpToolControl *control,
+ gboolean wants_double_click);
+gboolean gimp_tool_control_get_wants_double_click
+ (GimpToolControl *control);
+
+void gimp_tool_control_set_wants_triple_click
+ (GimpToolControl *control,
+ gboolean wants_double_click);
+gboolean gimp_tool_control_get_wants_triple_click
+ (GimpToolControl *control);
+
+void gimp_tool_control_set_wants_all_key_events
+ (GimpToolControl *control,
+ gboolean wants_key_events);
+gboolean gimp_tool_control_get_wants_all_key_events
+ (GimpToolControl *control);
+
+void gimp_tool_control_set_active_modifiers
+ (GimpToolControl *control,
+ GimpToolActiveModifiers active_modifiers);
+GimpToolActiveModifiers
+ gimp_tool_control_get_active_modifiers
+ (GimpToolControl *control);
+
+void gimp_tool_control_set_snap_offsets (GimpToolControl *control,
+ gint offset_x,
+ gint offset_y,
+ gint width,
+ gint height);
+void gimp_tool_control_get_snap_offsets (GimpToolControl *control,
+ gint *offset_x,
+ gint *offset_y,
+ gint *width,
+ gint *height);
+
+void gimp_tool_control_set_precision (GimpToolControl *control,
+ GimpCursorPrecision precision);
GimpCursorPrecision
- gimp_tool_control_get_precision (GimpToolControl *control);
-
-void gimp_tool_control_set_toggled (GimpToolControl *control,
- gboolean toggled);
-gboolean gimp_tool_control_get_toggled (GimpToolControl *control);
-
-void gimp_tool_control_set_cursor (GimpToolControl *control,
- GimpCursorType cursor);
-void gimp_tool_control_set_tool_cursor (GimpToolControl *control,
- GimpToolCursorType cursor);
-void gimp_tool_control_set_cursor_modifier (GimpToolControl *control,
- GimpCursorModifier modifier);
-void gimp_tool_control_set_toggle_cursor (GimpToolControl *control,
- GimpCursorType cursor);
-void gimp_tool_control_set_toggle_tool_cursor (GimpToolControl *control,
- GimpToolCursorType cursor);
-void gimp_tool_control_set_toggle_cursor_modifier (GimpToolControl *control,
- GimpCursorModifier modifier);
+ gimp_tool_control_get_precision (GimpToolControl *control);
+
+void gimp_tool_control_set_toggled (GimpToolControl *control,
+ gboolean toggled);
+gboolean gimp_tool_control_get_toggled (GimpToolControl *control);
+
+void gimp_tool_control_set_cursor (GimpToolControl *control,
+ GimpCursorType cursor);
+void gimp_tool_control_set_tool_cursor (GimpToolControl *control,
+ GimpToolCursorType cursor);
+void gimp_tool_control_set_cursor_modifier
+ (GimpToolControl *control,
+ GimpCursorModifier modifier);
+void gimp_tool_control_set_toggle_cursor (GimpToolControl *control,
+ GimpCursorType cursor);
+void gimp_tool_control_set_toggle_tool_cursor
+ (GimpToolControl *control,
+ GimpToolCursorType cursor);
+void gimp_tool_control_set_toggle_cursor_modifier
+ (GimpToolControl *control,
+ GimpCursorModifier modifier);
GimpCursorType
gimp_tool_control_get_cursor (GimpToolControl *control);
diff --git a/app/tools/tools-enums.c b/app/tools/tools-enums.c
index ff6b00e..d869bd5 100644
--- a/app/tools/tools-enums.c
+++ b/app/tools/tools-enums.c
@@ -105,6 +105,37 @@ gimp_tool_action_get_type (void)
}
GType
+gimp_tool_active_modifiers_get_type (void)
+{
+ static const GEnumValue values[] =
+ {
+ { GIMP_TOOL_ACTIVE_MODIFIERS_OFF, "GIMP_TOOL_ACTIVE_MODIFIERS_OFF", "off" },
+ { GIMP_TOOL_ACTIVE_MODIFIERS_SAME, "GIMP_TOOL_ACTIVE_MODIFIERS_SAME", "same" },
+ { GIMP_TOOL_ACTIVE_MODIFIERS_SEPARATE, "GIMP_TOOL_ACTIVE_MODIFIERS_SEPARATE", "separate" },
+ { 0, NULL, NULL }
+ };
+
+ static const GimpEnumDesc descs[] =
+ {
+ { GIMP_TOOL_ACTIVE_MODIFIERS_OFF, "GIMP_TOOL_ACTIVE_MODIFIERS_OFF", NULL },
+ { GIMP_TOOL_ACTIVE_MODIFIERS_SAME, "GIMP_TOOL_ACTIVE_MODIFIERS_SAME", NULL },
+ { GIMP_TOOL_ACTIVE_MODIFIERS_SEPARATE, "GIMP_TOOL_ACTIVE_MODIFIERS_SEPARATE", NULL },
+ { 0, NULL, NULL }
+ };
+
+ static GType type = 0;
+
+ if (G_UNLIKELY (! type))
+ {
+ type = g_enum_register_static ("GimpToolActiveModifiers", values);
+ gimp_type_set_translation_context (type, "tool-active-modifiers");
+ gimp_enum_set_value_descriptions (type, descs);
+ }
+
+ return type;
+}
+
+GType
gimp_matting_draw_mode_get_type (void)
{
static const GEnumValue values[] =
diff --git a/app/tools/tools-enums.h b/app/tools/tools-enums.h
index a7f2158..3513dc1 100644
--- a/app/tools/tools-enums.h
+++ b/app/tools/tools-enums.h
@@ -60,6 +60,18 @@ typedef enum
} GimpToolAction;
+#define GIMP_TYPE_TOOL_ACTIVE_MODIFIERS (gimp_tool_active_modifiers_get_type ())
+
+GType gimp_tool_active_modifiers_get_type (void) G_GNUC_CONST;
+
+typedef enum
+{
+ GIMP_TOOL_ACTIVE_MODIFIERS_OFF,
+ GIMP_TOOL_ACTIVE_MODIFIERS_SAME,
+ GIMP_TOOL_ACTIVE_MODIFIERS_SEPARATE,
+} GimpToolActiveModifiers;
+
+
#define GIMP_TYPE_MATTING_DRAW_MODE (gimp_matting_draw_mode_get_type ())
GType gimp_matting_draw_mode_get_type (void) G_GNUC_CONST;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]