[gimp] app: port the entire GimpScanConvert API to GeglBuffer
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: port the entire GimpScanConvert API to GeglBuffer
- Date: Wed, 2 May 2012 16:10:40 +0000 (UTC)
commit f67bcfa82b2a461681c4d5444efd75d00ecf0283
Author: Michael Natterer <mitch gimp org>
Date: Tue Mar 20 23:34:11 2012 +0100
app: port the entire GimpScanConvert API to GeglBuffer
app/core/gimpchannel-select.c | 3 +-
app/core/gimpdrawable-stroke.c | 34 +++++-----
app/core/gimpscanconvert.c | 107 +++++++++++++++-------------------
app/core/gimpscanconvert.h | 10 ++--
app/tools/gimpforegroundselecttool.c | 4 +-
app/tools/gimpiscissorstool.c | 2 +-
6 files changed, 75 insertions(+), 85 deletions(-)
---
diff --git a/app/core/gimpchannel-select.c b/app/core/gimpchannel-select.c
index db26dbc..612f0f0 100644
--- a/app/core/gimpchannel-select.c
+++ b/app/core/gimpchannel-select.c
@@ -236,8 +236,9 @@ gimp_channel_select_scan_convert (GimpChannel *channel,
add_on = gimp_channel_new_mask (gimp_item_get_image (item),
gimp_item_get_width (item),
gimp_item_get_height (item));
+
gimp_scan_convert_render (scan_convert,
- gimp_drawable_get_tiles (GIMP_DRAWABLE (add_on)),
+ gimp_drawable_get_write_buffer (GIMP_DRAWABLE (add_on)),
offset_x, offset_y, antialias);
if (feather)
diff --git a/app/core/gimpdrawable-stroke.c b/app/core/gimpdrawable-stroke.c
index d6ed131..b30a250 100644
--- a/app/core/gimpdrawable-stroke.c
+++ b/app/core/gimpdrawable-stroke.c
@@ -284,18 +284,18 @@ gimp_drawable_stroke_scan_convert (GimpDrawable *drawable,
gboolean do_stroke,
gboolean push_undo)
{
- GimpContext *context = GIMP_CONTEXT (options);
- GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
- TileManager *base;
- TileManager *mask;
- GeglBuffer *base_buffer;
- GeglBuffer *mask_buffer;
- GeglNode *apply_opacity;
- gint x, y, w, h;
- gint bytes;
- gint off_x;
- gint off_y;
- PixelRegion basePR;
+ GimpContext *context = GIMP_CONTEXT (options);
+ GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
+ TileManager *base;
+ GeglBuffer *base_buffer;
+ GeglBuffer *mask_buffer;
+ GeglNode *apply_opacity;
+ GeglRectangle rect = { 0, };
+ gint x, y, w, h;
+ gint bytes;
+ gint off_x;
+ gint off_y;
+ PixelRegion basePR;
/* must call gimp_channel_is_empty() instead of relying on
* gimp_item_mask_intersect() because the selection pretends to
@@ -342,18 +342,19 @@ gimp_drawable_stroke_scan_convert (GimpDrawable *drawable,
gimp_stroke_options_get_dash_info (stroke_options));
}
- /* fill a 1-bpp Tilemanager with black, this will describe the shape
+ /* fill a 1-bpp GeglBuffer with black, this will describe the shape
* of the stroke.
*/
- mask = tile_manager_new (w, h, 1);
- mask_buffer = gimp_tile_manager_create_buffer (mask, NULL, TRUE);
+ rect.width = w;
+ rect.height = h;
+ mask_buffer = gegl_buffer_new (&rect, babl_format ("Y u8"));
gegl_buffer_clear (mask_buffer, NULL);
/* render the stroke into it */
gimp_item_get_offset (GIMP_ITEM (drawable), &off_x, &off_y);
- gimp_scan_convert_render (scan_convert, mask,
+ gimp_scan_convert_render (scan_convert, mask_buffer,
x + off_x, y + off_y,
gimp_fill_options_get_antialias (options));
@@ -411,7 +412,6 @@ gimp_drawable_stroke_scan_convert (GimpDrawable *drawable,
gimp_context_get_paint_mode (context),
NULL, NULL, x, y);
- tile_manager_unref (mask);
tile_manager_unref (base);
gimp_drawable_update (drawable, x, y, w, h);
diff --git a/app/core/gimpscanconvert.c b/app/core/gimpscanconvert.c
index 5e1b31f..ccc0927 100644
--- a/app/core/gimpscanconvert.c
+++ b/app/core/gimpscanconvert.c
@@ -28,8 +28,6 @@
#include "core-types.h"
-#include "base/tile-manager.h"
-
#include "gegl/gimp-gegl-utils.h"
#include "gimpbezierdesc.h"
@@ -330,35 +328,35 @@ gimp_scan_convert_stroke (GimpScanConvert *sc,
/**
* gimp_scan_convert_render:
- * @sc: a #GimpScanConvert context
- * @tile_manager: the #TileManager to render to
- * @off_x: horizontal offset into the @tile_manager
- * @off_y: vertical offset into the @tile_manager
- * @antialias: whether to apply antialiasiing
+ * @sc: a #GimpScanConvert context
+ * @bufferr: the #GeglBuffer to render to
+ * @off_x: horizontal offset into the @buffer
+ * @off_y: vertical offset into the @buffer
+ * @antialias: whether to apply antialiasiing
*
* This is a wrapper around gimp_scan_convert_render_full() that replaces the
- * content of the @tile_manager with a rendered form of the path passed in.
+ * content of the @buffer with a rendered form of the path passed in.
*
* You cannot add additional polygons after this command.
*/
void
gimp_scan_convert_render (GimpScanConvert *sc,
- TileManager *tile_manager,
+ GeglBuffer *buffer,
gint off_x,
gint off_y,
gboolean antialias)
{
- gimp_scan_convert_render_full (sc, tile_manager, off_x, off_y,
+ gimp_scan_convert_render_full (sc, buffer, off_x, off_y,
TRUE, antialias, 255);
}
/**
* gimp_scan_convert_render_value:
- * @sc: a #GimpScanConvert context
- * @tile_manager: the #TileManager to render to
- * @off_x: horizontal offset into the @tile_manager
- * @off_y: vertical offset into the @tile_manager
- * @value: value to use for covered pixels
+ * @sc: a #GimpScanConvert context
+ * @buffer: the #GeglBuffer to render to
+ * @off_x: horizontal offset into the @buffer
+ * @off_y: vertical offset into the @buffer
+ * @value: value to use for covered pixels
*
* This is a wrapper around gimp_scan_convert_render_full() that
* doesn't do antialiasing but gives control over the value that
@@ -369,93 +367,89 @@ gimp_scan_convert_render (GimpScanConvert *sc,
*/
void
gimp_scan_convert_render_value (GimpScanConvert *sc,
- TileManager *tile_manager,
+ GeglBuffer *buffer,
gint off_x,
gint off_y,
guchar value)
{
- gimp_scan_convert_render_full (sc, tile_manager, off_x, off_y,
+ gimp_scan_convert_render_full (sc, buffer, off_x, off_y,
TRUE, FALSE, value);
}
/**
* gimp_scan_convert_compose:
- * @sc: a #GimpScanConvert context
- * @tile_manager: the #TileManager to render to
- * @off_x: horizontal offset into the @tile_manager
- * @off_y: vertical offset into the @tile_manager
+ * @sc: a #GimpScanConvert context
+ * @buffer: the #GeglBuffer to render to
+ * @off_x: horizontal offset into the @buffer
+ * @off_y: vertical offset into the @buffer
*
* This is a wrapper around of gimp_scan_convert_render_full() that composes
- * the (aliased) scan conversion on top of the content of the @tile_manager.
+ * the (aliased) scan conversion on top of the content of the @buffer.
*
* You cannot add additional polygons after this command.
*/
void
gimp_scan_convert_compose (GimpScanConvert *sc,
- TileManager *tile_manager,
+ GeglBuffer *buffer,
gint off_x,
gint off_y)
{
- gimp_scan_convert_render_full (sc, tile_manager, off_x, off_y,
+ gimp_scan_convert_render_full (sc, buffer, off_x, off_y,
FALSE, FALSE, 255);
}
/**
* gimp_scan_convert_compose_value:
- * @sc: a #GimpScanConvert context
- * @tile_manager: the #TileManager to render to
- * @off_x: horizontal offset into the @tile_manager
- * @off_y: vertical offset into the @tile_manager
- * @value: value to use for covered pixels
+ * @sc: a #GimpScanConvert context
+ * @buffer: the #GeglBuffer to render to
+ * @off_x: horizontal offset into the @buffer
+ * @off_y: vertical offset into the @buffer
+ * @value: value to use for covered pixels
*
* This is a wrapper around gimp_scan_convert_render_full() that
* composes the (aliased) scan conversion with value @value on top of the
- * content of the @tile_manager.
+ * content of the @buffer.
*
* You cannot add additional polygons after this command.
*/
void
gimp_scan_convert_compose_value (GimpScanConvert *sc,
- TileManager *tile_manager,
+ GeglBuffer *buffer,
gint off_x,
gint off_y,
gint value)
{
- gimp_scan_convert_render_full (sc, tile_manager, off_x, off_y,
+ gimp_scan_convert_render_full (sc, buffer, off_x, off_y,
FALSE, FALSE, value);
}
/**
* gimp_scan_convert_render_full:
- * @sc: a #GimpScanConvert context
- * @tiles: the #TileManager to render to
- * @off_x: horizontal offset into the @tiles
- * @off_y: vertical offset into the @tiles
- * @replace: if true the original content of the @tiles gets
- * destroyed
- * @antialias: if true the rendering happens antialiased
- * @value: value to use for covered pixels
+ * @sc: a #GimpScanConvert context
+ * @buffer: the #GeglBuffer to render to
+ * @off_x: horizontal offset into the @buffer
+ * @off_y: vertical offset into the @buffer
+ * @replace: if true the original content of the @buffer gets estroyed
+ * @antialias: if true the rendering happens antialiased
+ * @value: value to use for covered pixels
*
- * This function renders the area described by the path to the @tiles,
- * taking the offset @off_x and @off_y in the tilemanager into account.
- * The rendering can happen antialiased and be rendered on top of existing
- * content or replacing it completely. The @value specifies the opacity value
- * to be used for the objects in the @sc.
- *
- * This function expects a tile manager of depth 1.
+ * This function renders the area described by the path to the
+ * @buffer, taking the offset @off_x and @off_y in the buffer into
+ * account. The rendering can happen antialiased and be rendered on
+ * top of existing content or replacing it completely. The @value
+ * specifies the opacity value to be used for the objects in the @sc.
*
* You cannot add additional polygons after this command.
*/
void
gimp_scan_convert_render_full (GimpScanConvert *sc,
- TileManager *tiles,
+ GeglBuffer *buffer,
gint off_x,
gint off_y,
gboolean replace,
gboolean antialias,
guchar value)
{
- GeglBuffer *buffer;
const Babl *format;
GeglBufferIterator *iter;
GeglRectangle *roi;
@@ -467,13 +461,12 @@ gimp_scan_convert_render_full (GimpScanConvert *sc,
gint width, height;
g_return_if_fail (sc != NULL);
- g_return_if_fail (tiles != NULL);
- g_return_if_fail (tile_manager_bpp (tiles) == 1);
+ g_return_if_fail (GEGL_IS_BUFFER (buffer));
x = 0;
y = 0;
- width = tile_manager_width (tiles);
- height = tile_manager_height (tiles);
+ width = gegl_buffer_get_width (buffer);
+ height = gegl_buffer_get_height (buffer);
if (sc->clip && ! gimp_rectangle_intersect (x, y, width, height,
sc->clip_x, sc->clip_y,
@@ -485,10 +478,8 @@ gimp_scan_convert_render_full (GimpScanConvert *sc,
path.data = (cairo_path_data_t *) sc->path_data->data;
path.num_data = sc->path_data->len;
- buffer = gimp_tile_manager_create_buffer (tiles, NULL, TRUE);
- format = gegl_buffer_get_format (buffer);
-
- bpp = babl_format_get_bytes_per_pixel (format);
+ format = babl_format ("Y u8");
+ bpp = babl_format_get_bytes_per_pixel (format);
iter = gegl_buffer_iterator_new (buffer, NULL, format,
GEGL_BUFFER_WRITE);
@@ -598,6 +589,4 @@ gimp_scan_convert_render_full (GimpScanConvert *sc,
}
}
}
-
- g_object_unref (buffer);
}
diff --git a/app/core/gimpscanconvert.h b/app/core/gimpscanconvert.h
index d1972da..b717ed2 100644
--- a/app/core/gimpscanconvert.h
+++ b/app/core/gimpscanconvert.h
@@ -43,7 +43,7 @@ void gimp_scan_convert_stroke (GimpScanConvert *sc,
gdouble dash_offset,
GArray *dash_info);
void gimp_scan_convert_render_full (GimpScanConvert *sc,
- TileManager *tile_manager,
+ GeglBuffer *buffer,
gint off_x,
gint off_y,
gboolean replace,
@@ -51,21 +51,21 @@ void gimp_scan_convert_render_full (GimpScanConvert *sc,
guchar value);
void gimp_scan_convert_render (GimpScanConvert *sc,
- TileManager *tile_manager,
+ GeglBuffer *buffer,
gint off_x,
gint off_y,
gboolean antialias);
void gimp_scan_convert_render_value (GimpScanConvert *sc,
- TileManager *tile_manager,
+ GeglBuffer *buffer,
gint off_x,
gint off_y,
guchar value);
void gimp_scan_convert_compose (GimpScanConvert *sc,
- TileManager *tile_manager,
+ GeglBuffer *buffer,
gint off_x,
gint off_y);
void gimp_scan_convert_compose_value (GimpScanConvert *sc,
- TileManager *tile_manager,
+ GeglBuffer *buffer,
gint off_x,
gint off_y,
gint value);
diff --git a/app/tools/gimpforegroundselecttool.c b/app/tools/gimpforegroundselecttool.c
index ec909f9..65a0b31 100644
--- a/app/tools/gimpforegroundselecttool.c
+++ b/app/tools/gimpforegroundselecttool.c
@@ -633,7 +633,7 @@ gimp_foreground_select_tool_select (GimpFreeSelectTool *free_sel,
"foreground-extraction", NULL);
gimp_scan_convert_render_value (scan_convert,
- gimp_drawable_get_tiles (GIMP_DRAWABLE (mask)),
+ gimp_drawable_get_write_buffer (GIMP_DRAWABLE (mask)),
0, 0, 128);
gimp_scan_convert_free (scan_convert);
@@ -789,7 +789,7 @@ gimp_foreground_select_tool_stroke (GimpChannel *mask,
GIMP_JOIN_ROUND, GIMP_CAP_ROUND, 10.0,
0.0, NULL);
gimp_scan_convert_compose_value (scan_convert,
- gimp_drawable_get_tiles (GIMP_DRAWABLE (mask)),
+ gimp_drawable_get_write_buffer (GIMP_DRAWABLE (mask)),
0, 0, stroke->background ? 0 : 255);
gimp_scan_convert_free (scan_convert);
}
diff --git a/app/tools/gimpiscissorstool.c b/app/tools/gimpiscissorstool.c
index 8392fea..d6b617f 100644
--- a/app/tools/gimpiscissorstool.c
+++ b/app/tools/gimpiscissorstool.c
@@ -542,7 +542,7 @@ iscissors_convert (GimpIscissorsTool *iscissors,
gimp_image_get_width (image),
gimp_image_get_height (image));
gimp_scan_convert_render (sc,
- gimp_drawable_get_tiles (GIMP_DRAWABLE (iscissors->mask)),
+ gimp_drawable_get_write_buffer (GIMP_DRAWABLE (iscissors->mask)),
0, 0, options->antialias);
gimp_scan_convert_free (sc);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]