[gimp] app: more GEGL in gimp_smudge_start()
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: more GEGL in gimp_smudge_start()
- Date: Wed, 2 May 2012 16:28:30 +0000 (UTC)
commit 4455d3e75deeaf0a5c66682c7187f79747028e16
Author: Michael Natterer <mitch gimp org>
Date: Sun Apr 1 18:50:19 2012 +0200
app: more GEGL in gimp_smudge_start()
app/paint/gimpsmudge.c | 70 +++++++++++++++++++++++++----------------------
1 files changed, 37 insertions(+), 33 deletions(-)
---
diff --git a/app/paint/gimpsmudge.c b/app/paint/gimpsmudge.c
index f2ebebd..a538b15 100644
--- a/app/paint/gimpsmudge.c
+++ b/app/paint/gimpsmudge.c
@@ -170,20 +170,24 @@ gimp_smudge_start (GimpPaintCore *paint_core,
const GimpCoords *coords)
{
GimpSmudge *smudge = GIMP_SMUDGE (paint_core);
- TempBuf *area;
- PixelRegion srcPR;
+ GeglBuffer *paint_buffer;
+ gint paint_buffer_x;
+ gint paint_buffer_y;
+ GeglBuffer *accum_buffer;
gint bytes;
gint x, y;
if (gimp_drawable_is_indexed (drawable))
return FALSE;
- area = gimp_paint_core_get_paint_area (paint_core, drawable, paint_options,
- coords);
- if (! area)
+ paint_buffer = gimp_paint_core_get_paint_buffer (paint_core, drawable,
+ paint_options, coords,
+ &paint_buffer_x,
+ &paint_buffer_y);
+ if (! paint_buffer)
return FALSE;
- gimp_smudge_accumulator_size(paint_options, &smudge->accum_size);
+ gimp_smudge_accumulator_size (paint_options, &smudge->accum_size);
/* adjust the x and y coordinates to the upper left corner of the
* accumulator
@@ -194,24 +198,26 @@ gimp_smudge_start (GimpPaintCore *paint_core,
bytes = gimp_drawable_bytes (drawable);
smudge->accum_data = g_malloc (SQR (smudge->accum_size) * bytes);
+ accum_buffer =
+ gegl_buffer_linear_new_from_data (smudge->accum_data,
+ gimp_drawable_get_format (drawable),
+ GIMP_GEGL_RECT (0, 0,
+ smudge->accum_size,
+ smudge->accum_size),
+ GEGL_AUTO_ROWSTRIDE,
+ NULL, NULL);
+
/* If clipped, prefill the smudge buffer with the color at the
* brush position.
*/
- if (x != area->x ||
- y != area->y ||
- smudge->accum_size != area->width ||
- smudge->accum_size != area->height)
+ if (x != paint_buffer_x ||
+ y != paint_buffer_y ||
+ smudge->accum_size != gegl_buffer_get_width (paint_buffer) ||
+ smudge->accum_size != gegl_buffer_get_height (paint_buffer))
{
- GeglBuffer *buffer;
- GeglRectangle rect = { 0, 0, smudge->accum_size, smudge->accum_size };
- GimpRGB pixel;
- GeglColor *color;
+ GimpRGB pixel;
+ GeglColor *color;
- buffer = gegl_buffer_linear_new_from_data (smudge->accum_data,
- gimp_drawable_get_format (drawable),
- &rect,
- smudge->accum_size * bytes,
- NULL, NULL);
gimp_pickable_get_color_at (GIMP_PICKABLE (drawable),
CLAMP ((gint) coords->x,
@@ -223,24 +229,22 @@ gimp_smudge_start (GimpPaintCore *paint_core,
&pixel);
color = gimp_gegl_color_new (&pixel);
- gegl_buffer_set_color (buffer, &rect, color);
+ gegl_buffer_set_color (accum_buffer, NULL, color);
g_object_unref (color);
-
- g_object_unref (buffer);
}
- pixel_region_init (&srcPR, gimp_drawable_get_tiles (drawable),
- area->x, area->y, area->width, area->height, FALSE);
-
- pixel_region_init_data (&smudge->accumPR, smudge->accum_data,
- bytes, bytes * smudge->accum_size,
- area->x - x,
- area->y - y,
- area->width,
- area->height);
-
/* copy the region under the original painthit. */
- copy_region (&srcPR, &smudge->accumPR);
+ gegl_buffer_copy (gimp_drawable_get_buffer (drawable),
+ GIMP_GEGL_RECT (paint_buffer_x,
+ paint_buffer_y,
+ gegl_buffer_get_width (paint_buffer),
+ gegl_buffer_get_height (paint_buffer)),
+ accum_buffer,
+ GIMP_GEGL_RECT (paint_buffer_x - x,
+ paint_buffer_y - y,
+ 0, 0));
+
+ g_object_unref (accum_buffer);
pixel_region_init_data (&smudge->accumPR, smudge->accum_data,
bytes, bytes * smudge->accum_size,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]