[gimp] app: port GimpSourceCore and its classes to painting to the paint_buffer
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: port GimpSourceCore and its classes to painting to the paint_buffer
- Date: Wed, 2 May 2012 16:29:16 +0000 (UTC)
commit b4996f2605da699ef2cb68bf9547ca8532f45bac
Author: Michael Natterer <mitch gimp org>
Date: Sun Apr 1 21:02:49 2012 +0200
app: port GimpSourceCore and its classes to painting to the paint_buffer
app/paint/gimpclone.c | 22 ++++++--------
app/paint/gimpheal.c | 57 ++++++++++++++++++--------------------
app/paint/gimpperspectiveclone.c | 16 ++++++----
app/paint/gimpsourcecore.c | 48 ++++++++++++++++++++------------
app/paint/gimpsourcecore.h | 10 +++++-
5 files changed, 85 insertions(+), 68 deletions(-)
---
diff --git a/app/paint/gimpclone.c b/app/paint/gimpclone.c
index 0445180..078ae20 100644
--- a/app/paint/gimpclone.c
+++ b/app/paint/gimpclone.c
@@ -61,7 +61,9 @@ static void gimp_clone_motion (GimpSourceCore *source_core,
GeglRectangle *src_rect,
gint src_offset_x,
gint src_offset_y,
- TempBuf *paint_area,
+ GeglBuffer *paint_buffer,
+ gint paint_buffer_x,
+ gint paint_buffer_y,
gint paint_area_offset_x,
gint paint_area_offset_y,
gint paint_area_width,
@@ -141,7 +143,9 @@ gimp_clone_motion (GimpSourceCore *source_core,
GeglRectangle *src_rect,
gint src_offset_x,
gint src_offset_y,
- TempBuf *paint_area,
+ GeglBuffer *paint_buffer,
+ gint paint_buffer_x,
+ gint paint_buffer_y,
gint paint_area_offset_x,
gint paint_area_offset_y,
gint paint_area_width,
@@ -153,13 +157,9 @@ gimp_clone_motion (GimpSourceCore *source_core,
GimpContext *context = GIMP_CONTEXT (paint_options);
GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
GimpDynamicsOutput *force_output;
- GeglBuffer *dest_buffer;
gdouble fade_point;
gdouble force;
- dest_buffer = gimp_temp_buf_create_buffer (paint_area,
- gimp_drawable_get_format_with_alpha (drawable));
-
switch (options->clone_type)
{
case GIMP_IMAGE_CLONE:
@@ -169,7 +169,7 @@ gimp_clone_motion (GimpSourceCore *source_core,
src_rect->y,
paint_area_width,
paint_area_height),
- dest_buffer,
+ paint_buffer,
GIMP_GEGL_RECT (paint_area_offset_x,
paint_area_offset_y,
0, 0));
@@ -182,14 +182,14 @@ gimp_clone_motion (GimpSourceCore *source_core,
GimpPattern *pattern = gimp_context_get_pattern (context);
GeglBuffer *src_buffer = gimp_pattern_create_buffer (pattern);
- gegl_buffer_set_pattern (dest_buffer,
+ gegl_buffer_set_pattern (paint_buffer,
GIMP_GEGL_RECT (paint_area_offset_x,
paint_area_offset_y,
paint_area_width,
paint_area_height),
src_buffer,
- - paint_area->x - src_offset_x,
- - paint_area->y - src_offset_y);
+ - paint_buffer_x - src_offset_x,
+ - paint_buffer_y - src_offset_y);
/* XXX: move this to FINISH */
g_object_unref (src_buffer);
@@ -197,8 +197,6 @@ gimp_clone_motion (GimpSourceCore *source_core,
break;
}
- g_object_unref (dest_buffer);
-
force_output = gimp_dynamics_get_output (GIMP_BRUSH_CORE (paint_core)->dynamics,
GIMP_DYNAMICS_OUTPUT_FORCE);
diff --git a/app/paint/gimpheal.c b/app/paint/gimpheal.c
index 38b0c94..2238d56 100644
--- a/app/paint/gimpheal.c
+++ b/app/paint/gimpheal.c
@@ -26,8 +26,6 @@
#include "paint-types.h"
-#include "paint-funcs/paint-funcs.h"
-
#include "base/pixel-region.h"
#include "base/temp-buf.h"
@@ -108,7 +106,9 @@ static void gimp_heal_motion (GimpSourceCore *source_core,
GeglRectangle *src_rect,
gint src_offset_x,
gint src_offset_y,
- TempBuf *paint_area,
+ GeglBuffer *paint_buffer,
+ gint paint_buffer_x,
+ gint paint_buffer_y,
gint paint_area_offset_x,
gint paint_area_offset_y,
gint paint_area_width,
@@ -447,7 +447,9 @@ gimp_heal_motion (GimpSourceCore *source_core,
GeglRectangle *src_rect,
gint src_offset_x,
gint src_offset_y,
- TempBuf *paint_area,
+ GeglBuffer *paint_buffer,
+ gint paint_buffer_x,
+ gint paint_buffer_y,
gint paint_area_offset_x,
gint paint_area_offset_y,
gint paint_area_width,
@@ -460,6 +462,7 @@ gimp_heal_motion (GimpSourceCore *source_core,
GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
TempBuf *src_temp_buf;
TempBuf *dest_temp_buf;
+ GeglBuffer *dest_buffer;
PixelRegion srcPR;
PixelRegion destPR;
const TempBuf *mask_buf;
@@ -498,24 +501,21 @@ gimp_heal_motion (GimpSourceCore *source_core,
g_object_unref (tmp);
}
- {
- GeglBuffer *tmp;
+ dest_temp_buf = temp_buf_new (gegl_buffer_get_width (paint_buffer),
+ gegl_buffer_get_height (paint_buffer),
+ gimp_drawable_bytes_with_alpha (drawable),
+ 0, 0, NULL);
- dest_temp_buf = temp_buf_new (paint_area->width,
- paint_area->height,
- gimp_drawable_bytes_with_alpha (drawable),
- 0, 0, NULL);
-
- tmp = gimp_temp_buf_create_buffer (dest_temp_buf,
- gimp_drawable_get_format_with_alpha (drawable));
+ dest_buffer =
+ gimp_temp_buf_create_buffer (dest_temp_buf,
+ gimp_drawable_get_format_with_alpha (drawable));
- gegl_buffer_copy (gimp_drawable_get_buffer (drawable),
- GIMP_GEGL_RECT (paint_area->x, paint_area->y,
- paint_area->width, paint_area->height),
- tmp,
- GIMP_GEGL_RECT (0, 0, 0, 0));
- g_object_unref (tmp);
- }
+ 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)),
+ dest_buffer,
+ GIMP_GEGL_RECT (0, 0, 0, 0));
/* check that srcPR, tempPR, destPR, and mask_buf are the same size */
if (src_temp_buf->width != dest_temp_buf->width ||
@@ -541,16 +541,13 @@ gimp_heal_motion (GimpSourceCore *source_core,
/* heal destPR using srcPR */
gimp_heal_region (&destPR, &srcPR, mask_buf);
- pixel_region_init_temp_buf (&srcPR, dest_temp_buf,
- 0, 0,
- mask_buf->width, mask_buf->height);
- pixel_region_init_temp_buf (&destPR, paint_area,
- paint_area_offset_x,
- paint_area_offset_y,
- paint_area_width,
- paint_area_height);
-
- copy_region (&srcPR, &destPR);
+ gegl_buffer_copy (dest_buffer,
+ GIMP_GEGL_RECT (0, 0, mask_buf->width, mask_buf->height),
+ paint_buffer,
+ GIMP_GEGL_RECT (paint_area_offset_x,
+ paint_area_offset_y,
+ paint_area_width,
+ paint_area_height));
/* replace the canvas with our healed data */
gimp_brush_core_replace_canvas (GIMP_BRUSH_CORE (paint_core), drawable,
diff --git a/app/paint/gimpperspectiveclone.c b/app/paint/gimpperspectiveclone.c
index f8f6f63..37bb3d5 100644
--- a/app/paint/gimpperspectiveclone.c
+++ b/app/paint/gimpperspectiveclone.c
@@ -64,7 +64,9 @@ static GeglBuffer * gimp_perspective_clone_get_source (GimpSourceCore *source_
GimpPickable *src_pickable,
gint src_offset_x,
gint src_offset_y,
- TempBuf *paint_area,
+ GeglBuffer *paint_buffer,
+ gint paint_buffer_x,
+ gint paint_buffer_y,
gint *paint_area_offset_x,
gint *paint_area_offset_y,
gint *paint_area_width,
@@ -337,7 +339,9 @@ gimp_perspective_clone_get_source (GimpSourceCore *source_core,
GimpPickable *src_pickable,
gint src_offset_x,
gint src_offset_y,
- TempBuf *paint_area,
+ GeglBuffer *paint_buffer,
+ gint paint_buffer_x,
+ gint paint_buffer_y,
gint *paint_area_offset_x,
gint *paint_area_offset_y,
gint *paint_area_width,
@@ -358,10 +362,10 @@ gimp_perspective_clone_get_source (GimpSourceCore *source_core,
src_format_alpha = gimp_pickable_get_format_with_alpha (src_pickable);
/* Destination coordinates that will be painted */
- x1d = paint_area->x;
- y1d = paint_area->y;
- x2d = paint_area->x + paint_area->width;
- y2d = paint_area->y + paint_area->height;
+ x1d = paint_buffer_x;
+ y1d = paint_buffer_y;
+ x2d = paint_buffer_x + gegl_buffer_get_width (paint_buffer);
+ y2d = paint_buffer_y + gegl_buffer_get_height (paint_buffer);
/* Boundary box for source pixels to copy: Convert all the vertex of
* the box to paint in destination area to its correspondent in
diff --git a/app/paint/gimpsourcecore.c b/app/paint/gimpsourcecore.c
index 6fa09b7..4124d4d 100644
--- a/app/paint/gimpsourcecore.c
+++ b/app/paint/gimpsourcecore.c
@@ -85,7 +85,9 @@ static GeglBuffer *
GimpPickable *src_pickable,
gint src_offset_x,
gint src_offset_y,
- TempBuf *paint_area,
+ GeglBuffer *paint_buffer,
+ gint paint_buffer_x,
+ gint paint_buffer_y,
gint *paint_area_offset_x,
gint *paint_area_offset_y,
gint *paint_area_width,
@@ -356,7 +358,9 @@ gimp_source_core_motion (GimpSourceCore *source_core,
GeglRectangle src_rect;
gint src_offset_x;
gint src_offset_y;
- TempBuf *paint_area;
+ GeglBuffer *paint_buffer;
+ gint paint_buffer_x;
+ gint paint_buffer_y;
gint paint_area_offset_x;
gint paint_area_offset_y;
gint paint_area_width;
@@ -401,15 +405,17 @@ gimp_source_core_motion (GimpSourceCore *source_core,
gimp_pickable_flush (src_pickable);
}
- paint_area = gimp_paint_core_get_paint_area (paint_core, drawable,
- paint_options, coords);
- if (! paint_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;
paint_area_offset_x = 0;
paint_area_offset_y = 0;
- paint_area_width = paint_area->width;
- paint_area_height = paint_area->height;
+ paint_area_width = gegl_buffer_get_width (paint_buffer);
+ paint_area_height = gegl_buffer_get_height (paint_buffer);
if (options->use_source)
{
@@ -420,7 +426,9 @@ gimp_source_core_motion (GimpSourceCore *source_core,
src_pickable,
src_offset_x,
src_offset_y,
- paint_area,
+ paint_buffer,
+ paint_buffer_x,
+ paint_buffer_y,
&paint_area_offset_x,
&paint_area_offset_y,
&paint_area_width,
@@ -430,8 +438,8 @@ gimp_source_core_motion (GimpSourceCore *source_core,
return;
}
- /* Set the paint area to transparent */
- temp_buf_data_clear (paint_area);
+ /* Set the paint buffer to transparent */
+ gegl_buffer_clear (paint_buffer, NULL);
GIMP_SOURCE_CORE_GET_CLASS (source_core)->motion (source_core,
drawable,
@@ -443,7 +451,9 @@ gimp_source_core_motion (GimpSourceCore *source_core,
&src_rect,
src_offset_x,
src_offset_y,
- paint_area,
+ paint_buffer,
+ paint_buffer_x,
+ paint_buffer_y,
paint_area_offset_x,
paint_area_offset_y,
paint_area_width,
@@ -460,7 +470,9 @@ gimp_source_core_real_get_source (GimpSourceCore *source_core,
GimpPickable *src_pickable,
gint src_offset_x,
gint src_offset_y,
- TempBuf *paint_area,
+ GeglBuffer *paint_buffer,
+ gint paint_buffer_x,
+ gint paint_buffer_y,
gint *paint_area_offset_x,
gint *paint_area_offset_y,
gint *paint_area_width,
@@ -475,10 +487,10 @@ gimp_source_core_real_get_source (GimpSourceCore *source_core,
gint x, y;
gint width, height;
- if (! gimp_rectangle_intersect (paint_area->x + src_offset_x,
- paint_area->y + src_offset_y,
- paint_area->width,
- paint_area->height,
+ if (! gimp_rectangle_intersect (paint_buffer_x + src_offset_x,
+ paint_buffer_y + src_offset_y,
+ gegl_buffer_get_width (paint_buffer),
+ gegl_buffer_get_height (paint_buffer),
0, 0,
gegl_buffer_get_width (src_buffer),
gegl_buffer_get_height (src_buffer),
@@ -508,8 +520,8 @@ gimp_source_core_real_get_source (GimpSourceCore *source_core,
dest_buffer = gimp_paint_core_get_orig_image (GIMP_PAINT_CORE (source_core));
}
- *paint_area_offset_x = x - (paint_area->x + src_offset_x);
- *paint_area_offset_y = y - (paint_area->y + src_offset_y);
+ *paint_area_offset_x = x - (paint_buffer_x + src_offset_x);
+ *paint_area_offset_y = y - (paint_buffer_y + src_offset_y);
*paint_area_width = width;
*paint_area_height = height;
diff --git a/app/paint/gimpsourcecore.h b/app/paint/gimpsourcecore.h
index e581b70..059dd98 100644
--- a/app/paint/gimpsourcecore.h
+++ b/app/paint/gimpsourcecore.h
@@ -60,7 +60,10 @@ struct _GimpSourceCoreClass
GimpPickable *src_pickable,
gint src_offset_x,
gint src_offset_y,
- TempBuf *paint_area,
+ GeglBuffer *paint_buffer,
+ gint paint_buffer_x,
+ gint paint_buffer_y,
+ /* offsets *into* the paint_buffer: */
gint *paint_area_offset_x,
gint *paint_area_offset_y,
gint *paint_area_width,
@@ -77,7 +80,10 @@ struct _GimpSourceCoreClass
GeglRectangle *src_rect,
gint src_offset_x,
gint src_offset_y,
- TempBuf *paint_area,
+ GeglBuffer *paint_buffer,
+ gint paint_buffer_x,
+ gint paint_buffer_y,
+ /* offsets *into* the paint_buffer: */
gint paint_area_offset_x,
gint paint_area_offset_y,
gint paint_area_width,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]