Highlight the handle for the first vertex in the Free Select Tool even
with button1 down, since releasing the button on the first point will
close the polygon, so it's a significant state which we must give
feedback for.
Right now the Free Select Tool vertex handles are shown when the
cursor is in the proximity. Extend this a bit, so when the cursor is
_on_ a vertex handle, fill it completely. See bug 598454.
Make sure we never call gimp_free_select_tool_remove_last_segment()
with priv->n_segment_indices being negative, and increase robustness
of the code in general.
Note that we always halt the tool when backspace is pressed and there
are no vertices left. This is to minimize the risk of ending up in an
invalid tool state.
* app/tools/tools-enums.[ch]: add enum GimpButtonPressType which can
be { NORMAL, DOUBLE, TRIPLE }
* app/tools/gimptool.[ch]: add press_type paramater to GimpTool::button_press()
* app/tools/gimp*tool.c
* app/tools/tool_manager.[ch]: changed accordingly.
* app/tools/gimptoolcontrol.[ch]: add members and API so tools can choose
to receive double and triple clicks.
* app/display/gimpdisplayshell-callbacks.c (gimp_display_shell_tool_events):
dispatch double and triple clicks to tools if they want them, and if they
became active by the preceding normal button press.
2009-01-17 Michael Natterer <mitch@gimp.org>
* all files with a GPL header and all COPYING files:
Change licence to GPLv3 (and to LGPLv3 for libgimp).
Cleaned up some copyright headers and regenerated the parsers in
the ImageMap plugin.
svn path=/trunk/; revision=27913
2008-10-09 Michael Natterer <mitch@gimp.org>
Add GEGL_CFLAGS and #includes as if gimpdrawable.h and gimpimage.h
had a GEGL dependency (they will have in the next commit, but I
wanted to keep the commit separate).
* app/dialogs/Makefile.am
* app/file/Makefile.am
* app/gui/Makefile.am
* app/menus/Makefile.am
* app/paint/Makefile.am
* app/plug-in/Makefile.am
* app/text/Makefile.am
* app/vectors/Makefile.am
* app/widgets/Makefile.am
* app/xcf/Makefile.am: add GEGL_CFLAGS.
* app/actions/*.c
* app/core/*.c
* app/dialogs/*.c
* app/display/*.c
* app/file/*.c
* app/gui/*.c
* app/menus/*.c
* app/paint/*.c
* app/pdb/gimppdb-utils.c
* app/pdb/gimpprocedure.c
* app/plug-in/*.c
* app/text/*.c
* app/tools/*.c
* app/vectors/*.c
* app/widgets/*.c
* app/xcf/*.c: add <gegl.h> or replace <glib-object.h> by <gegl.h>
to all files which include a drawable subclass or gimpimage.h
* tools/pdbgen/app.pl: include <gegl.h> instead of <glib-object.h>
in all generated files.
* app/pdb/*-cmds.c: regenerated.
* data/images/gimp-splash.png: the goat is still sleeping.
By Aurore Derriennic.
svn path=/trunk/; revision=27202
2008-08-20 Michael Natterer <mitch@gimp.org>
Bug 496772 – Position shown in the statusbar needs more
precision (for some tools)
* app/display/display-enums.[ch]: add enum GimpCursorPrecision
which can be one of { PIXEL_CENTER, PIXEL_BORDER, SUBPIXEL }.
* app/display/gimpdisplayshell-cursor.[ch]: add "precision"
parameter to gimp_display_shell_update_cursor() and pass it
on to the statusbar.
* app/display/gimpstatusbar.[ch]: add "precision" parameters to
the cursor coordinates APIs, offset the passed coords accordingly
and display them with one decimal point if SUBPIXEL is requested
and the display's unit is PIXEL. Keep a second floating-point
format string around at any time.
* app/tools/gimptoolcontrol.[ch]: add a "precision" member and API
so tools can configure the precision they need. Defalt to
PIXEL_CENTER since that's right for almost all tools.
* app/display/gimpdisplayshell-callbacks.c: pass the tool's
precision to gimp_display_shell_update_cursor().
* app/tools/gimptool.[ch]: add "precision" parameter to
gimp_tool_push_status_coords() and pass it on to the statusbar.
* app/tools/gimpaligntool.c
* app/tools/gimpblendtool.c
* app/tools/gimpcolortool.c
* app/tools/gimpcroptool.c
* app/tools/gimpeditselectiontool.c
* app/tools/gimpfliptool.c
* app/tools/gimpfreeselecttool.c
* app/tools/gimpmovetool.c
* app/tools/gimppainttool.c
* app/tools/gimpperspectiveclonetool.c
* app/tools/gimprectangleselecttool.c
* app/tools/gimprectangletool.c
* app/tools/gimptransformtool.c
* app/tools/gimpvectortool.c: set precision in init() where
needed. Adjust the precision in the fly when needed, e.g. while
moving guides or when toggling hard-edge on paint tools. Also pass
an appropriate precision to gimp_tool_push_status_coords(), which
is not always the tool's precision as used for cursor display.
svn path=/trunk/; revision=26681
2008-06-23 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.c
(gimp_free_select_tool_modifier_key): Make switching selection
mode through modifier keys work again.
svn path=/trunk/; revision=25978
2008-06-21 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.c
(gimp_free_select_tool_update_motion): When applying angle
constraints on the first segment vertex, base on the last segment
vertex rather than not applying any constraint at all.
svn path=/trunk/; revision=25972
2008-06-20 Martin Nordholts <martinn@svn.gnome.org>
Make angle constraints with the Free Select Tool by using Ctrl
work also when moving vertices, not only when creating new ones.
* app/tools/gimpfreeselecttool.c
(gimp_free_select_tool_active_modifier_key): Implement.
(gimp_free_select_tool_update_motion): Put motion logic here so we
can apply it from both _motion and _active_modifier_key.
(gimp_free_select_tool_modifier_key): Ignore key presses from
another display.
svn path=/trunk/; revision=25969
* app/tools/gimpfreeselecttool.c: Don't alloc/free
saved_points_(lower|higher)_segment on each move, instead realloc
on demand and free on tool destruction, just as we do e.g. for
points.
svn path=/trunk/; revision=25968
2008-06-20 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.c: Remove
n_saved_points_(lower|higher)_segment, we don't need them.
svn path=/trunk/; revision=25967
2008-05-25 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.c
(gimp_free_select_tool_prepare_for_move)
(gimp_free_select_tool_revert_to_saved_state)
(gimp_free_select_tool_move_segment_vertex_to): Handle the special
case when there is only one point, so that moving segment vertices
works even if there only is one.
svn path=/trunk/; revision=25798
2008-05-25 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.c: For completeness, comment on
some uncommented instance-private variables.
svn path=/trunk/; revision=25797
2008-05-25 Martin Nordholts <martinn@svn.gnome.org>
Added support for supressing handles by holding Shift in the Free
Select Tool so that new segments can be created where handles
would otherwise obstruct.
* app/tools/gimpfreeselecttool.c
(gimp_free_select_tool_handle_segment_selection): Renamed, and
only select segment vertices if handles are not supressed.
(gimp_free_select_tool_modifier_key): Make Shift toggle supressing
handles.
(gimp_free_select_tool_draw): Don't draw the handles if they are
supressed.
(gimp_free_select_tool_should_close): Only accept distance from
start point as a reason to close the polygon if the handles are
not supressed.
svn path=/trunk/; revision=25795
2008-05-25 Martin Nordholts <martinn@svn.gnome.org>
Added support for double-clicking in the Free Select Tool. A
double-click will commit the selection.
* app/tools/gimpfreeselecttool.c
(gimp_free_select_tool_get_double_click_info): Helper function to
retrive GTK+ double-click settings.
(gimp_free_select_tool_should_close): Take double-clicking into
account.
(gimp_free_select_tool_revert_to_saved_state): Bail out if needed.
(gimp_free_select_tool_button_release): Pass on time when
clicking.
(gimp_free_select_tool_handle_click): Pass time to this function,
and modify it to handle double-clicks.
svn path=/trunk/; revision=25794
2008-05-25 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.c
(gimp_free_select_tool_handle_click): A click might have slightly
adjusted the points, so revert before doing the selection.
(gimp_free_select_tool_revert_to_saved_state): Move definition up
a bit.
svn path=/trunk/; revision=25792
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
2008-05-23 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.c
(gimp_free_select_tool_draw): Draw handles within HANDLE_SIZE * 7
distance from cursor instead of only showing the hovered handle.
(gimp_free_select_tool_oper_update): Remember last coordinates
given here, so we can do above calculations.
svn path=/trunk/; revision=25782
2008-05-22 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.c: Base a start of a new segment on
the pending point, and enable 15 degree constraints on the pending
point when Ctrl is being held down.
svn path=/trunk/; revision=25761
2008-05-22 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.[ch]
* app/tools/gimpforegroundselecttool.c: Fix that some
gimp_free_select_tool_-functions had the wrong name.
svn path=/trunk/; revision=25759
2008-05-22 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.c: Remember the selection operation
in use when the tool was started, and use that when doing the
selection. Improvements are still to be made with regards to
synchronizing the tool options with the selection operation
actually used.
svn path=/trunk/; revision=25756
2008-05-22 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.c
(gimp_free_select_tool_cursor_update): Don't return in the middle
of the function.
svn path=/trunk/; revision=25746
2008-05-21 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.[ch]: Don't expose implementation
details.
* app/tools/gimpforegroundselecttool.c
(gimp_foreground_select_tool_select): Use new
gimp_free_select_get_points() functions since we don't know
anything about how the Free Select Tool is implemented any longer.
svn path=/trunk/; revision=25742
2008-05-21 Martin Nordholts <martinn@svn.gnome.org>
Made the Foreground Select Tool work again.
* app/tools/gimpforegroundselecttool.c
(gimp_foreground_select_tool_control): Set tool->display =
NULL when halting the tool.
(gimp_foreground_select_tool_button_press): Only activate the
tool control if it is not active (it might be actived already
by the Free Select Tool).
* app/tools/gimpfreeselecttool.c
(gimp_free_select_tool_commit): Don't _halt explicitly
here. If a tool implementation wants to halt in this
situation, let them do that in their
GimpFreeSelectTool::select() instead.
svn path=/trunk/; revision=25735
2008-05-21 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.c
(gimp_free_select_tool_status_update): Slightly improve one of the
status bar messages.
svn path=/trunk/; revision=25733
2008-05-20 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimpfreeselecttool.c: Increase handle size to 12
pixels (the same size as for the Paths Tool).
svn path=/trunk/; revision=25722
2008-05-20 Martin Nordholts <martinn@svn.gnome.org>
Added statusbar help-messages for the Free Select Tool.
* app/tools/gimpfreeselecttool.c
(gimp_free_select_tool_oper_update): Don't bail out if
tool->display is NULL, instead modify the underlying logic to deal
with this.
svn path=/trunk/; revision=25721
2008-05-18 Martin Nordholts <martinn@svn.gnome.org>
Merged the Polygon Select Tool capabilities with the Free Select
Tool. Among the things still to do is improved help texts, more
suitable graphics, and cursor mangement, but the core
functionality is in place. Thanks to Alexia Death for initial
testing. It will also be neccesary to do some work to adapt the
Foreground Select Tool to the new Free Select Tool implementation.
Quick instructions on how the tool works:
o A click adds a polygonal segment, a drag adds a free-hand
segment
o Return-key commits, Escape-key cancels, Backspace-key removes
last segment
o You can grab and move segment vertices
o You can cancel both a move, and the creation of a segment
* app/tools/gimpfreeselecttool.[ch]: More or less
reimplemented. We keep a sequential array of all the points in the
polygon (including the free segments), and we have another array
with point indices that we use to represent the segments. On top
of this we have a few helper functions that tries to abstract away
the pretty raw nature of the implementation.
* app/tools/gimpforegroundselecttool.[ch]: Keep track on its own
last_coord, and adjust to the new implementation of the Free
Select Tool. Still needs some work, for example handling that the
Free Select Tool now resets GimpTool::display.
(gimp_foreground_select_tool_key_press): Pass on key event to
parent class when appropriate. (Bails out too early though...)
svn path=/trunk/; revision=25693
2008-02-26 Michael Natterer <mitch@gimp.org>
* app/display/gimpdisplayshell-transform.[ch]
(gimp_display_shell_transform_points)
* app/tools/gimpdrawtool.[ch] (gimp_draw_tool_draw_lines): take
arrays of GimpVector2 instead of arrays of gdouble to represent
the input points.
* app/display/gimpdisplayshell-draw.c
* app/tools/gimppolygonselecttool.c
* app/tools/gimpfreeselecttool.c: don't cast the GimpVector2 arrays
to double arrays when passing them to above functions.
* app/tools/gimpiscissorstool.c: create a temporary GimpVector2
array instead of a temporary gdouble array.
svn path=/trunk/; revision=24979
2007-03-10 Michael Natterer <mitch@gimp.org>
* app/tools/tools-enums.[ch] (enum GimpButtonReleaseType): added
value GIMP_BUTTON_RELEASE_NO_MOTION.
* app/tools/gimptool.[ch]: when click events are requested and the
click was too long for a "click" event, send a NO_MOTION event if
the pointer didn't move at all.
* app/tools/gimpbucketfilltool.c: treat NO_MOTION as tool
confirmation too.
* app/tools/gimpfreeselecttool.c: request click events and treat
both CLICK and NO_MOTION as tool confirmation.
* app/tools/gimprectangletool.c: ignore NO_MOTION.
svn path=/trunk/; revision=22091