{
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);
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);
}
struct rectangle allocation;
GdkPixbuf *pb;
cairo_t *cr;
- cairo_surface_t *wsurface, *surface;
+ cairo_surface_t *surface;
window_draw(image->window);
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);
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);
}
}
}
-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)
{
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
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);