Make moving selection mask/pixels within the selection work for the Free
2008-05-25 Martin Nordholts <martinn@svn.gnome.org> Make moving selection mask/pixels within the selection work for the Free Select Tool, as well as interaction with any resulting floating selection. * app/tools/gimpfreeselecttool.c (gimp_free_select_tool_handle_click): Handle floating selections. (gimp_free_select_tool_status_update): Show the inital instructions until there are 3 or more segment vertices, rather than 3 or more points. (gimp_free_select_tool_oper_update): When there is no active tool, show selection tool status bar help messages instead of the tool specific ones. (gimp_free_select_tool_delegate_button_press): New helper function to decide wether to delgate operation to the selection tool. (gimp_free_select_tool_button_press): Handle delegation to the selection tool. svn path=/trunk/; revision=25791
This commit is contained in:
parent
d43f8bb4d5
commit
820379250b
2 changed files with 93 additions and 11 deletions
22
ChangeLog
22
ChangeLog
|
|
@ -1,3 +1,25 @@
|
|||
2008-05-25 Martin Nordholts <martinn@svn.gnome.org>
|
||||
|
||||
Make moving selection mask/pixels within the selection work for
|
||||
the Free Select Tool, as well as interaction with any resulting
|
||||
floating selection.
|
||||
|
||||
* app/tools/gimpfreeselecttool.c
|
||||
(gimp_free_select_tool_handle_click): Handle floating selections.
|
||||
(gimp_free_select_tool_status_update): Show the inital
|
||||
instructions until there are 3 or more segment vertices, rather
|
||||
than 3 or more points.
|
||||
|
||||
(gimp_free_select_tool_oper_update): When there is no active tool,
|
||||
show selection tool status bar help messages instead of the tool
|
||||
specific ones.
|
||||
|
||||
(gimp_free_select_tool_delegate_button_press): New helper function
|
||||
to decide wether to delgate operation to the selection tool.
|
||||
|
||||
(gimp_free_select_tool_button_press): Handle delegation to the
|
||||
selection tool.
|
||||
|
||||
2008-05-24 Michael Natterer <mitch@gimp.org>
|
||||
|
||||
* app/tools/gimppaintoptions-gui.c: fix dynamics grid label
|
||||
|
|
|
|||
|
|
@ -710,18 +710,27 @@ gimp_free_select_tool_handle_click (GimpFreeSelectTool *fst,
|
|||
GimpCoords *coords,
|
||||
GimpDisplay *display)
|
||||
{
|
||||
/* First finish of the line segment if no point was grabbed */
|
||||
if (! gimp_free_select_tool_is_point_grabbed (fst))
|
||||
/* If there is a floating selection, anchor it */
|
||||
if (gimp_image_floating_sel (display->image))
|
||||
{
|
||||
gimp_free_select_tool_finish_line_segment (fst);
|
||||
floating_sel_anchor (gimp_image_floating_sel (display->image));
|
||||
gimp_free_select_tool_halt (fst);
|
||||
}
|
||||
|
||||
/* After the segments are up to date, see if it's commiting time */
|
||||
if (gimp_free_select_tool_should_close (fst,
|
||||
display,
|
||||
coords))
|
||||
else
|
||||
{
|
||||
gimp_free_select_tool_commit (fst, display);
|
||||
/* First finish of the line segment if no point was grabbed */
|
||||
if (! gimp_free_select_tool_is_point_grabbed (fst))
|
||||
{
|
||||
gimp_free_select_tool_finish_line_segment (fst);
|
||||
}
|
||||
|
||||
/* After the segments are up to date, see if it's commiting time */
|
||||
if (gimp_free_select_tool_should_close (fst,
|
||||
display,
|
||||
coords))
|
||||
{
|
||||
gimp_free_select_tool_commit (fst, display);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -841,6 +850,36 @@ gimp_free_select_tool_prepare_for_move (GimpFreeSelectTool *fst)
|
|||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_free_select_tool_delegate_button_press (GimpFreeSelectTool *fst,
|
||||
GimpCoords *coords,
|
||||
GimpDisplay *display)
|
||||
{
|
||||
GimpTool *tool = GIMP_TOOL (fst);
|
||||
gboolean button_press_delegated = FALSE;
|
||||
|
||||
/* Only consider delegating if the tool is not active */
|
||||
if (tool->display == NULL)
|
||||
{
|
||||
tool->display = display;
|
||||
gimp_tool_control_activate (tool->control);
|
||||
|
||||
button_press_delegated =
|
||||
gimp_selection_tool_start_edit (GIMP_SELECTION_TOOL (fst), coords);
|
||||
|
||||
if (! button_press_delegated)
|
||||
{
|
||||
/* Nope, the selection mask edit stuff was not interested, reset
|
||||
* the situation
|
||||
*/
|
||||
gimp_tool_control_halt (tool->control);
|
||||
tool->display = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return button_press_delegated;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_free_select_tool_status_update (GimpFreeSelectTool *fst,
|
||||
GimpDisplay *display,
|
||||
|
|
@ -867,7 +906,7 @@ gimp_free_select_tool_status_update (GimpFreeSelectTool *fst,
|
|||
status_text = _("Click-Drag to move segment vertex");
|
||||
}
|
||||
}
|
||||
else if (priv->n_points >= 3)
|
||||
else if (priv->n_segment_indices >= 3)
|
||||
{
|
||||
status_text = _("Return commits, Escape cancels, Backspace removes last segment");
|
||||
}
|
||||
|
|
@ -963,7 +1002,18 @@ gimp_free_select_tool_oper_update (GimpTool *tool,
|
|||
|
||||
gimp_draw_tool_resume (GIMP_DRAW_TOOL (tool));
|
||||
|
||||
gimp_free_select_tool_status_update (fst, display, coords, proximity);
|
||||
if (tool->display == NULL)
|
||||
{
|
||||
GIMP_TOOL_CLASS (parent_class)->oper_update (tool,
|
||||
coords,
|
||||
state,
|
||||
proximity,
|
||||
display);
|
||||
}
|
||||
else
|
||||
{
|
||||
gimp_free_select_tool_status_update (fst, display, coords, proximity);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -1003,6 +1053,16 @@ gimp_free_select_tool_button_press (GimpTool *tool,
|
|||
GimpFreeSelectTool *fst = GIMP_FREE_SELECT_TOOL (tool);
|
||||
Private *priv = GET_PRIVATE (fst);
|
||||
|
||||
/* First of all handle delegation to the selection mask edit logic
|
||||
* if appropriate
|
||||
*/
|
||||
if (gimp_free_select_tool_delegate_button_press (fst,
|
||||
coords,
|
||||
display))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
gimp_draw_tool_pause (draw_tool);
|
||||
|
||||
gimp_free_select_tool_update_button_state (fst, state);
|
||||
|
|
|
|||
Loading…
Reference in a new issue