mirror of https://github.com/GNOME/gimp.git
app: change GimpDrawable::replace_region() by ::replace_buffer()
This commit is contained in:
parent
a4c83d13ed
commit
061e044e0a
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue