and also remove lots of cruft from that file, like the disabled
optimization that tries to project a single-layer image directly out
of the layer's tiles.
Add/Subtract the projectable's offset whenever we go from coordinates
from our public interface (which are always image coordinates) and
coordinates in out internal tile pyramid (wihch always starts at 0,0).
The Gegl projection still needs an offset node that is missing.
Also, connect to the projectable's "update" signal using
g_signal_connect_closure_by_id() instead of simply g_signal_connect(),
so we really connect to the signal of the GimpProjectable interface
and not to the "update" signal of GimpDrawable (which is a conflict
that will happen on group layers).
Don't reuse the GeglProcessor as it can't handle dirty rects when
painting in GIMP, and this makes it harder to make GEGL-wise progress
in other parts of GIMP.
Reuse the GeglProcessor instead of creating a new one in each call to
gimp_projection_construct_gegl(). Requires at least 0ed57a05da of
GEGL. Does not seem to give any performance improvement at all
unfortunately :(
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-11-10 Michael Natterer <mitch@gimp.org>
* app/core/gimpprojection.[ch]
* app/core/gimpprojection-construct.c: add code that keeps the
gegl processor around across calls, but destroy it anyway until
gegl_processor_set_rectangle() is fixed.
svn path=/trunk/; revision=27607
2008-11-09 Michael Natterer <mitch@gimp.org>
Bye bye floating_sel_rigor() and floating_sel_relax():
* app/core/gimpdrawable.[ch] (gimp_drawable_init_src_region):
implement compositing the floating selection on the fly. Add
return parameter "TileManager **temp_tiles" which returns the temp
buffer used for compositing; the caller has to unref the tiles.
* app/core/gimpchannel-project.c
* app/core/gimplayer-project.c: unref the temp_tiles.
* app/core/gimplayer.[ch]: remove members fs.backing_store and
fs.initial.
* app/core/gimplayer-floating-sel.[ch]: remove functions rigor(),
relax(), store() and restore(), they are not needed any longer.
Some minor cleanup, more to come.
* app/core/gimpprojection-construct.c: don't composite the
floating selection before projecting because that happens on the
fly now.
* app/core/core-enums.[ch]
* app/core/gimpfloatingselundo.c
* app/core/gimpimage-undo-push.[ch]: remove the rigor and relax
undos.
* app/core/gimpdrawable.c
* app/core/gimpimage-convert.c
* app/core/gimpimage-duplicate.c
* app/core/gimpimage.c
* app/core/gimplayer.c
* app/xcf/xcf-save.c: remove all calls to rigor and relax and all
implementations of virtual functions that were just there to
rigor/releax around chaining up.
* tools/pdbgen/pdb/floating_sel.pdb: remove all code from the
rigor and relax wrappers and deprecate the API.
* app/pdb/floating-sel-cmds.c
* libgimp/gimpfloatingsel_pdb.[ch]: regenerated.
* plug-ins/file-xjt/xjt.c: don't call rigor and relax.
svn path=/trunk/; revision=27579
2008-11-08 Michael Natterer <mitch@gimp.org>
Abstract the legacy projection code away into a virtual function
of GimpDrawable:
* app/core/gimpdrawable.[ch]: add new virtual function
GimpDrawable::project_region() which projects an area of a
drawable onto a passed in PixelRegion.
* app/core/Makefile.am
* app/core/gimpchannel-project.[ch]
* app/core/gimplayer-project.[ch]: new files which implement it.
* app/core/gimpchannel.c
* app/core/gimplayer.c: hook it in.
* app/core/gimpprojection-construct.c: get rid all the projection
code moved to above new files and project all drawables in one
loop.
* app/core/gimpprojectable.[ch]: remove the legacy methods
get_colormap() and get_components(), they are not needed any
longer.
* app/core/gimpimage.c: changed accordingly.
svn path=/trunk/; revision=27571
2008-11-05 Michael Natterer <mitch@gimp.org>
This should remove any image or viewable dependency from the
projection (apart from the projectable's get_image() method, but
that one is not supposed to return the projection's model but
rather the image the projection is part of).
* app/core/gimpprojectable.[ch]: add vfunc get_size() which
completes the API needed for GEGL projection.
Add vfuncs get_layers(), get_channels(), get_components() and
get_colormap() which are needed for the legacy projection code.
* app/core/gimpimage.c: implement the new methods.
* app/core/gimpprojection.c
* app/core/gimpprojection-construct.c: use them and remove all
calls to image and viewable API.
svn path=/trunk/; revision=27558
2008-11-04 Michael Natterer <mitch@gimp.org>
* app/core/gimpprojectable.[ch]: add vitrual function
invalidate_preview().
* app/core/gimpimage.c: implement it and redirect to
gimp_viewable_invalidate_preview().
* app/core/gimpprojection.c: call the new API instead of
gimp_viewable_invalidate_preview(). Some cleanup in the disabled
cow-projection code.
svn path=/trunk/; revision=27553
2008-11-04 Michael Natterer <mitch@gimp.org>
Unfinished first step to make the projection independent of
GimpImage, also one step closer to layer grouping.
* app/core/Makefile.am
* app/core/core-types.h
* app/core/gimpprojectable.[ch]: add new interface which abstracts
something that can have a projection attached to it. Has "update"
and "flush" signals and get_graph() and get_image()
vfuncs. get_image() is temporary until the hack is finishes.
* app/core/gimpimage.[ch]: implement GimpProjectableInterface,
remove "update" and "flush" signals and made get_graph() a private
implementation of the interface method. Moved interface method
implementations after virtual function implementations.
* app/core/gimpprojection.[ch]: change member "image" to
"projectable" and use the projectable API as often as
possible. Still some implicit dependencies on the projectable
being an image left but it's getting close.
* app/core/gimpprojection-construct.c: same here.
svn path=/trunk/; revision=27552
2008-11-02 Michael Natterer <mitch@gimp.org>
* app/core/gimpimage.[ch]: add new functions
gimp_image_get_layer_iter(), channel_iter() and vectors_iter()
which return the GList inside the resp. GimpList.
* app/actions/channels-actions.c
* app/actions/layers-actions.c
* app/actions/vectors-actions.c
* app/core/gimpimage-convert.c
* app/core/gimpimage-crop.c
* app/core/gimpimage-duplicate.c
* app/core/gimpimage-flip.c
* app/core/gimpimage-item-list.c
* app/core/gimpimage-merge.c
* app/core/gimpimage-resize.c
* app/core/gimpimage-rotate.c
* app/core/gimpimage-scale.c
* app/core/gimpimage.c
* app/core/gimpimage.h
* app/core/gimpprojection-construct.c
* app/display/gimpdisplayshell-draw.c
* app/file/file-open.c
* app/tools/gimpaligntool.c
* app/tools/gimpdrawtool.c
* app/vectors/gimpvectors-compat.c
* app/vectors/gimpvectors-export.c
* app/widgets/gimplayertreeview.c
* app/xcf/xcf-save.c
* tools/pdbgen/pdb/image.pdb: use the new functions instead of
peeking both into the image and the list. Remove inclusions of
"gimplist.h" or change them into "gimpcontainer.h" if needed.
* app/pdb/image-cmds.c: regenerated.
svn path=/trunk/; revision=27524
2008-10-29 Sven Neumann <sven@gimp.org>
Bug 558420 – projection incorrect with alpha-less layers
* app/core/gimpprojection-construct.c
(gimp_projection_initialize):
need to initialize the projection if the covering layer is not
opaque.
svn path=/trunk/; revision=27460
2008-10-11 Michael Natterer <mitch@gimp.org>
* app/core/gimpprojection.h: add a "use_gegl" boolean member.
* app/core/gimpprojection-construct.c (gimp_projection_construct):
use the boolean instead of hardcoding FALSE.
* app/actions/view-actions.c
* app/actions/view-commands.[ch]: add a "Use GEGL" action and
callback which sets the boolean and exposes the display.
* menus/image-menu.xml.in: add it to the "View" menu.
svn path=/trunk/; revision=27242
2008-10-11 Michael Natterer <mitch@gimp.org>
* app/core/gimpchannel.[ch]: add a projection node and
implement GimpDrawable::get_node(). Reconfigure the node in
visibility_changed(), set_color(), set_opacity() and
set_show_masked().
* app/core/gimpimage.c (gimp_image_get_graph): enable code that
projects the channels stack on top of the layer stack.
* app/core/gimpprojection-construct.c: remove the call to
gimp_projection_construct_channels() from the GEGL code path. Also
don't touch proj->construct_flag.
svn path=/trunk/; revision=27230
2008-10-10 Michael Natterer <mitch@gimp.org>
Bug 554983 – Layers Projection using GEGL
First projection using GEGL, wheeeee. Disabled by default because
it doesn't work with floating selection (and will not, FS
refactoring is in the queue).
* app/core/gimpimage.[ch]: add gimp_image_get_graph() which
returns a GeglNode representing the image's projection.
(gimp_image_add_layer_node)
(gimp_image_remove_layer_node): new utility functions to add and
remove layer nodes to/from the graph.
(gimp_image_add_layer)
(gimp_image_remove_layer)
(gimp_image_position_layer): call them to keep the graph up to date.
* app/core/gimpdrawable.c (gimp_drawable_real_update): invalidate
the source node.
* app/core/gimpprojection.[ch]: keep a projection graph around and
add gimp_projection_get_sink_node() which returns the node that
writes to the projection tiles.
* app/core/gimpprojection-construct.c: add
gimp_projection_construct_gegl() which is a few-liner that uses a
GeglProcessor to run the projection graph.
(gimp_projection_construct): call the new function (disabled by
default).
svn path=/trunk/; revision=27207
2008-10-10 Michael Natterer <mitch@gimp.org>
* app/core/gimpimage.[ch]: add new functions
gimp_image_get_layer_by_index(), _channel_by_index() and
_vectors_by_index().
* app/core/gimpprojection-construct.c
* app/display/gimpdisplayshell-layer-select.c
* app/xcf/xcf-load.c: use them instead of looking the items up
in image->container and casting the return value.
svn path=/trunk/; revision=27206
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-09-01 Sven Neumann <sven@gimp.org>
* app/paint-funcs/paint-funcs.[ch]: added clear_region().
* app/base/tile-manager-crop.c
* app/core/gimpchannel.c
* app/core/gimpimage-merge.c
* app/core/gimpmaskundo.c
* app/core/gimpprojection-construct.c: use it instead of calling
color_region() with a zero color.
svn path=/trunk/; revision=26826
2008-09-01 Sven Neumann <sven@gimp.org>
* app/core/gimpprojection-construct.c
(gimp_projection_initialize):
also need to initialize the projection if the layer mask could
introduce transparency. Fixes bug #550024.
svn path=/trunk/; revision=26824
2007-06-22 Martin Nordholts <martinn@svn.gnome.org>
* app/core/gimpprojection-construct.c (gimp_projection_initialize): Only
consider layers with combine mode Normal when testing if any layer
covers the entire specified area. Fixes bug #440154.
svn path=/trunk/; revision=22824
2006-05-23 Michael Natterer <mitch@gimp.org>
Fix for bug #333156:
* app/paint-funcs/paint-funcs-types.h (enum CombinationMode):
added value COMBINE_INTEN_A_INDEXED.
* app/paint-funcs/paint-funcs.c
(combine_inten_a_and_indexed_pixels): new function which
implements the new CombinationMode.
(combine_sub_region)
(combine_regions): added the needed bits to call the new function.
* app/core/gimpprojection-construct.c (project_indexed): added
mask PixelRegion parameter since that's supported by paint-funcs
now, replaced g_warning() about unimplemented combine type
by call to combine_regions(..., COMBINE_INTEN_A_INDEXED).
(gimp_projection_construct_layers): pass the mask to
project_indexed() and removed comments about not supporting it.
2006-04-07 Sven Neumann <sven@gimp.org>
* app/core/gimpdrawable.[ch]: renamed gimp_drawable_data() to
gimp_drawable_get_tiles().
[lots of files]: changed accordingly.
2005-04-29 Sven Neumann <sven@gimp.org>
* app/core/gimpprojection-construct.c (gimp_projection_construct):
use copy_region() instead of using tile_manager_map_over_tile()
directly.
2005-04-29 Sven Neumann <sven@gimp.org>
* app/core/gimpprojection-construct.c: save COW projection code from
bit-rotting. It can now be enabled again (but is definitely broken).
2004-05-06 Sven Neumann <sven@gimp.org>
* app/core/gimpdrawable-preview.c
* app/core/gimpimage-projection.c: added sanity so we don't just
plain crash when an indexed image doesn't have a colormap.
* plug-ins/common/png.c: keep at least one entry in the colormap.
Fixes bug #142029.
2004-02-18 Sven Neumann <sven@gimp.org>
* tile-cache.c
* tile-private.h
* tile.[ch]: removed trailing whitespace, added some newlines,
let tile_is_valid() return a gboolean instead of a gint.
* app/core/gimpimage-projection.c
* app/core/gimpimage-undo-push.c
* app/paint/gimppaintcore.c
* app/tools/gimpinktool.c: use the return value from tile_is_valid()
as a boolean.
2004-01-18 Michael Natterer <mitch@gimp.org>
* app/core/gimpimage.[ch] (gimp_image_get_color): also return the
color's alpha byte if it has alpha, not only the converted RGB
values. Return OPAQUE_OPACITY for drawables without alpha.
Fixes bug #131706.
* app/core/gimpdrawable.c (gimp_drawable_get_color_at)
* app/core/gimpimage-contiguous-region.c
(gimp_image_contiguous_region_by_color)
* app/core/gimpimage-projection.c (gimp_image_projection_get_color_at)
* app/core/gimpimagemap.c (gimp_image_map_get_color_at)
* app/paint/gimpclone.c (gimp_clone_line_image): removed separate
handling of the alpha byte from all users of gimp_image_get_color().