return TRUE;
}
-void
-_gdk_broadway_window_translate (GdkWindow *window,
- cairo_region_t *area,
- gint dx,
- gint dy)
+static void
+copy_region (cairo_surface_t *surface,
+ cairo_region_t *area,
+ gint dx,
+ gint dy)
{
- GdkWindowObject *private;
- GdkWindowImplBroadway *impl;
- cairo_surface_t *surface;
+ cairo_t *cr;
- private = (GdkWindowObject *)window;
- impl = GDK_WINDOW_IMPL_BROADWAY (private->impl);
+ cr = cairo_create (surface);
- surface = GDK_DRAWABLE_IMPL_BROADWAY (impl)->surface;
- if (surface)
- {
- cairo_t *cr;
+ area = cairo_region_copy (area);
- cr = cairo_create (surface);
+ gdk_cairo_region (cr, area);
+ cairo_clip (cr);
- area = cairo_region_copy (area);
+ /* NB: This is a self-copy and Cairo doesn't support that yet.
+ * So we do a litle trick.
+ */
+ cairo_push_group (cr);
- gdk_cairo_region (cr, area);
- cairo_clip (cr);
+ cairo_set_source_surface (cr, surface, dx, dy);
+ cairo_paint (cr);
- /* NB: This is a self-copy and Cairo doesn't support that yet.
- * So we do a litle trick.
- */
- cairo_push_group (cr);
+ cairo_pop_group_to_source (cr);
+ cairo_paint (cr);
- cairo_set_source_surface (cr, surface, dx, dy);
- cairo_paint (cr);
+ cairo_destroy (cr);
+}
- cairo_pop_group_to_source (cr);
- cairo_paint (cr);
+void
+_gdk_broadway_window_translate (GdkWindow *window,
+ cairo_region_t *area,
+ gint dx,
+ gint dy)
+{
+ GdkWindowObject *private;
+ GdkDrawableImplBroadway *impl;
- cairo_destroy (cr);
+ private = (GdkWindowObject *)window;
+ impl = GDK_DRAWABLE_IMPL_BROADWAY (private->impl);
+
+ if (impl->surface)
+ {
+ copy_region (impl->surface, area, dx, dy);
+ if (GDK_WINDOW_IMPL_BROADWAY (impl)->last_synced)
+ {
+ copy_region (impl->last_surface, area, dx, dy);
+ /* TODO: Send copy-rects */
+ }
}
}