[gegl] Fix some issues with creating a buffer from an existing file
- From: Daniel Sabo <daniels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] Fix some issues with creating a buffer from an existing file
- Date: Sat, 15 Mar 2014 19:41:33 +0000 (UTC)
commit 65490fa142c2c0e1415772fc155ee768497cf425
Author: Daniel Sabo <DanielSabo gmail com>
Date: Sat Mar 15 00:08:24 2014 -0700
Fix some issues with creating a buffer from an existing file
Buffers will now correctly inherit the files properties, a value
still needs to be passed in for "format" so there is a default
if the file does not exist.
gegl/buffer/gegl-buffer-load.c | 8 +++++++-
gegl/buffer/gegl-buffer.c | 8 ++++++++
gegl/buffer/gegl-tile-backend-file-async.c | 4 ++++
3 files changed, 19 insertions(+), 1 deletions(-)
---
diff --git a/gegl/buffer/gegl-buffer-load.c b/gegl/buffer/gegl-buffer-load.c
index d8401be..b7005fb 100644
--- a/gegl/buffer/gegl-buffer-load.c
+++ b/gegl/buffer/gegl-buffer-load.c
@@ -233,7 +233,13 @@ gegl_buffer_open (const gchar *path)
{
sanity();
- return g_object_new (GEGL_TYPE_BUFFER, "path", path, NULL);
+ return g_object_new (GEGL_TYPE_BUFFER,
+ /* FIXME: Currently the buffer must always have a format specified,
+ this format will be used if the path did not point to an
+ existing file. */
+ "format", babl_format ("RGBA float"),
+ "path", path,
+ NULL);
}
GeglBuffer *
diff --git a/gegl/buffer/gegl-buffer.c b/gegl/buffer/gegl-buffer.c
index 572da68..88a624b 100644
--- a/gegl/buffer/gegl-buffer.c
+++ b/gegl/buffer/gegl-buffer.c
@@ -559,6 +559,14 @@ gegl_buffer_constructor (GType type,
"format", buffer->format,
"path", buffer->path,
NULL);
+
+ /* Re-inherit values in case path pointed to an existing buffer */
+ buffer->format = gegl_tile_backend_get_format (backend);
+ buffer->tile_width = gegl_tile_backend_get_tile_width (backend);
+ buffer->tile_height = gegl_tile_backend_get_tile_height (backend);
+
+ if (buffer->extent.width == -1 || buffer->extent.height == -1)
+ buffer->extent = gegl_tile_backend_get_extent (backend);
}
else
{
diff --git a/gegl/buffer/gegl-tile-backend-file-async.c b/gegl/buffer/gegl-tile-backend-file-async.c
index 2f0cb01..57c0362 100644
--- a/gegl/buffer/gegl-tile-backend-file-async.c
+++ b/gegl/buffer/gegl-tile-backend-file-async.c
@@ -1186,6 +1186,10 @@ gegl_tile_backend_file_constructed (GObject *object)
backend->priv->tile_size = backend->priv->tile_width *
backend->priv->tile_height *
backend->priv->px_size;
+ backend->priv->extent = (GeglRectangle) {self->header.x,
+ self->header.y,
+ self->header.width,
+ self->header.height};
/* insert each of the entries into the hash table */
gegl_tile_backend_file_load_index (self, TRUE);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]