[gegl] buffer: Make a buffer's abyss track its extent by default.
- From: Jon Nordby <jonnor src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] buffer: Make a buffer's abyss track its extent by default.
- Date: Sun, 20 May 2012 11:41:08 +0000 (UTC)
commit f8ec9391dce87baf1db41c84867e71c6e6b8ad23
Author: Michael Henning <mikehenning eclipse net>
Date: Sat May 19 12:35:23 2012 -0400
buffer: Make a buffer's abyss track its extent by default.
This does not happen if the buffer's abyss was modified by the user
or if the user modified its parent's abyss.
Fixes: Bug 675337 - gegl_buffer_set_extent does not increase active buffer area
gegl/buffer/gegl-buffer-private.h | 3 +++
gegl/buffer/gegl-buffer.c | 28 ++++++++++++++++++++++++----
2 files changed, 27 insertions(+), 4 deletions(-)
---
diff --git a/gegl/buffer/gegl-buffer-private.h b/gegl/buffer/gegl-buffer-private.h
index 3f786c7..3f6d7fb1 100644
--- a/gegl/buffer/gegl-buffer-private.h
+++ b/gegl/buffer/gegl-buffer-private.h
@@ -50,6 +50,9 @@ struct _GeglBuffer
/* construction relative to immediate source */
GeglRectangle abyss;
+ gboolean abyss_tracks_extent; /* specifies whether the abyss rectangle
+ should track any modifications to the
+ extent rectangle */
GeglSampler *sampler; /* cached sampler for speeding up random
diff --git a/gegl/buffer/gegl-buffer.c b/gegl/buffer/gegl-buffer.c
index 358d114..c3e1c6b 100644
--- a/gegl/buffer/gegl-buffer.c
+++ b/gegl/buffer/gegl-buffer.c
@@ -352,6 +352,11 @@ gegl_buffer_set_extent (GeglBuffer *buffer,
header->height = buffer->extent.height;
}
+ if (buffer->abyss_tracks_extent)
+ {
+ buffer->abyss = *extent;
+ }
+
return TRUE;
}
@@ -676,16 +681,19 @@ gegl_buffer_constructor (GType type,
}
}
+ buffer->abyss_tracks_extent = FALSE;
+
if (buffer->abyss.width == 0 &&
buffer->abyss.height == 0 &&
buffer->abyss.x == 0 &&
buffer->abyss.y == 0) /* 0 sized extent == inherit buffer extent
*/
{
- buffer->abyss.x = buffer->extent.x;
- buffer->abyss.y = buffer->extent.y;
- buffer->abyss.width = buffer->extent.width;
- buffer->abyss.height = buffer->extent.height;
+ buffer->abyss.x = buffer->extent.x;
+ buffer->abyss.y = buffer->extent.y;
+ buffer->abyss.width = buffer->extent.width;
+ buffer->abyss.height = buffer->extent.height;
+ buffer->abyss_tracks_extent = TRUE;
}
else if (buffer->abyss.width == 0 &&
buffer->abyss.height == 0)
@@ -725,6 +733,18 @@ gegl_buffer_constructor (GType type,
gegl_rectangle_intersect (&self, &parent, &request);
+ /* Don't have the abyss track the extent if the intersection is
+ * not the entire extent. Otherwise, setting the extent identical
+ * to itself could suddenly make the abyss bigger. */
+ if (buffer->abyss_tracks_extent &&
+ (buffer->extent.x != self.x ||
+ buffer->extent.y != self.y ||
+ buffer->extent.width != self.width ||
+ buffer->extent.height != self.height) )
+ {
+ buffer->abyss_tracks_extent = FALSE;
+ }
+
buffer->abyss.x = self.x;
buffer->abyss.y = self.y;
buffer->abyss.width = self.width;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]