Only consider layers with combine mode Normal when testing if any layer

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
This commit is contained in:
Martin Nordholts 2007-06-22 10:11:36 +00:00 committed by Martin Nordholts
parent e74f8a034c
commit a42d1b45ed
2 changed files with 24 additions and 10 deletions

View File

@ -1,3 +1,9 @@
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.
2007-06-22 Sven Neumann <sven@gimp.org> 2007-06-22 Sven Neumann <sven@gimp.org>
* app/core/gimp.c (gimp_restore): note that loading fonts may take * app/core/gimp.c (gimp_restore): note that loading fonts may take

View File

@ -323,6 +323,18 @@ gimp_projection_construct_channels (GimpProjection *proj,
g_list_free (reverse_list); g_list_free (reverse_list);
} }
/**
* gimp_projection_initialize:
* @proj: A #GimpProjection.
* @x:
* @y:
* @w:
* @h:
*
* This function determines whether a visible layer with combine mode Normal
* provides complete coverage over the specified area. If not, the projection
* is initialized to transparent black.
*/
static void static void
gimp_projection_initialize (GimpProjection *proj, gimp_projection_initialize (GimpProjection *proj,
gint x, gint x,
@ -334,11 +346,6 @@ gimp_projection_initialize (GimpProjection *proj,
GList *list; GList *list;
gboolean coverage = FALSE; gboolean coverage = FALSE;
/* this function determines whether a visible layer
* provides complete coverage over the image. If not,
* the projection is initialized to transparent
*/
for (list = GIMP_LIST (proj->image->layers)->list; for (list = GIMP_LIST (proj->image->layers)->list;
list; list;
list = g_list_next (list)) list = g_list_next (list))
@ -348,11 +355,12 @@ gimp_projection_initialize (GimpProjection *proj,
gimp_item_offsets (item, &off_x, &off_y); gimp_item_offsets (item, &off_x, &off_y);
if (gimp_item_get_visible (item) && if (gimp_item_get_visible (item) &&
! gimp_drawable_has_alpha (GIMP_DRAWABLE (item)) && ! gimp_drawable_has_alpha (GIMP_DRAWABLE (item)) &&
(off_x <= x) && gimp_layer_get_mode (GIMP_LAYER (item)) == GIMP_NORMAL_MODE &&
(off_y <= y) && (off_x <= x) &&
(off_x + gimp_item_width (item) >= x + w) && (off_y <= y) &&
(off_x + gimp_item_width (item) >= x + w) &&
(off_y + gimp_item_height (item) >= y + h)) (off_y + gimp_item_height (item) >= y + h))
{ {
coverage = TRUE; coverage = TRUE;