[gimp] app: add gimp_filter_tool_{enable,disable}_color_picking()
- From: N/A <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: add gimp_filter_tool_{enable,disable}_color_picking()
- Date: Tue, 30 May 2017 21:41:05 +0000 (UTC)
commit a5b03ddf2ea467853f16beacd7e6b0fb9f497edc
Author: Ell <ell_se yahoo com>
Date: Tue May 30 17:06:41 2017 -0400
app: add gimp_filter_tool_{enable,disable}_color_picking()
Subclasses of GimpFilterTool should use these functions to control
picking, instead of using gimp_color_tool_{enable,disable}()
directly. This makes sure that the tool's picking state is
consistent, and allows the caller to control the pick identifier,
and use abyss picking (not currently needed by any subclass, but
maybe in the future, who knows.)
app/tools/gimpfiltertool.c | 94 ++++++++++++++++++++++++++-----------------
app/tools/gimpfiltertool.h | 43 ++++++++++++--------
2 files changed, 82 insertions(+), 55 deletions(-)
---
diff --git a/app/tools/gimpfiltertool.c b/app/tools/gimpfiltertool.c
index a72a45e..f008023 100644
--- a/app/tools/gimpfiltertool.c
+++ b/app/tools/gimpfiltertool.c
@@ -343,9 +343,7 @@ gimp_filter_tool_initialize (GimpTool *tool,
return FALSE;
}
- if (filter_tool->active_picker)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (filter_tool->active_picker),
- FALSE);
+ gimp_filter_tool_disable_color_picking (filter_tool);
/* set display so the dialog can be hidden on display destruction */
tool->display = display;
@@ -802,16 +800,11 @@ gimp_filter_tool_can_pick_color (GimpColorTool *color_tool,
{
GimpFilterTool *filter_tool = GIMP_FILTER_TOOL (color_tool);
GimpImage *image = gimp_display_get_image (display);
- gboolean pick_abyss;
if (gimp_image_get_active_drawable (image) != filter_tool->drawable)
return FALSE;
- pick_abyss =
- GPOINTER_TO_INT (g_object_get_data (G_OBJECT (filter_tool->active_picker),
- "picker-pick-abyss"));
-
- return pick_abyss ||
+ return filter_tool->pick_abyss ||
GIMP_COLOR_TOOL_CLASS (parent_class)->can_pick (color_tool,
coords, display);
}
@@ -825,14 +818,9 @@ gimp_filter_tool_pick_color (GimpColorTool *color_tool,
GimpRGB *color)
{
GimpFilterTool *filter_tool = GIMP_FILTER_TOOL (color_tool);
- gboolean pick_abyss;
gint off_x, off_y;
gboolean picked;
- pick_abyss =
- GPOINTER_TO_INT (g_object_get_data (G_OBJECT (filter_tool->active_picker),
- "picker-pick-abyss"));
-
gimp_item_get_offset (GIMP_ITEM (filter_tool->drawable), &off_x, &off_y);
*sample_format = gimp_drawable_get_format (filter_tool->drawable);
@@ -844,7 +832,7 @@ gimp_filter_tool_pick_color (GimpColorTool *color_tool,
color_tool->options->average_radius,
pixel, color);
- if (! picked && pick_abyss)
+ if (! picked && filter_tool->pick_abyss)
{
color->r = 0.0;
color->g = 0.0;
@@ -867,18 +855,12 @@ gimp_filter_tool_color_picked (GimpColorTool *color_tool,
const GimpRGB *color)
{
GimpFilterTool *filter_tool = GIMP_FILTER_TOOL (color_tool);
- gpointer identifier;
-
- g_return_if_fail (GTK_IS_WIDGET (filter_tool->active_picker));
- identifier = g_object_get_data (G_OBJECT (filter_tool->active_picker),
- "picker-identifier");
-
- GIMP_FILTER_TOOL_GET_CLASS (filter_tool)->color_picked (filter_tool,
- identifier,
- x, y,
- sample_format,
- color);
+ GIMP_FILTER_TOOL_GET_CLASS (filter_tool)->color_picked (
+ filter_tool,
+ filter_tool->pick_identifier,
+ x, y,
+ sample_format, color);
}
static void
@@ -989,9 +971,7 @@ static void
gimp_filter_tool_dialog_unmap (GtkWidget *dialog,
GimpFilterTool *filter_tool)
{
- if (filter_tool->active_picker)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (filter_tool->active_picker),
- FALSE);
+ gimp_filter_tool_disable_color_picking (filter_tool);
}
static void
@@ -1570,28 +1550,68 @@ gimp_filter_tool_dialog_get_vbox (GimpFilterTool *filter_tool)
return gimp_tool_gui_get_vbox (filter_tool->gui);
}
+void
+gimp_filter_tool_enable_color_picking (GimpFilterTool *filter_tool,
+ gpointer identifier,
+ gboolean pick_abyss)
+{
+ g_return_if_fail (GIMP_IS_FILTER_TOOL (filter_tool));
+
+ gimp_filter_tool_disable_color_picking (filter_tool);
+
+ /* note that ownership over `identifier` is not transferred, and its lifetime
+ * should be managed by the caller.
+ */
+ filter_tool->pick_identifier = identifier;
+ filter_tool->pick_abyss = pick_abyss;
+
+ gimp_color_tool_enable (GIMP_COLOR_TOOL (filter_tool),
+ GIMP_COLOR_TOOL_GET_OPTIONS (filter_tool));
+}
+
+void
+gimp_filter_tool_disable_color_picking (GimpFilterTool *filter_tool)
+{
+ g_return_if_fail (GIMP_IS_FILTER_TOOL (filter_tool));
+
+ if (filter_tool->active_picker)
+ {
+ GtkToggleButton *toggle = GTK_TOGGLE_BUTTON (filter_tool->active_picker);
+
+ filter_tool->active_picker = NULL;
+
+ gtk_toggle_button_set_active (toggle, FALSE);
+ }
+
+ if (gimp_color_tool_is_enabled (GIMP_COLOR_TOOL (filter_tool)))
+ gimp_color_tool_disable (GIMP_COLOR_TOOL (filter_tool));
+}
+
static void
gimp_filter_tool_color_picker_toggled (GtkWidget *widget,
GimpFilterTool *filter_tool)
{
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
{
+ gpointer identifier;
+ gboolean pick_abyss;
+
if (filter_tool->active_picker == widget)
return;
- if (filter_tool->active_picker)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (filter_tool->active_picker),
- FALSE);
+ identifier = g_object_get_data (G_OBJECT (widget),
+ "picker-identifier");
+ pick_abyss = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget),
+ "picker-pick-abyss"));
- filter_tool->active_picker = widget;
+ gimp_filter_tool_enable_color_picking (filter_tool,
+ identifier, pick_abyss);
- gimp_color_tool_enable (GIMP_COLOR_TOOL (filter_tool),
- GIMP_COLOR_TOOL_GET_OPTIONS (filter_tool));
+ filter_tool->active_picker = widget;
}
else if (filter_tool->active_picker == widget)
{
- filter_tool->active_picker = NULL;
- gimp_color_tool_disable (GIMP_COLOR_TOOL (filter_tool));
+ gimp_filter_tool_disable_color_picking (filter_tool);
}
}
diff --git a/app/tools/gimpfiltertool.h b/app/tools/gimpfiltertool.h
index cb75ee5..f86ba44 100644
--- a/app/tools/gimpfiltertool.h
+++ b/app/tools/gimpfiltertool.h
@@ -60,6 +60,9 @@ struct _GimpFilterTool
GimpGuide *preview_guide;
+ gpointer pick_identifier;
+ gboolean pick_abyss;
+
/* dialog */
gboolean overlay;
GimpToolGui *gui;
@@ -104,31 +107,35 @@ struct _GimpFilterToolClass
};
-GType gimp_filter_tool_get_type (void) G_GNUC_CONST;
+GType gimp_filter_tool_get_type (void) G_GNUC_CONST;
-void gimp_filter_tool_get_operation (GimpFilterTool *filter_tool);
+void gimp_filter_tool_get_operation (GimpFilterTool *filter_tool);
-void gimp_filter_tool_set_has_settings (GimpFilterTool *filter_tool,
- gboolean has_settings);
+void gimp_filter_tool_set_has_settings (GimpFilterTool *filter_tool,
+ gboolean has_settings);
-void gimp_filter_tool_set_config (GimpFilterTool *filter_tool,
- GimpConfig *config);
+void gimp_filter_tool_set_config (GimpFilterTool *filter_tool,
+ GimpConfig *config);
-void gimp_filter_tool_edit_as (GimpFilterTool *filter_tool,
- const gchar *new_tool_id,
- GimpConfig *config);
+void gimp_filter_tool_edit_as (GimpFilterTool *filter_tool,
+ const gchar *new_tool_id,
+ GimpConfig *config);
-gboolean gimp_filter_tool_on_guide (GimpFilterTool *filter_tool,
- const GimpCoords *coords,
- GimpDisplay *display);
+gboolean gimp_filter_tool_on_guide (GimpFilterTool *filter_tool,
+ const GimpCoords *coords,
+ GimpDisplay *display);
-GtkWidget * gimp_filter_tool_dialog_get_vbox (GimpFilterTool *filter_tool);
+GtkWidget * gimp_filter_tool_dialog_get_vbox (GimpFilterTool *filter_tool);
-GtkWidget * gimp_filter_tool_add_color_picker (GimpFilterTool *filter_tool,
- gpointer identifier,
- const gchar *icon_name,
- const gchar *tooltip,
- gboolean pick_abyss);
+void gimp_filter_tool_enable_color_picking (GimpFilterTool *filter_tool,
+ gpointer identifier,
+ gboolean pick_abyss);
+void gimp_filter_tool_disable_color_picking (GimpFilterTool *filter_tool);
+GtkWidget * gimp_filter_tool_add_color_picker (GimpFilterTool *filter_tool,
+ gpointer identifier,
+ const gchar *icon_name,
+ const gchar *tooltip,
+ gboolean pick_abyss);
#endif /* __GIMP_FILTER_TOOL_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]