[gtk+/broadway: 12/71] [broadway] Copy regions on last_surface during translations too
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/broadway: 12/71] [broadway] Copy regions on last_surface during translations too
- Date: Thu, 25 Nov 2010 21:16:16 +0000 (UTC)
commit f02b7c9ed209aa680f5735cc814790ec5437fd45
Author: Alexander Larsson <alexl redhat com>
Date: Tue Nov 16 13:16:38 2010 +0100
[broadway] Copy regions on last_surface during translations too
This will help make scrolling more efficient
gdk/broadway/gdkwindow-broadway.c | 66 ++++++++++++++++++++++---------------
1 files changed, 39 insertions(+), 27 deletions(-)
---
diff --git a/gdk/broadway/gdkwindow-broadway.c b/gdk/broadway/gdkwindow-broadway.c
index f809570..909ad5b 100644
--- a/gdk/broadway/gdkwindow-broadway.c
+++ b/gdk/broadway/gdkwindow-broadway.c
@@ -1120,43 +1120,55 @@ _gdk_broadway_window_queue_antiexpose (GdkWindow *window,
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 */
+ }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]