diff --git a/clients/dnd.c b/clients/dnd.c index 33562bc8..3b54dec5 100644 --- a/clients/dnd.c +++ b/clients/dnd.c @@ -171,21 +171,20 @@ dnd_draw(struct dnd *dnd) { struct rectangle allocation; cairo_t *cr; - cairo_surface_t *wsurface, *surface; + cairo_surface_t *surface; int i; window_draw(dnd->window); + surface = window_get_surface(dnd->window); + cr = cairo_create(surface); window_get_child_allocation(dnd->window, &allocation); + cairo_rectangle(cr, allocation.x, allocation.y, + allocation.width, allocation.height); + cairo_clip(cr); + cairo_push_group(cr); - wsurface = window_get_surface(dnd->window); - surface = cairo_surface_create_similar(wsurface, - CAIRO_CONTENT_COLOR_ALPHA, - allocation.width, - allocation.height); - cairo_surface_destroy(wsurface); - - cr = cairo_create(surface); + cairo_translate(cr, allocation.x, allocation.y); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); cairo_set_source_rgba(cr, 0, 0, 0, 0.8); cairo_paint(cr); @@ -199,9 +198,9 @@ dnd_draw(struct dnd *dnd) cairo_paint(cr); } + cairo_pop_group_to_source(cr); + cairo_paint(cr); cairo_destroy(cr); - - window_copy_surface(dnd->window, &allocation, surface); cairo_surface_destroy(surface); window_flush(dnd->window); } diff --git a/clients/image.c b/clients/image.c index 61d8b25f..891bd8a7 100644 --- a/clients/image.c +++ b/clients/image.c @@ -140,7 +140,7 @@ image_draw(struct image *image) struct rectangle allocation; GdkPixbuf *pb; cairo_t *cr; - cairo_surface_t *wsurface, *surface; + cairo_surface_t *surface; window_draw(image->window); @@ -153,14 +153,15 @@ image_draw(struct image *image) if (pb == NULL) return; - wsurface = window_get_surface(image->window); - surface = cairo_surface_create_similar(wsurface, - CAIRO_CONTENT_COLOR_ALPHA, - allocation.width, - allocation.height); - - cairo_surface_destroy(wsurface); + surface = window_get_surface(image->window); cr = cairo_create(surface); + window_get_child_allocation(image->window, &allocation); + cairo_rectangle(cr, allocation.x, allocation.y, + allocation.width, allocation.height); + cairo_clip(cr); + cairo_push_group(cr); + cairo_translate(cr, allocation.x, allocation.y); + cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); cairo_set_source_rgba(cr, 0, 0, 0, 1); cairo_paint(cr); @@ -169,11 +170,13 @@ image_draw(struct image *image) allocation.width, allocation.height); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); cairo_paint(cr); - cairo_destroy(cr); g_object_unref(pb); - window_copy_surface(image->window, &allocation, surface); + cairo_pop_group_to_source(cr); + cairo_paint(cr); + cairo_destroy(cr); + window_flush(image->window); cairo_surface_destroy(surface); } diff --git a/clients/window.c b/clients/window.c index ce2164c6..f598bcd2 100644 --- a/clients/window.c +++ b/clients/window.c @@ -1102,30 +1102,6 @@ window_set_child_size(struct window *window, int32_t width, int32_t height) } } -void -window_copy_image(struct window *window, - struct rectangle *rectangle, EGLImageKHR image) -{ - /* set image as read buffer, copy pixels or something... */ -} - -void -window_copy_surface(struct window *window, - struct rectangle *rectangle, - cairo_surface_t *surface) -{ - cairo_t *cr; - - cr = cairo_create (window->cairo_surface); - - cairo_set_source_surface (cr, - surface, - rectangle->x, rectangle->y); - - cairo_paint (cr); - cairo_destroy (cr); -} - static gboolean idle_redraw(void *data) { diff --git a/clients/window.h b/clients/window.h index a333f772..7d6afdc5 100644 --- a/clients/window.h +++ b/clients/window.h @@ -141,10 +141,6 @@ window_get_child_allocation(struct window *window, void window_set_child_size(struct window *window, int32_t width, int32_t height); void -window_copy_image(struct window *window, - struct rectangle *rectangle, - void *image); -void window_schedule_redraw(struct window *window); void @@ -154,11 +150,6 @@ window_damage(struct window *window, int32_t x, int32_t y, cairo_surface_t * window_get_surface(struct window *window); -void -window_copy_surface(struct window *window, - struct rectangle *rectangle, - cairo_surface_t *surface); - void window_flush(struct window *window);