mirror of https://github.com/GNOME/gimp.git
app: port GimpSourceCore and its classes to painting to the paint_buffer
This commit is contained in:
parent
0e458f9613
commit
b4996f2605
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
dest_buffer =
|
||||
gimp_temp_buf_create_buffer (dest_temp_buf,
|
||||
gimp_drawable_get_format_with_alpha (drawable));
|
||||
|
||||
tmp = 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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue