x11: Queue clipped redraws for Expose events

Instead of triggering a full stage redraw for Expose events we use the
geometry of the exposed region given in the event to queue a clipped
redraw of the stage.
This commit is contained in:
Robert Bragg 2010-09-08 01:03:15 +01:00
parent 105451d1be
commit 012e4ab153

View File

@ -692,6 +692,33 @@ event_translate (ClutterBackend *backend,
{
CLUTTER_NOTE (MULTISTAGE, "expose for stage: %p, redrawing", stage);
clutter_actor_queue_redraw (CLUTTER_ACTOR (stage));
XExposeEvent *expose = (XExposeEvent *)xevent;
ClutterPaintVolume clip;
ClutterVertex origin;
CLUTTER_NOTE (MULTISTAGE,
"expose for stage: %p, "
"redrawing (x=%d, y=%d, width=%d, height=%d)",
stage,
expose->x,
expose->y,
expose->width,
expose->height);
origin.x = expose->x;
origin.y = expose->y;
origin.z = 0;
_clutter_paint_volume_init_static (CLUTTER_ACTOR (stage), &clip);
clutter_paint_volume_set_origin (&clip, &origin);
clutter_paint_volume_set_width (&clip, expose->width);
clutter_paint_volume_set_height (&clip, expose->height);
_clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stage), 0, &clip);
clutter_paint_volume_free (&clip);
res = FALSE;
}
break;