Avoid drawing twice if relayout queues a draw
It's reasonably normal for a relayout of the stage to cause the stage to be queued for drawing; for this reason we should do the relayout before we clear stage->update_idle. (But want to clear update_idle() before actually doing the redraw to handle the corner case where the draw queues another redraw.)
This commit is contained in:
parent
72f9646804
commit
e1742af368
@ -356,6 +356,13 @@ redraw_update_idle (gpointer user_data)
|
|||||||
ClutterStage *stage = user_data;
|
ClutterStage *stage = user_data;
|
||||||
ClutterStagePrivate *priv = stage->priv;
|
ClutterStagePrivate *priv = stage->priv;
|
||||||
|
|
||||||
|
/* clutter_redraw() will also call maybe_relayout(), but since a relayout can
|
||||||
|
* queue a redraw, we want to do the relayout before we clear the update_idle
|
||||||
|
* to avoid painting the stage twice. Calling maybe_relayout() twice in a row
|
||||||
|
* is cheap because of caching of requested and allocated size.
|
||||||
|
*/
|
||||||
|
_clutter_stage_maybe_relayout (CLUTTER_ACTOR (stage));
|
||||||
|
|
||||||
if (priv->update_idle)
|
if (priv->update_idle)
|
||||||
{
|
{
|
||||||
g_source_remove (priv->update_idle);
|
g_source_remove (priv->update_idle);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user