mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice-common
synced 2026-08-07 06:07:02 +00:00
canvas_base: Remove canvas_draw_blend/canvas_draw_copy duplication
The 2 functions are exactly the same. Signed-off-by: Frediano Ziglio <freddy77@gmail.com> Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
This commit is contained in:
parent
3caedf3bc2
commit
4c6b360f6b
@ -2484,126 +2484,6 @@ static void canvas_draw_opaque(SpiceCanvas *spice_canvas, SpiceRect *bbox, Spice
|
||||
pixman_region32_fini(&dest_region);
|
||||
}
|
||||
|
||||
static void canvas_draw_blend(SpiceCanvas *spice_canvas, SpiceRect *bbox, SpiceClip *clip, SpiceBlend *copy)
|
||||
{
|
||||
CanvasBase *canvas = (CanvasBase *)spice_canvas;
|
||||
pixman_region32_t dest_region;
|
||||
SpiceCanvas *surface_canvas;
|
||||
pixman_image_t *src_image;
|
||||
SpiceROP rop;
|
||||
|
||||
pixman_region32_init_rect(&dest_region,
|
||||
bbox->left, bbox->top,
|
||||
bbox->right - bbox->left,
|
||||
bbox->bottom - bbox->top);
|
||||
|
||||
canvas_clip_pixman(canvas, &dest_region, clip);
|
||||
canvas_mask_pixman(canvas, &dest_region, ©->mask,
|
||||
bbox->left, bbox->top);
|
||||
|
||||
rop = ropd_descriptor_to_rop(copy->rop_descriptor,
|
||||
ROP_INPUT_SRC,
|
||||
ROP_INPUT_DEST);
|
||||
|
||||
if (rop == SPICE_ROP_NOOP || !pixman_region32_not_empty(&dest_region)) {
|
||||
canvas_touch_image(canvas, copy->src_bitmap);
|
||||
pixman_region32_fini(&dest_region);
|
||||
return;
|
||||
}
|
||||
|
||||
surface_canvas = canvas_get_surface(canvas, copy->src_bitmap);
|
||||
if (surface_canvas) {
|
||||
if (rect_is_same_size(bbox, ©->src_area)) {
|
||||
if (rop == SPICE_ROP_COPY) {
|
||||
spice_canvas->ops->blit_image_from_surface(spice_canvas, &dest_region,
|
||||
surface_canvas,
|
||||
bbox->left - copy->src_area.left,
|
||||
bbox->top - copy->src_area.top);
|
||||
} else {
|
||||
spice_canvas->ops->blit_image_rop_from_surface(spice_canvas, &dest_region,
|
||||
surface_canvas,
|
||||
bbox->left - copy->src_area.left,
|
||||
bbox->top - copy->src_area.top,
|
||||
rop);
|
||||
}
|
||||
} else {
|
||||
if (rop == SPICE_ROP_COPY) {
|
||||
spice_canvas->ops->scale_image_from_surface(spice_canvas, &dest_region,
|
||||
surface_canvas,
|
||||
copy->src_area.left,
|
||||
copy->src_area.top,
|
||||
copy->src_area.right - copy->src_area.left,
|
||||
copy->src_area.bottom - copy->src_area.top,
|
||||
bbox->left,
|
||||
bbox->top,
|
||||
bbox->right - bbox->left,
|
||||
bbox->bottom - bbox->top,
|
||||
copy->scale_mode);
|
||||
} else {
|
||||
spice_canvas->ops->scale_image_rop_from_surface(spice_canvas, &dest_region,
|
||||
surface_canvas,
|
||||
copy->src_area.left,
|
||||
copy->src_area.top,
|
||||
copy->src_area.right - copy->src_area.left,
|
||||
copy->src_area.bottom - copy->src_area.top,
|
||||
bbox->left,
|
||||
bbox->top,
|
||||
bbox->right - bbox->left,
|
||||
bbox->bottom - bbox->top,
|
||||
copy->scale_mode,
|
||||
rop);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
src_image = canvas_get_image(canvas, copy->src_bitmap, FALSE);
|
||||
spice_return_if_fail(src_image != NULL);
|
||||
|
||||
if (rect_is_same_size(bbox, ©->src_area)) {
|
||||
if (rop == SPICE_ROP_COPY) {
|
||||
spice_canvas->ops->blit_image(spice_canvas, &dest_region,
|
||||
src_image,
|
||||
bbox->left - copy->src_area.left,
|
||||
bbox->top - copy->src_area.top);
|
||||
} else {
|
||||
spice_canvas->ops->blit_image_rop(spice_canvas, &dest_region,
|
||||
src_image,
|
||||
bbox->left - copy->src_area.left,
|
||||
bbox->top - copy->src_area.top,
|
||||
rop);
|
||||
}
|
||||
} else {
|
||||
if (rop == SPICE_ROP_COPY) {
|
||||
spice_canvas->ops->scale_image(spice_canvas, &dest_region,
|
||||
src_image,
|
||||
copy->src_area.left,
|
||||
copy->src_area.top,
|
||||
copy->src_area.right - copy->src_area.left,
|
||||
copy->src_area.bottom - copy->src_area.top,
|
||||
bbox->left,
|
||||
bbox->top,
|
||||
bbox->right - bbox->left,
|
||||
bbox->bottom - bbox->top,
|
||||
copy->scale_mode);
|
||||
} else {
|
||||
spice_canvas->ops->scale_image_rop(spice_canvas, &dest_region,
|
||||
src_image,
|
||||
copy->src_area.left,
|
||||
copy->src_area.top,
|
||||
copy->src_area.right - copy->src_area.left,
|
||||
copy->src_area.bottom - copy->src_area.top,
|
||||
bbox->left,
|
||||
bbox->top,
|
||||
bbox->right - bbox->left,
|
||||
bbox->bottom - bbox->top,
|
||||
copy->scale_mode,
|
||||
rop);
|
||||
}
|
||||
}
|
||||
pixman_image_unref(src_image);
|
||||
}
|
||||
pixman_region32_fini(&dest_region);
|
||||
}
|
||||
|
||||
static void canvas_draw_blackness(SpiceCanvas *spice_canvas, SpiceRect *bbox, SpiceClip *clip, SpiceBlackness *blackness)
|
||||
{
|
||||
CanvasBase *canvas = (CanvasBase *)spice_canvas;
|
||||
@ -3427,7 +3307,7 @@ inline static void canvas_base_init_ops(SpiceCanvasOps *ops)
|
||||
ops->draw_copy = canvas_draw_copy;
|
||||
ops->draw_opaque = canvas_draw_opaque;
|
||||
ops->copy_bits = canvas_copy_bits;
|
||||
ops->draw_blend = canvas_draw_blend;
|
||||
ops->draw_blend = canvas_draw_copy; // copy and blend are the same
|
||||
ops->draw_blackness = canvas_draw_blackness;
|
||||
ops->draw_whiteness = canvas_draw_whiteness;
|
||||
ops->draw_invers = canvas_draw_invers;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user