[gimp] app: keep the split preview guide always movable
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: keep the split preview guide always movable
- Date: Thu, 14 Apr 2016 18:31:56 +0000 (UTC)
commit 70a81412b419c8945bc005fabf0e75e4237904a0
Author: Michael Natterer <mitch gimp org>
Date: Thu Apr 14 19:25:59 2016 +0100
app: keep the split preview guide always movable
Change things so the guide is preferred over any color picking
interaction of the parent GimpColorTool. Needs a minor change in the
GimpCurvesTool subclass too.
app/tools/gimpcurvestool.c | 64 ++++++-----
app/tools/gimpimagemaptool.c | 266 +++++++++++++++++++++---------------------
app/tools/gimpimagemaptool.h | 8 +-
3 files changed, 174 insertions(+), 164 deletions(-)
---
diff --git a/app/tools/gimpcurvestool.c b/app/tools/gimpcurvestool.c
index 88130c2..9bb744e 100644
--- a/app/tools/gimpcurvestool.c
+++ b/app/tools/gimpcurvestool.c
@@ -324,42 +324,48 @@ gimp_curves_tool_oper_update (GimpTool *tool,
gboolean proximity,
GimpDisplay *display)
{
- GimpColorPickMode mode;
- gchar *status = NULL;
- GdkModifierType extend_mask = gimp_get_extend_selection_mask ();
- GdkModifierType toggle_mask = gimp_get_toggle_behavior_mask ();
-
- GIMP_TOOL_CLASS (parent_class)->oper_update (tool, coords, state, proximity,
- display);
-
- gimp_tool_pop_status (tool, display);
-
- if (state & extend_mask)
- {
- mode = GIMP_COLOR_PICK_MODE_PALETTE;
- status = g_strdup (_("Click to add a control point"));
- }
- else if (state & toggle_mask)
+ if (gimp_image_map_tool_on_guide (GIMP_IMAGE_MAP_TOOL (tool),
+ coords, display))
{
- mode = GIMP_COLOR_PICK_MODE_PALETTE;
- status = g_strdup (_("Click to add control points to all channels"));
+ GIMP_TOOL_CLASS (parent_class)->oper_update (tool, coords, state, proximity,
+ display);
}
else
{
- mode = GIMP_COLOR_PICK_MODE_NONE;
- status = gimp_suggest_modifiers (_("Click to locate on curve"),
- (extend_mask | toggle_mask) & ~state,
- _("%s: add control point"),
- _("%s: add control points to all channels"),
- NULL);
- }
+ GimpColorPickMode mode;
+ gchar *status = NULL;
+ GdkModifierType extend_mask = gimp_get_extend_selection_mask ();
+ GdkModifierType toggle_mask = gimp_get_toggle_behavior_mask ();
+
+ gimp_tool_pop_status (tool, display);
+
+ if (state & extend_mask)
+ {
+ mode = GIMP_COLOR_PICK_MODE_PALETTE;
+ status = g_strdup (_("Click to add a control point"));
+ }
+ else if (state & toggle_mask)
+ {
+ mode = GIMP_COLOR_PICK_MODE_PALETTE;
+ status = g_strdup (_("Click to add control points to all channels"));
+ }
+ else
+ {
+ mode = GIMP_COLOR_PICK_MODE_NONE;
+ status = gimp_suggest_modifiers (_("Click to locate on curve"),
+ (extend_mask | toggle_mask) & ~state,
+ _("%s: add control point"),
+ _("%s: add control points to all channels"),
+ NULL);
+ }
- GIMP_COLOR_TOOL (tool)->pick_mode = mode;
+ GIMP_COLOR_TOOL (tool)->pick_mode = mode;
- if (proximity)
- gimp_tool_push_status (tool, display, "%s", status);
+ if (proximity)
+ gimp_tool_push_status (tool, display, "%s", status);
- g_free (status);
+ g_free (status);
+ }
}
static void
diff --git a/app/tools/gimpimagemaptool.c b/app/tools/gimpimagemaptool.c
index 961878f..c77afdf 100644
--- a/app/tools/gimpimagemaptool.c
+++ b/app/tools/gimpimagemaptool.c
@@ -143,9 +143,6 @@ static void gimp_image_map_tool_config_notify (GObject *objec
static void gimp_image_map_tool_add_guide (GimpImageMapTool *im_tool);
static void gimp_image_map_tool_remove_guide (GimpImageMapTool *im_tool);
static void gimp_image_map_tool_move_guide (GimpImageMapTool *im_tool);
-static gboolean gimp_image_map_tool_on_guide (GimpImageMapTool *im_tool,
- const GimpCoords *coords,
- GimpDisplay *display);
static void gimp_image_map_tool_guide_removed (GimpGuide *guide,
GimpImageMapTool *im_tool);
static void gimp_image_map_tool_guide_moved (GimpGuide *guide,
@@ -521,74 +518,72 @@ gimp_image_map_tool_button_press (GimpTool *tool,
GimpButtonPressType press_type,
GimpDisplay *display)
{
- GIMP_TOOL_CLASS (parent_class)->button_press (tool, coords, time, state,
- press_type, display);
+ GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
- if (! gimp_color_tool_is_enabled (GIMP_COLOR_TOOL (tool)))
+ if (! gimp_image_map_tool_on_guide (im_tool, coords, display))
+ {
+ GIMP_TOOL_CLASS (parent_class)->button_press (tool, coords, time, state,
+ press_type, display);
+ }
+ else
{
- GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
GimpImageMapOptions *options = GIMP_IMAGE_MAP_TOOL_GET_OPTIONS (tool);
- if (gimp_image_map_tool_on_guide (im_tool, coords, display))
+ if (state & gimp_get_extend_selection_mask ())
{
- gimp_tool_control_halt (tool->control);
+ GimpAlignmentType alignment;
- if (state & gimp_get_extend_selection_mask ())
+ /* switch side */
+ switch (options->preview_alignment)
{
- GimpAlignmentType alignment;
-
- /* switch side */
- switch (options->preview_alignment)
- {
- case GIMP_ALIGN_LEFT: alignment = GIMP_ALIGN_RIGHT; break;
- case GIMP_ALIGN_RIGHT: alignment = GIMP_ALIGN_LEFT; break;
- case GIMP_ALIGN_TOP: alignment = GIMP_ALIGN_BOTTOM; break;
- case GIMP_ALIGN_BOTTOM: alignment = GIMP_ALIGN_TOP; break;
- default:
- g_return_if_reached ();
- }
-
- g_object_set (options, "preview-alignment", alignment, NULL);
+ case GIMP_ALIGN_LEFT: alignment = GIMP_ALIGN_RIGHT; break;
+ case GIMP_ALIGN_RIGHT: alignment = GIMP_ALIGN_LEFT; break;
+ case GIMP_ALIGN_TOP: alignment = GIMP_ALIGN_BOTTOM; break;
+ case GIMP_ALIGN_BOTTOM: alignment = GIMP_ALIGN_TOP; break;
+ default:
+ g_return_if_reached ();
}
- else if (state & gimp_get_toggle_behavior_mask ())
- {
- GimpItem *item = GIMP_ITEM (im_tool->drawable);
- GimpAlignmentType alignment;
- gdouble position;
- /* switch orientation */
- switch (options->preview_alignment)
- {
- case GIMP_ALIGN_LEFT: alignment = GIMP_ALIGN_TOP; break;
- case GIMP_ALIGN_RIGHT: alignment = GIMP_ALIGN_BOTTOM; break;
- case GIMP_ALIGN_TOP: alignment = GIMP_ALIGN_LEFT; break;
- case GIMP_ALIGN_BOTTOM: alignment = GIMP_ALIGN_RIGHT; break;
- default:
- g_return_if_reached ();
- }
+ g_object_set (options, "preview-alignment", alignment, NULL);
+ }
+ else if (state & gimp_get_toggle_behavior_mask ())
+ {
+ GimpItem *item = GIMP_ITEM (im_tool->drawable);
+ GimpAlignmentType alignment;
+ gdouble position;
- if (alignment == GIMP_ALIGN_LEFT ||
- alignment == GIMP_ALIGN_RIGHT)
- {
- position = ((coords->x - gimp_item_get_offset_x (item)) /
- gimp_item_get_width (item));
- }
- else
- {
- position = ((coords->y - gimp_item_get_offset_y (item)) /
- gimp_item_get_height (item));
- }
+ /* switch orientation */
+ switch (options->preview_alignment)
+ {
+ case GIMP_ALIGN_LEFT: alignment = GIMP_ALIGN_TOP; break;
+ case GIMP_ALIGN_RIGHT: alignment = GIMP_ALIGN_BOTTOM; break;
+ case GIMP_ALIGN_TOP: alignment = GIMP_ALIGN_LEFT; break;
+ case GIMP_ALIGN_BOTTOM: alignment = GIMP_ALIGN_RIGHT; break;
+ default:
+ g_return_if_reached ();
+ }
- g_object_set (options,
- "preview-alignment", alignment,
- "preview-position", CLAMP (position, 0.0, 1.0),
- NULL);
+ if (alignment == GIMP_ALIGN_LEFT ||
+ alignment == GIMP_ALIGN_RIGHT)
+ {
+ position = ((coords->x - gimp_item_get_offset_x (item)) /
+ gimp_item_get_width (item));
}
else
{
- gimp_guide_tool_start_edit (tool, display,
- im_tool->percent_guide);
+ position = ((coords->y - gimp_item_get_offset_y (item)) /
+ gimp_item_get_height (item));
}
+
+ g_object_set (options,
+ "preview-alignment", alignment,
+ "preview-position", CLAMP (position, 0.0, 1.0),
+ NULL);
+ }
+ else
+ {
+ gimp_guide_tool_start_edit (tool, display,
+ im_tool->percent_guide);
}
}
}
@@ -636,43 +631,42 @@ gimp_image_map_tool_oper_update (GimpTool *tool,
gboolean proximity,
GimpDisplay *display)
{
- GIMP_TOOL_CLASS (parent_class)->cursor_update (tool, coords, state,
- display);
+ GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
- if (! gimp_color_tool_is_enabled (GIMP_COLOR_TOOL (tool)))
- {
- GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
+ gimp_tool_pop_status (tool, display);
- gimp_tool_pop_status (tool, display);
+ if (! gimp_image_map_tool_on_guide (im_tool, coords, display))
+ {
+ GIMP_TOOL_CLASS (parent_class)->oper_update (tool, coords, state,
+ proximity, display);
+ }
+ else
+ {
+ GdkModifierType extend_mask = gimp_get_extend_selection_mask ();
+ GdkModifierType toggle_mask = gimp_get_toggle_behavior_mask ();
+ gchar *status = NULL;
- if (gimp_image_map_tool_on_guide (im_tool, coords, display))
+ if (state & extend_mask)
{
- GdkModifierType extend_mask = gimp_get_extend_selection_mask ();
- GdkModifierType toggle_mask = gimp_get_toggle_behavior_mask ();
- gchar *status = NULL;
-
- if (state & extend_mask)
- {
- status = g_strdup (_("Click to switch the original and filtered sides"));
- }
- else if (state & toggle_mask)
- {
- status = g_strdup (_("Click to switch between vertical and horizontal"));
- }
- else
- {
- status = gimp_suggest_modifiers (_("Click to move the split guide"),
- (extend_mask | toggle_mask) & ~state,
- _("%s: switch original and filtered"),
- _("%s: switch horizontal and vertical"),
- NULL);
- }
+ status = g_strdup (_("Click to switch the original and filtered sides"));
+ }
+ else if (state & toggle_mask)
+ {
+ status = g_strdup (_("Click to switch between vertical and horizontal"));
+ }
+ else
+ {
+ status = gimp_suggest_modifiers (_("Click to move the split guide"),
+ (extend_mask | toggle_mask) & ~state,
+ _("%s: switch original and filtered"),
+ _("%s: switch horizontal and vertical"),
+ NULL);
+ }
- if (proximity)
- gimp_tool_push_status (tool, display, "%s", status);
+ if (proximity)
+ gimp_tool_push_status (tool, display, "%s", status);
- g_free (status);
- }
+ g_free (status);
}
}
@@ -682,20 +676,19 @@ gimp_image_map_tool_cursor_update (GimpTool *tool,
GdkModifierType state,
GimpDisplay *display)
{
- GIMP_TOOL_CLASS (parent_class)->cursor_update (tool, coords, state,
- display);
+ GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
- if (! gimp_color_tool_is_enabled (GIMP_COLOR_TOOL (tool)))
+ if (! gimp_image_map_tool_on_guide (im_tool, coords, display))
{
- GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
-
- if (gimp_image_map_tool_on_guide (im_tool, coords, display))
- {
- gimp_tool_set_cursor (tool, display,
- GIMP_CURSOR_MOUSE,
- GIMP_TOOL_CURSOR_HAND,
- GIMP_CURSOR_MODIFIER_MOVE);
- }
+ GIMP_TOOL_CLASS (parent_class)->cursor_update (tool, coords, state,
+ display);
+ }
+ else
+ {
+ gimp_tool_set_cursor (tool, display,
+ GIMP_CURSOR_MOUSE,
+ GIMP_TOOL_CURSOR_HAND,
+ GIMP_CURSOR_MODIFIER_MOVE);
}
}
@@ -1127,39 +1120,6 @@ gimp_image_map_tool_move_guide (GimpImageMapTool *im_tool)
}
}
-static gboolean
-gimp_image_map_tool_on_guide (GimpImageMapTool *im_tool,
- const GimpCoords *coords,
- GimpDisplay *display)
-{
- GimpDisplayShell *shell = gimp_display_get_shell (display);
-
- if (im_tool->image_map &&
- im_tool->percent_guide &&
- gimp_display_shell_get_show_guides (shell))
- {
- const gint snap_distance = display->config->snap_distance;
- GimpOrientationType orientation;
- gint position;
-
- orientation = gimp_guide_get_orientation (im_tool->percent_guide);
- position = gimp_guide_get_position (im_tool->percent_guide);
-
- if (orientation == GIMP_ORIENTATION_HORIZONTAL)
- {
- if (fabs (coords->y - position) <= FUNSCALEY (shell, snap_distance))
- return TRUE;
- }
- else
- {
- if (fabs (coords->x - position) <= FUNSCALEX (shell, snap_distance))
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
static void
gimp_image_map_tool_guide_removed (GimpGuide *guide,
GimpImageMapTool *im_tool)
@@ -1233,6 +1193,9 @@ gimp_image_map_tool_response (GimpToolGui *gui,
}
}
+
+/* public functions */
+
void
gimp_image_map_tool_get_operation (GimpImageMapTool *im_tool)
{
@@ -1434,6 +1397,45 @@ gimp_image_map_tool_edit_as (GimpImageMapTool *im_tool,
gimp_image_map_tool_reset (GIMP_IMAGE_MAP_TOOL (new_tool));
}
+gboolean
+gimp_image_map_tool_on_guide (GimpImageMapTool *im_tool,
+ const GimpCoords *coords,
+ GimpDisplay *display)
+{
+ GimpDisplayShell *shell;
+
+ g_return_val_if_fail (GIMP_IS_IMAGE_MAP_TOOL (im_tool), FALSE);
+ g_return_val_if_fail (coords != NULL, FALSE);
+ g_return_val_if_fail (GIMP_IS_DISPLAY (display), FALSE);
+
+ shell = gimp_display_get_shell (display);
+
+ if (im_tool->image_map &&
+ im_tool->percent_guide &&
+ gimp_display_shell_get_show_guides (shell))
+ {
+ const gint snap_distance = display->config->snap_distance;
+ GimpOrientationType orientation;
+ gint position;
+
+ orientation = gimp_guide_get_orientation (im_tool->percent_guide);
+ position = gimp_guide_get_position (im_tool->percent_guide);
+
+ if (orientation == GIMP_ORIENTATION_HORIZONTAL)
+ {
+ if (fabs (coords->y - position) <= FUNSCALEY (shell, snap_distance))
+ return TRUE;
+ }
+ else
+ {
+ if (fabs (coords->x - position) <= FUNSCALEX (shell, snap_distance))
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
GtkWidget *
gimp_image_map_tool_dialog_get_vbox (GimpImageMapTool *im_tool)
{
diff --git a/app/tools/gimpimagemaptool.h b/app/tools/gimpimagemaptool.h
index a103c52..969e8ed 100644
--- a/app/tools/gimpimagemaptool.h
+++ b/app/tools/gimpimagemaptool.h
@@ -107,15 +107,17 @@ struct _GimpImageMapToolClass
GType gimp_image_map_tool_get_type (void) G_GNUC_CONST;
-void gimp_image_map_tool_preview (GimpImageMapTool *im_tool);
-
void gimp_image_map_tool_get_operation (GimpImageMapTool *im_tool);
+void gimp_image_map_tool_preview (GimpImageMapTool *im_tool);
void gimp_image_map_tool_edit_as (GimpImageMapTool *im_tool,
const gchar *new_tool_id,
GimpConfig *config);
-/* accessors for derived classes */
+gboolean gimp_image_map_tool_on_guide (GimpImageMapTool *im_tool,
+ const GimpCoords *coords,
+ GimpDisplay *display);
+
GtkWidget * gimp_image_map_tool_dialog_get_vbox (GimpImageMapTool *im_tool);
GtkWidget * gimp_image_map_tool_add_color_picker (GimpImageMapTool *im_tool,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]