The next commit is going to perform clipping when transforming
Bezier strokes. When parts of the stroke get clipped, the result
consists of multiple strokes.
Adapt gimp_stroke_transform() in preparation, to allow for the
transformation to result in multiple strokes, by adding a GQueue*
parameter that receives the transformed strokes.
For convenience, we allow passing NULL as the argument, in which
case the current behavior is maintained. However, NULL should only
be passed when clipping is known to be unnecessary.
Adapt the rest of the code for the change.
Note that this technically affects public API: existing stroke
object IDs now become invalid after transforming their containing
vectors object. However, this is unlikely to affect code in
practice.
They are unreliable because every type checking cast discards them,
they are useless anyway, visual clutter, added inconsistently, and
generally suck. Wanted to do this a long time ago, it was a bad idea
in the first place.
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-05-12 Simon Budig <simon@gimp.org>
* app/vectors/gimpvectors.[ch]
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpbezierstroke.c: Implement functionality to
get a bezier description a la moveto/curveto/closepath.
* app/vectors/vectors-types.h: implement an evil hack to avoid
the inclusion of cairo.h in most C files...
* app/vectors/Makefile.am: link against cairo
* app/widgets/gimpviewrenderervectors.c: use the new functionality
for preview rendering.
svn path=/trunk/; revision=25645
2006-11-20 Simon Budig <simon@gimp.org>
* app/vectors/gimpstroke.[ch]
* tools/pdbgen/pdb/vectors.pdb
* plug-ins/pygimp/pygimp-vectors.c: Applied patch from
Joao S. O. Bueno Calligaris that adds some missing transformations
to the PDB-API for strokes. Fixes bug #129598.
* app/pdb/internal_procs.c
* app/pdb/vectors_cmds.c
* libgimp/gimpvectors_pdb.[ch]: regenerated.
2006-10-26 Simon Budig <simon@gimp.org>
* app/vectors/gimpstroke-new.h: New header file for the
GimpStroke factory.
* app/vectors/Makefile.am
* app/vectors/gimpstroke.h: changed accordingly.
* tools/pdbgen/pdb/vectors.pdb: changed accordingly plus a bugfix.
* app/pdb/vectors_cmds.c: regenerated.
2005-12-28 Simon Budig <simon@gimp.org>
* tools/pdbgen/pdb/image.pdb
* tools/pdbgen/pdb/vectors.pdb: Added new functions for the vectors
PDB API. Minor cleanups. Please try to use them and test:
gimp_image_get_active_vectors
gimp_image_set_active_vectors
gimp_image_get_vectors_by_tattoo
gimp_image_lower_vectors
gimp_image_lower_vectors_to_bottom
gimp_image_raise_vectors
gimp_image_raise_vectors_to_top
gimp_image_remove_vectors
gimp_vectors_get_locked
gimp_vectors_set_locked
gimp_vectors_get_name
gimp_vectors_set_name
gimp_vectors_get_visible
gimp_vectors_set_visible
gimp_vectors_stroke_get_length
gimp_vectors_stroke_remove
gimp_vectors_stroke_scale
* libgimp/gimp.[ch]: renamed the unused d_path to d_vectors and
use it. Untabbified.
* devel-docs/libgimp/tmpl/gimpvectors.sgml
* app/pdb/image_cmds.c
* app/pdb/internal_procs.c
* app/pdb/vectors_cmds.c
* libgimp/gimpimage_pdb.[ch]
* libgimp/gimpvectors_pdb.[ch]: Regenerated
* app/vectors/gimpstroke.h: minor cleanup.
2005-10-01 Simon Budig <simon@gimp.org>
* app/core/gimpcoords.[ch]: Added small utility function for the
manhattan metric.
* app/vectors/gimpstroke.[ch]: virtualized stubs provided by mitch
* app/vectors/gimpbezierstroke.c: Reworked some internal functions
to make it easier to access the parameters for the coordinates of an
stroke interpolation. Simplified the straight line test. Added an
implementation of the _nearest_tangent_get () function that does
not yet seem to work properly. Not sure where the problem is.
2005-09-30 Michael Natterer <mitch@gimp.org>
* app/vectors/gimpstroke.[ch]: added stubs of two new snapping
functions.
* app/core/gimpimage-snap.c: removed their #defines here.
2005-04-14 Simon Budig <simon@gimp.org>
Started a PDB api for vectors/strokes. Not yet functional, this
commit is to get the infrastructure up and running.
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpvectors.[ch]: Added IDs to the strokes
* tools/pdbgen/pdb.pl: corrected "vectors" type, deleted "path" type.
* tools/pdbgen/pdb/image.pdb: added gimp_image_get_vectors()
* tools/pdbgen/pdb/vectors.pdb: New file for the vectors API
(just a stub for now)
* tools/pdbgen/Makefile.am: Added vectors.pdb
* tools/pdbgen/groups.pl: regenerated.
* plug-ins/script-fu/siod-wrapper.c: Enable the Path/Vectors type.
* libgimp/gimpvectors_pdb.[ch]
* app/pdb/vectors_cmds.c: new autogenerated files.
* libgimp/Makefile.am
* app/pdb/Makefile.am: Added new autogenerated file.
* libgimp/gimp_pdb.h
* libgimp/gimpimage_pdb.[ch]
* app/pdb/image_cmds.c
* app/pdb/internal_procs.c: regenerated.
2004-12-14 Simon Budig <simon@gimp.org>
* app/vectors/gimpstroke.[ch]: Changed the "gradient" parameter
to "slope" to make it more clear what the returned result is (which
was wrong earlier).
* tools/pdbgen/pdb/paths.pdb: changed accordingly
* app/pdb/paths_cmds.c
* libgimp/gimppaths_pdb.[ch]
* devel-docs/libgimp/tmpl/gimppaths.sgml: regenerated.
Fixes bug #161274.
2004-06-30 Simon Budig <simon@gimp.org>
* app/vectors/gimpstroke.[ch]
* tools/pdbgen/pdb/paths.pdb: Applied a modified patch from
Geert Jordaens that implements the gimp-path-get-point-at-dist
PDB function (fixes bug #138754).
* app/pdb/paths_cmds.c: regenerated
2003-09-18 Simon Budig <simon@gimp.org>
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpbezierstroke.c: (gimp_stroke_nearest_point_get)
added the endpoint of the segment to the list of returned values.
* app/tools/gimpdrawtool.[ch]: (gimp_draw_tool_on_vectors_curve)
return the endpoint also.
* app/tools/gimpvectortool.[ch]: Use that to activate the
to-be-changed anchors when dragging on the curve directly.
* app/tools/gimpmovetool.[ch]: changed accordingly.
2003-09-17 Simon Budig <simon@gimp.org>
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpvectors.[ch]: Changed gimp_*_anchor_select to
accept the selection state as an argument.
* app/tools/gimpdrawtool.[ch]: Added "exclusive" boolean parameter
to gimp_draw_tool_on_vectors_handle(), so that you can specify
that you just get exactly the type of anchor you want to have.
* app/tools/gimpvectortool.[ch]: Handling of multiple selected
anchors: Shift-Clicking in Extend mode selects them, you can
move them together.
2003-09-11 Sven Neumann <sven@gimp.org>
* app/core/gimpdrawable-transform-utils.[ch]: added new function
gimp_drawable_transform_matrix_flip().
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpvectors.c: don't push the complex GimpItem
transformation API down to GimpStroke. Instead setup the matrices
in GimpVectors and use a simpler API for GimpStroke.
* app/vectors/gimpvectors-import.c: changed accordingly.
* app/vectors/gimpvectors-export.c: close the <path> element.
2003-09-09 Simon Budig <simon@gimp.org>
* app/vectors/gimpvectors-compat.[ch]: Made
gimp_vectors_compat_get_points accept more paths gracefully. It
now is sufficient if there is up to one open stroke in the
vectors object - it does not have to be the last one.
Added function to determine if all vectors can be saved in
compatibility mode.
* app/vectors/gimpanchor.[ch]: Made GimpAnchor a boxed type.
* app/vectors/gimpstroke.[ch]: Add two properties to gimpstroke:
"closed" and "control-points" (the latter is
G_PARAM_CONSTRUCT_ONLY). Added functions to get the points that
determine the shape of the stroke - necessary for proper saving.
* app/xcf/xcf-private.h: added new PROP_VECTORS and XcfStrokeType.
* app/xcf/xcf-load.c: Be able to load PROP_VECTORS, make loading
of PROP_PATHS ignore empty paths.
* app/xcf/xcf-save.c: Added code for saving PROP_VECTORS,
disabled by default. Define NEW_SAVE_CODE if you want to test
it. No guarantees are made about the forward compatibility of
the format used.
2003-09-07 Dave Neary <bolsh@gimp.org>
* app/vectors/gimpvectors.[ch]
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpbezierstroke.c: Cleanup - removed libart
from the included headers in the .h files, don't pass around
libart objects any more. Still stub code.
2003-09-06 Dave Neary <bolsh@gimp.org>
Ooops! Sorry for the oversight.
* app/vectors/gimpvectors.[ch]
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpbezierstroke.c: Changed include order
to conform to the coding standards in devel-docs/includes.txt
(which should really be integrated into HACKING).
2003-09-06 Dave Neary <bolsh@gimp.org>
* app/vectors/Makefile.am: Include libart headers
* app/vectors/gimpvectors.[ch]
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpbezierstroke.[ch]: Committing unfinished,
useless stub code for converting a GimpVectors object to a
libart vector path. Will pad this out later.
2003-09-01 Simon Budig <simon@gimp.org>
* app/vectors/gimpcoordmath.[ch]: Introduced function to compare
two gimpcoords
* app/vectors/gimpstroke.[ch]: virtualized gimp_stroke_close.
* app/vectors/gimpbezierstroke.c: made the _close function check,
if there is an unneeded segment (CCA-Sequence with all the same
coordinates) at the gap to be closed. If so, remove it.
2003-08-27 Simon Budig <simon@gimp.org>
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpbezierstroke.c: Implemented function to
connect two strokes.
* app/tools/gimpvectortool.[ch]: Use it. Right now you have
to click on one endpoint, and then SHIFT+CTRL+ALT-Click on
the other endpoint.
Suggestions on how to solve that more sanely are welcome...
2003-08-26 Simon Budig <simon@gimp.org>
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpbezierstroke.c: Implemented direct moving of the
curve. Whee! :-)
* app/tools/gimpvectortool.[ch]: Use it.
2003-08-22 Simon Budig <simon@gimp.org>
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpbezierstroke.c: added
gimp_(bezier_)stroke_open that opens up a stroke (possibly
returns a new one if it falls apart).
* app/tools/gimpvectortool.[ch]: make it possible to break
up a stroke by deleting (CTRL-Clicking in Insert/Delete mode)
the curve between two anchors.
2003-08-21 Simon Budig <simon@gimp.org>
* app/vectors/gimpstroke.[ch]: added _is_empty () that checks
if a stroke is empty.
* app/vectors/gimpbezierstroke.c: Implemented _anchor_delete ()
* app/vectors/gimpvectors.[ch]: added _stroke_remove ()
* app/tools/gimpvectortool.[ch]: implemented the deletion of
anchors. CTRL-Click on the anchor in Insert/Delete mode does
the trick. Also did some renaming to the Vector tool
(now Path tool) and set the Tooltip to something sane.
Folks, I think the new path tool is no longer a regression
against the 1.2 bezier select tool!
2003-08-20 Simon Budig <simon@gimp.org>
* app/vectors/gimpstroke.[ch]: Add hooks for insertion of points
(and testing if insertion is possible)
* app/vectors/gimpbezierstroke.c: Implement it for BezierStrokes
* app/tools/gimpvectoroptions.c: Adjusted Options-GUI.
* app/tools/gimpvectortool.[ch]: Detect if the pointer is over
the curve. Make it possible to insert points in the curve.
Select the "Insert/Delete Nodes" mode in the tool options and
click on the curve.
2003-08-19 Simon Budig <simon@gimp.org>
* app/vectors/gimpvectors.h
* app/vectors/gimpstroke.[ch]: removed temp_anchor stuff. I don't
think that this is needed. Added virtual function to determine the
closest point on the curve to a given target point.
* app/vectors/gimpbezierstroke.c: implemented
gimp_bezier_stroke_nearest_point_get () - up to now untested and
unused.
2003-08-17 Simon Budig <simon@gimp.org>
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpbezierstroke.[ch]: Virtualized
gimp_bezier_stroke_extend, added gimp_stroke_is_extendable.
* app/text/gimptext-vectors.c: changed accordingly.
* app/vectors/gimpvectors.[ch]: added gimp_vectors_anchor_select.
* app/tools/gimpvectoroptions.[ch]: dummy switch for future
extensions
* app/tools/gimpvectortool.[ch]: Major overhaul. Made use of
gimp_vector_tool_oper_update, cleaned up
gimp_vector_tool_button_press a lot and finally have a
working cursor_update. Still buggy, but I wanted to have it
in CVS.
2003-08-07 Simon Budig <simon@gimp.org>
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpvectors.c: Moved transformations code to
gimpstroke, so that the gimpvector no longer fiddles in
the stroke internals.
2003-08-02 Simon Budig <simon@gimp.org>
* app/vectors/gimpstroke.[ch]: implemented gimp_stroke_close.
* app/vectors/gimpbezierstroke.c: only extend a stroke if
it is not closed.
* app/tools/gimpvectortool.c: ALT-Click on an anchor now
closes the stroke. Will evolve to the ability to connect
two strokes.
2003-05-19 Simon Budig <simon@gimp.org>
* app/vectors/gimpbezierstroke.[ch]: Implemented closed paths. Not
yet available in a sane manner via the UI. Added the last missing
line from gimp_bezier_stroke_interpolate ().
* app/tools/gimpvectortool.c: Changed accordingly
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpvectors.[ch]: removed Tabs.
2003-04-14 Simon Budig <simon@gimp.org>
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpvectors.[ch]: Changed vectors->strokes to a
GList and removed stroke->next. Implemented stuff for duplicating
strokes. Duplicating a vector works now.
* app/tools/gimpvectortool.c: added not-yet-used function to
determine where a click has been. Refcounting stuff changed.
* app/core/gimpimage-mask-select.c
* app/paint/gimppaintcore-stroke.c: Changed accordingly.
2003-01-31 Michael Natterer <mitch@gimp.org>
* app/core/gimpitem.[ch]: added gimp_item_configure() and
gimp_item_copy().
* app/core/gimpdrawable.c (gimp_drawable_configure,copy): use them.
* app/vectors/gimpvectors.[ch]: added gimp_vectors_new(),
gimp_vectors_copy() and gimp_vectors_copy_points(). Use the new
GimpItem functions just as GimpDrawable does. Added a
get_memsize() implementation.
* app/vectors/gimpstroke.[ch]: made it a GimpObject and added
a get_memsize() implementation.
* app/undo.c: implemented vectors undo as if the new GimpVectors
functions above worked.
* app/gui/dialogs-constructors.c
* app/gui/vectors-commands.c
* app/tools/gimpvectortool.c: use gimp_vectors_new,copy().
2002-12-31 Simon Budig <simon@gimp.org>
* app/vectors/vectors-types.h: New Type: GimpVectorExtendMode
* app/tools/gimpvectortool.c
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpbezierstroke.[ch]: More stuff on the path
(pun intended) to a better path tool...
Thanks to Sven for being my host in Berlin!
2002-12-30 Simon Budig <simon@gimp.org>
* app/vectors/gimpanchor.h
* app/vectors/vectors-types.h: Anchors now have an enum as type and
have the "selected" property.
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpbezierstroke.c
* app/vectors/gimpvectors-preview.c: Additional functions to get
information about the graphical representation of the stroke and be
able to select anchors.
* app/tools/gimpvectortool.c: semi-usable interface, better graphical
representation of what is going on. Also make use of the "selected"
property of the anhors to just display a subset of the control
handles.
2002-12-29 Simon Budig <simon@gimp.org>
* app/core/gimpimage-mask-select.c
* app/paint/gimppaintcore-stroke.c
* app/tools/gimpvectortool.c
* app/vectors/gimpbezierstroke.[ch]
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpvectors-preview.c: some more stuff for the
vectors tool: bezier interpolation is available, we have preview
generation. Usage is still weird.
2002-09-30 Simon Budig <simon@gimp.org>
* data/brushes/1circle.gbr: fixed the default spacing, so that
lines actually look like 1 pixel lines...
* themes/Default/images/tools/.cvsignore: Added some files.
* app/vectors/gimpanchor.h
* app/vectors/gimpbezierstroke.[ch]
* app/vectors/gimpstroke.h
* app/vectors/gimpvectors.h: Added some stuff, mostly unused
code that otherwise would just rot on my harddisk. Mitch: I
need to discuss the data structures with you...
2002-02-26 Simon Budig <simon@gimp.org>
* app/tools/gimpdrawtool.c
* app/tools/gimpdrawtool.h: Added function gimp_draw_tool_draw_strokes
to be able to draw lines from a GimpCoords array.
* app/vectors/gimpanchor.h: removed "active", since this should
be a GUI thing.
* app/vectors/gimpstroke.c
* app/vectors/gimpstroke.h
* app/vectors/gimpbezierstroke.c
* app/vectors/gimpbezierstroke.h: Implemented (and fixed API) for
interpolation.
* app/tools/gimpvectortool.c
* app/tools/gimpvectortool.h: Changed accordingly, we can actually
draw polylines now.
2002-02-25 Simon Budig <simon@gimp.org>
* app/vectors/gimpbezierstroke.c
* app/tools/gimpvectortool.[ch]
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpvectors.[ch]: Fixed various bugs, *including*
the nasty one from this morning (thanks Mitch).
2002-02-25 Simon Budig <simon@gimp.org>
* app/vectors/gimpvectors.c
* app/vectors/gimpvectors.h: Changed to a container of
GimpStrokes. This will enable it to contain different
Stroke-types in one Vectors-Object (think Entry in path
dialog)
* app/vectors/gimpstroke.c
* app/vectors/gimpstroke.h
* app/vectors/gimpbezierstroke.c
* app/vectors/gimpbezierstroke.h: New Objects: A connected
component in a vector.
* app/vectors/gimpbezier.c
* app/vectors/gimpbezier.h: Removed, obsoleted by gimpstroke
and gimpbezierstroke.
* app/tools/gimpvectortool.c
* app/vectors/Makefile.am
* app/vectors/vectors-types.h
* app/vectors/gimpanchor.h: Changed accordingly.
There is a nasty bug I am yet unable to find in the tool.
Don't use it. For some reason a wrong function instead of
gimp_stroke_real_anchor_get_next gets called. I have *no*
idea, whats wrong here. I stared at the code for hours.
If somebody has an idea I'd appreciate a hint.