[gimp] app: change GimpDrawable::replace_region() by ::replace_buffer()
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: change GimpDrawable::replace_region() by ::replace_buffer()
- Date: Wed, 2 May 2012 16:16:03 +0000 (UTC)
commit 061e044e0a9aca2d217aad4d77e96225d55a1737
Author: Michael Natterer <mitch gimp org>
Date: Fri Mar 23 12:31:21 2012 +0100
app: change GimpDrawable::replace_region() by ::replace_buffer()
app/core/gimpchannel.c | 27 ++++++++++++----------
app/core/gimpdrawable-combine.c | 47 +++++++++++++++++++++++++++-----------
app/core/gimpdrawable-combine.h | 5 ++-
app/core/gimpdrawable.c | 24 ++++++++++---------
app/core/gimpdrawable.h | 10 +++++---
app/paint/gimppaintcore.c | 16 ++++++++-----
6 files changed, 80 insertions(+), 49 deletions(-)
---
diff --git a/app/core/gimpchannel.c b/app/core/gimpchannel.c
index 3a7641e..fdee4cd 100644
--- a/app/core/gimpchannel.c
+++ b/app/core/gimpchannel.c
@@ -149,8 +149,9 @@ static void gimp_channel_apply_buffer (GimpDrawable *drawable,
PixelRegion *destPR,
gint x,
gint y);
-static void gimp_channel_replace_region (GimpDrawable *drawable,
- PixelRegion *src2PR,
+static void gimp_channel_replace_buffer (GimpDrawable *drawable,
+ GeglBuffer *buffer,
+ const GeglRectangle *buffer_region,
gboolean push_undo,
const gchar *undo_desc,
gdouble opacity,
@@ -289,7 +290,7 @@ gimp_channel_class_init (GimpChannelClass *klass)
drawable_class->invalidate_boundary = gimp_channel_invalidate_boundary;
drawable_class->get_active_components = gimp_channel_get_active_components;
drawable_class->apply_buffer = gimp_channel_apply_buffer;
- drawable_class->replace_region = gimp_channel_replace_region;
+ drawable_class->replace_buffer = gimp_channel_replace_buffer;
drawable_class->project_region = gimp_channel_project_region;
drawable_class->set_buffer = gimp_channel_set_buffer;
drawable_class->swap_pixels = gimp_channel_swap_pixels;
@@ -831,18 +832,20 @@ gimp_channel_apply_buffer (GimpDrawable *drawable,
}
static void
-gimp_channel_replace_region (GimpDrawable *drawable,
- PixelRegion *src2PR,
- gboolean push_undo,
- const gchar *undo_desc,
- gdouble opacity,
- PixelRegion *maskPR,
- gint x,
- gint y)
+gimp_channel_replace_buffer (GimpDrawable *drawable,
+ GeglBuffer *buffer,
+ const GeglRectangle *buffer_region,
+ gboolean push_undo,
+ const gchar *undo_desc,
+ gdouble opacity,
+ PixelRegion *maskPR,
+ gint x,
+ gint y)
{
gimp_drawable_invalidate_boundary (drawable);
- GIMP_DRAWABLE_CLASS (parent_class)->replace_region (drawable, src2PR,
+ GIMP_DRAWABLE_CLASS (parent_class)->replace_buffer (drawable, buffer,
+ buffer_region,
push_undo, undo_desc,
opacity,
maskPR,
diff --git a/app/core/gimpdrawable-combine.c b/app/core/gimpdrawable-combine.c
index eba30d3..56512b9 100644
--- a/app/core/gimpdrawable-combine.c
+++ b/app/core/gimpdrawable-combine.c
@@ -206,24 +206,43 @@ gimp_drawable_real_apply_buffer (GimpDrawable *drawable,
* Takes an additional mask pixel region as well.
*/
void
-gimp_drawable_real_replace_region (GimpDrawable *drawable,
- PixelRegion *src2PR,
- gboolean push_undo,
- const gchar *undo_desc,
- gdouble opacity,
- PixelRegion *maskPR,
- gint dest_x,
- gint dest_y)
+gimp_drawable_real_replace_buffer (GimpDrawable *drawable,
+ GeglBuffer *buffer,
+ const GeglRectangle *buffer_region,
+ gboolean push_undo,
+ const gchar *undo_desc,
+ gdouble opacity,
+ PixelRegion *maskPR,
+ gint dest_x,
+ gint dest_y)
{
GimpItem *item = GIMP_ITEM (drawable);
GimpImage *image = gimp_item_get_image (item);
GimpChannel *mask = gimp_image_get_mask (image);
+ TempBuf *temp_buf;
+ PixelRegion src2PR;
gint x, y, width, height;
gint offset_x, offset_y;
PixelRegion src1PR, destPR;
CombinationMode operation;
gboolean active_components[MAX_CHANNELS];
+ temp_buf = gimp_gegl_buffer_get_temp_buf (buffer);
+
+ if (temp_buf)
+ {
+ pixel_region_init_temp_buf (&src2PR, temp_buf,
+ buffer_region->x, buffer_region->y,
+ buffer_region->width, buffer_region->height);
+ }
+ else
+ {
+ pixel_region_init (&src2PR, gimp_gegl_buffer_get_tiles (buffer),
+ buffer_region->x, buffer_region->y,
+ buffer_region->width, buffer_region->height,
+ FALSE);
+ }
+
/* don't apply the mask to itself and don't apply an empty mask */
if (GIMP_DRAWABLE (mask) == drawable || gimp_channel_is_empty (mask))
mask = NULL;
@@ -235,7 +254,7 @@ gimp_drawable_real_replace_region (GimpDrawable *drawable,
* if it's actually legal...
*/
operation = gimp_image_get_combination_mode (gimp_drawable_type (drawable),
- src2PR->bytes);
+ src2PR.bytes);
if (operation == -1)
{
g_warning ("%s: illegal parameters.", G_STRFUNC);
@@ -246,7 +265,7 @@ gimp_drawable_real_replace_region (GimpDrawable *drawable,
gimp_item_get_offset (item, &offset_x, &offset_y);
/* make sure the image application coordinates are within drawable bounds */
- gimp_rectangle_intersect (dest_x, dest_y, src2PR->w, src2PR->h,
+ gimp_rectangle_intersect (dest_x, dest_y, src2PR.w, src2PR.h,
0, 0,
gimp_item_get_width (item),
gimp_item_get_height (item),
@@ -279,8 +298,8 @@ gimp_drawable_real_replace_region (GimpDrawable *drawable,
pixel_region_init (&destPR, gimp_drawable_get_tiles (drawable),
x, y, width, height,
TRUE);
- pixel_region_resize (src2PR,
- src2PR->x + (x - dest_x), src2PR->y + (y - dest_y),
+ pixel_region_resize (&src2PR,
+ src2PR.x + (x - dest_x), src2PR.y + (y - dest_y),
width, height);
if (mask)
@@ -308,7 +327,7 @@ gimp_drawable_real_replace_region (GimpDrawable *drawable,
pixel_region_init_data (&tempPR, temp_data, 1, width,
0, 0, width, height);
- combine_regions_replace (&src1PR, src2PR, &destPR, &tempPR, NULL,
+ combine_regions_replace (&src1PR, &src2PR, &destPR, &tempPR, NULL,
opacity * 255.999,
active_components,
operation);
@@ -317,7 +336,7 @@ gimp_drawable_real_replace_region (GimpDrawable *drawable,
}
else
{
- combine_regions_replace (&src1PR, src2PR, &destPR, maskPR, NULL,
+ combine_regions_replace (&src1PR, &src2PR, &destPR, maskPR, NULL,
opacity * 255.999,
active_components,
operation);
diff --git a/app/core/gimpdrawable-combine.h b/app/core/gimpdrawable-combine.h
index 27a40e8..25e39a7 100644
--- a/app/core/gimpdrawable-combine.h
+++ b/app/core/gimpdrawable-combine.h
@@ -32,8 +32,9 @@ void gimp_drawable_real_apply_buffer (GimpDrawable *drawable,
PixelRegion *destPR,
gint x,
gint y);
-void gimp_drawable_real_replace_region (GimpDrawable *drawable,
- PixelRegion *src2PR,
+void gimp_drawable_real_replace_buffer (GimpDrawable *drawable,
+ GeglBuffer *buffer,
+ const GeglRectangle *buffer_region,
gboolean push_undo,
const gchar *undo_desc,
gdouble opacity,
diff --git a/app/core/gimpdrawable.c b/app/core/gimpdrawable.c
index 3cd2fe9..d5f6cbd 100644
--- a/app/core/gimpdrawable.c
+++ b/app/core/gimpdrawable.c
@@ -240,7 +240,7 @@ gimp_drawable_class_init (GimpDrawableClass *klass)
klass->get_active_components = NULL;
klass->convert_type = gimp_drawable_real_convert_type;
klass->apply_buffer = gimp_drawable_real_apply_buffer;
- klass->replace_region = gimp_drawable_real_replace_region;
+ klass->replace_buffer = gimp_drawable_real_replace_buffer;
klass->get_buffer = gimp_drawable_real_get_buffer;
klass->set_buffer = gimp_drawable_real_set_buffer;
klass->push_undo = gimp_drawable_real_push_undo;
@@ -1263,21 +1263,23 @@ gimp_drawable_apply_buffer (GimpDrawable *drawable,
}
void
-gimp_drawable_replace_region (GimpDrawable *drawable,
- PixelRegion *src2PR,
- gboolean push_undo,
- const gchar *undo_desc,
- gdouble opacity,
- PixelRegion *maskPR,
- gint x,
- gint y)
+gimp_drawable_replace_buffer (GimpDrawable *drawable,
+ GeglBuffer *buffer,
+ const GeglRectangle *buffer_region,
+ gboolean push_undo,
+ const gchar *undo_desc,
+ gdouble opacity,
+ PixelRegion *maskPR,
+ gint x,
+ gint y)
{
g_return_if_fail (GIMP_IS_DRAWABLE (drawable));
g_return_if_fail (gimp_item_is_attached (GIMP_ITEM (drawable)));
- g_return_if_fail (src2PR != NULL);
+ g_return_if_fail (GEGL_IS_BUFFER (buffer));
g_return_if_fail (maskPR != NULL);
- GIMP_DRAWABLE_GET_CLASS (drawable)->replace_region (drawable, src2PR,
+ GIMP_DRAWABLE_GET_CLASS (drawable)->replace_buffer (drawable, buffer,
+ buffer_region,
push_undo, undo_desc,
opacity, maskPR,
x, y);
diff --git a/app/core/gimpdrawable.h b/app/core/gimpdrawable.h
index 4745459..f20b7a8 100644
--- a/app/core/gimpdrawable.h
+++ b/app/core/gimpdrawable.h
@@ -74,8 +74,9 @@ struct _GimpDrawableClass
PixelRegion *destPR,
gint x,
gint y);
- void (* replace_region) (GimpDrawable *drawable,
- PixelRegion *src2PR,
+ void (* replace_buffer) (GimpDrawable *drawable,
+ GeglBuffer *buffer,
+ const GeglRectangle *buffer_region,
gboolean push_undo,
const gchar *undo_desc,
gdouble opacity,
@@ -152,8 +153,9 @@ void gimp_drawable_apply_buffer (GimpDrawable *drawable,
PixelRegion *destPR,
gint x,
gint y);
-void gimp_drawable_replace_region (GimpDrawable *drawable,
- PixelRegion *src2PR,
+void gimp_drawable_replace_buffer (GimpDrawable *drawable,
+ GeglBuffer *buffer,
+ const GeglRectangle *buffer_region,
gboolean push_undo,
const gchar *undo_desc,
gdouble opacity,
diff --git a/app/paint/gimppaintcore.c b/app/paint/gimppaintcore.c
index da6f1c1..99d3a08 100644
--- a/app/paint/gimppaintcore.c
+++ b/app/paint/gimppaintcore.c
@@ -969,7 +969,7 @@ gimp_paint_core_replace (GimpPaintCore *core,
gdouble image_opacity,
GimpPaintApplicationMode mode)
{
- PixelRegion srcPR;
+ GeglBuffer *canvas_buffer;
if (! gimp_drawable_has_alpha (drawable))
{
@@ -1012,19 +1012,23 @@ gimp_paint_core_replace (GimpPaintCore *core,
}
/* intialize canvas buf source pixel regions */
- pixel_region_init_temp_buf (&srcPR, core->canvas_buf,
- 0, 0,
- core->canvas_buf->width,
- core->canvas_buf->height);
+ canvas_buffer =
+ gimp_temp_buf_create_buffer (core->canvas_buf,
+ gimp_drawable_get_format_with_alpha (drawable));
/* apply the paint area to the image */
- gimp_drawable_replace_region (drawable, &srcPR,
+ gimp_drawable_replace_buffer (drawable, canvas_buffer,
+ GIMP_GEGL_RECT (0, 0,
+ core->canvas_buf->width,
+ core->canvas_buf->height),
FALSE, NULL,
image_opacity,
paint_maskPR,
core->canvas_buf->x,
core->canvas_buf->y);
+ g_object_unref (canvas_buffer);
+
/* Update the undo extents */
core->x1 = MIN (core->x1, core->canvas_buf->x);
core->y1 = MIN (core->y1, core->canvas_buf->y);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]