[gimp/pippin/goat-invasion] app: replace some copy_region() by gegl_buffer_copy()
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/pippin/goat-invasion] app: replace some copy_region() by gegl_buffer_copy()
- Date: Wed, 14 Mar 2012 23:03:45 +0000 (UTC)
commit 0334c0a66a09d1db9c3a22b303dc98b0ae70fd52
Author: Michael Natterer <mitch gimp org>
Date: Thu Mar 15 00:03:07 2012 +0100
app: replace some copy_region() by gegl_buffer_copy()
app/core/gimpdrawable-offset.c | 131 ++++++++++++++++++++++------------------
app/core/gimpdrawable.c | 23 +++----
2 files changed, 81 insertions(+), 73 deletions(-)
---
diff --git a/app/core/gimpdrawable-offset.c b/app/core/gimpdrawable-offset.c
index fcd5c51..5a24d34 100644
--- a/app/core/gimpdrawable-offset.c
+++ b/app/core/gimpdrawable-offset.c
@@ -32,6 +32,8 @@
#include "paint-funcs/paint-funcs.h"
+#include "gegl/gimp-gegl-utils.h"
+
#include "gimp.h"
#include "gimpcontext.h"
#include "gimpdrawable.h"
@@ -49,13 +51,17 @@ gimp_drawable_offset (GimpDrawable *drawable,
gint offset_x,
gint offset_y)
{
- GimpItem *item;
- PixelRegion srcPR, destPR;
- TileManager *new_tiles;
- gint width, height;
- gint src_x, src_y;
- gint dest_x, dest_y;
- guchar fill[MAX_CHANNELS] = { 0 };
+ GimpItem *item;
+ PixelRegion destPR;
+ TileManager *new_tiles;
+ GeglBuffer *src_buffer;
+ GeglBuffer *dest_buffer;
+ GeglRectangle src_rect;
+ GeglRectangle dest_rect;
+ gint width, height;
+ gint src_x, src_y;
+ gint dest_x, dest_y;
+ guchar fill[MAX_CHANNELS] = { 0 };
g_return_if_fail (GIMP_IS_DRAWABLE (drawable));
g_return_if_fail (GIMP_IS_CONTEXT (context));
@@ -86,6 +92,10 @@ gimp_drawable_offset (GimpDrawable *drawable,
return;
new_tiles = tile_manager_new (width, height, gimp_drawable_bytes (drawable));
+
+ src_buffer = gimp_drawable_get_buffer (drawable, FALSE);
+ dest_buffer = gimp_tile_manager_get_gegl_buffer (new_tiles, TRUE);
+
if (offset_x >= 0)
{
src_x = 0;
@@ -115,17 +125,21 @@ gimp_drawable_offset (GimpDrawable *drawable,
/* Copy the center region */
if (width && height)
{
- pixel_region_init (&srcPR, gimp_drawable_get_tiles (drawable),
- src_x, src_y, width, height, FALSE);
- pixel_region_init (&destPR, new_tiles,
- dest_x, dest_y, width, height, TRUE);
+ src_rect.x = src_x;
+ src_rect.y = src_y;
+ src_rect.width = width;
+ src_rect.height = height;
+
+ dest_rect.x = dest_x;
+ dest_rect.y = dest_y;
- copy_region (&srcPR, &destPR);
+ gegl_buffer_copy (src_buffer, &src_rect, dest_buffer, &dest_rect);
}
- /* Copy appropriately for wrap around */
- if (wrap_around == TRUE)
+ if (wrap_around)
{
+ /* Copy appropriately for wrap around */
+
if (offset_x >= 0 && offset_y >= 0)
{
src_x = gimp_item_get_width (item) - offset_x;
@@ -158,15 +172,15 @@ gimp_drawable_offset (GimpDrawable *drawable,
/* intersecting region */
if (offset_x != 0 && offset_y != 0)
{
- pixel_region_init (&srcPR, gimp_drawable_get_tiles (drawable),
- src_x, src_y,
- ABS (offset_x), ABS (offset_y),
- FALSE);
- pixel_region_init (&destPR, new_tiles,
- dest_x, dest_y,
- ABS (offset_x), ABS (offset_y),
- TRUE);
- copy_region (&srcPR, &destPR);
+ src_rect.x = src_x;
+ src_rect.y = src_y;
+ src_rect.width = ABS (offset_x);
+ src_rect.height = ABS (offset_y);
+
+ dest_rect.x = dest_x;
+ dest_rect.y = dest_y;
+
+ gegl_buffer_copy (src_buffer, &src_rect, dest_buffer, &dest_rect);
}
/* X offset */
@@ -174,31 +188,26 @@ gimp_drawable_offset (GimpDrawable *drawable,
{
if (offset_y >= 0)
{
- pixel_region_init (&srcPR, gimp_drawable_get_tiles (drawable),
- src_x, 0, ABS (offset_x),
- gimp_item_get_height (item) - ABS (offset_y),
- FALSE);
- pixel_region_init (&destPR, new_tiles,
- dest_x, dest_y + offset_y,
- ABS (offset_x),
- gimp_item_get_height (item) - ABS (offset_y),
- TRUE);
+ src_rect.x = src_x;
+ src_rect.y = 0;
+ src_rect.width = ABS (offset_x);
+ src_rect.height = gimp_item_get_height (item) - ABS (offset_y);
+
+ dest_rect.x = dest_x;
+ dest_rect.y = dest_y + offset_y;
}
else if (offset_y < 0)
{
- pixel_region_init (&srcPR, gimp_drawable_get_tiles (drawable),
- src_x, src_y - offset_y,
- ABS (offset_x),
- gimp_item_get_height (item) - ABS (offset_y),
- FALSE);
- pixel_region_init (&destPR, new_tiles,
- dest_x, 0,
- ABS (offset_x),
- gimp_item_get_height (item) - ABS (offset_y),
- TRUE);
+ src_rect.x = src_x;
+ src_rect.y = src_y - offset_y;
+ src_rect.width = ABS (offset_x);
+ src_rect.height = gimp_item_get_height (item) - ABS (offset_y);
+
+ dest_rect.x = dest_x;
+ dest_rect.y = 0;
}
- copy_region (&srcPR, &destPR);
+ gegl_buffer_copy (src_buffer, &src_rect, dest_buffer, &dest_rect);
}
/* X offset */
@@ -206,31 +215,32 @@ gimp_drawable_offset (GimpDrawable *drawable,
{
if (offset_x >= 0)
{
- pixel_region_init (&srcPR, gimp_drawable_get_tiles (drawable),
- 0, src_y,
- gimp_item_get_width (item) - ABS (offset_x),
- ABS (offset_y), FALSE);
- pixel_region_init (&destPR, new_tiles, dest_x + offset_x, dest_y,
- gimp_item_get_width (item) - ABS (offset_x),
- ABS (offset_y), TRUE);
+ src_rect.x = 0;
+ src_rect.y = src_y;
+ src_rect.width = gimp_item_get_width (item) - ABS (offset_x);
+ src_rect.height = ABS (offset_y);
+
+ dest_rect.x = dest_x + offset_x;
+ dest_rect.y = dest_y;
}
else if (offset_x < 0)
{
- pixel_region_init (&srcPR, gimp_drawable_get_tiles (drawable),
- src_x - offset_x, src_y,
- gimp_item_get_width (item) - ABS (offset_x),
- ABS (offset_y), FALSE);
- pixel_region_init (&destPR, new_tiles, 0, dest_y,
- gimp_item_get_width (item) - ABS (offset_x),
- ABS (offset_y), TRUE);
+ src_rect.x = src_x - offset_x;
+ src_rect.y = src_y;
+ src_rect.width = gimp_item_get_width (item) - ABS (offset_x);
+ src_rect.height = ABS (offset_y);
+
+ dest_rect.x = 0;
+ dest_rect.y = dest_y;
}
- copy_region (&srcPR, &destPR);
+ gegl_buffer_copy (src_buffer, &src_rect, dest_buffer, &dest_rect);
}
}
- /* Otherwise, fill the vacated regions */
else
{
+ /* Otherwise, fill the vacated regions */
+
if (fill_type == GIMP_OFFSET_BACKGROUND)
{
GimpRGB color;
@@ -312,6 +322,9 @@ gimp_drawable_offset (GimpDrawable *drawable,
}
}
+ g_object_unref (src_buffer);
+ g_object_unref (dest_buffer);
+
gimp_drawable_set_tiles (drawable, gimp_item_is_attached (item),
C_("undo-type", "Offset Drawable"), new_tiles,
gimp_drawable_type (drawable));
diff --git a/app/core/gimpdrawable.c b/app/core/gimpdrawable.c
index 19e2f88..008c88c 100644
--- a/app/core/gimpdrawable.c
+++ b/app/core/gimpdrawable.c
@@ -422,8 +422,8 @@ gimp_drawable_duplicate (GimpItem *item,
GimpDrawable *drawable = GIMP_DRAWABLE (item);
GimpDrawable *new_drawable = GIMP_DRAWABLE (new_item);
GimpImageType image_type = gimp_drawable_type (drawable);
- PixelRegion srcPR;
- PixelRegion destPR;
+ GeglBuffer *src;
+ GeglBuffer *dest;
new_drawable->private->type = image_type;
@@ -435,18 +435,13 @@ gimp_drawable_duplicate (GimpItem *item,
gimp_item_get_height (new_item),
gimp_drawable_bytes (new_drawable));
- pixel_region_init (&srcPR, gimp_drawable_get_tiles (drawable),
- 0, 0,
- gimp_item_get_width (item),
- gimp_item_get_height (item),
- FALSE);
- pixel_region_init (&destPR, gimp_drawable_get_tiles (new_drawable),
- 0, 0,
- gimp_item_get_width (new_item),
- gimp_item_get_height (new_item),
- TRUE);
+ src = gimp_drawable_get_buffer (drawable, FALSE);
+ dest = gimp_drawable_get_buffer (new_drawable, TRUE);
- copy_region (&srcPR, &destPR);
+ gegl_buffer_copy (src, NULL, dest, NULL);
+
+ g_object_unref (src);
+ g_object_unref (dest);
}
return new_item;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]