mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 23:50:41 -05:00
clutter/stage: Expose stage update helpers
This is so something outside of clutter-stage.c (i.e. clutter-stage-view.c) can eventually do various things _clutter_stage_do_update() does now while not redrawing the whole stage. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1285
This commit is contained in:
parent
fc0b8f9d9c
commit
ff5f77f273
@ -3027,7 +3027,7 @@ clutter_actor_get_abs_allocation_vertices (ClutterActor *self,
|
|||||||
if (!stage)
|
if (!stage)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_clutter_stage_maybe_relayout (stage);
|
clutter_stage_maybe_relayout (stage);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* NB: _clutter_actor_transform_and_project_box expects a box in the actor's
|
/* NB: _clutter_actor_transform_and_project_box expects a box in the actor's
|
||||||
@ -9277,7 +9277,7 @@ clutter_actor_get_allocation_box (ClutterActor *self,
|
|||||||
|
|
||||||
/* do not queue a relayout on an unparented actor */
|
/* do not queue a relayout on an unparented actor */
|
||||||
if (stage)
|
if (stage)
|
||||||
_clutter_stage_maybe_relayout (stage);
|
clutter_stage_maybe_relayout (stage);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* commenting out the code above and just keeping this assigment
|
/* commenting out the code above and just keeping this assigment
|
||||||
|
@ -58,7 +58,12 @@ void _clutter_stage_get_viewport (ClutterStage
|
|||||||
void _clutter_stage_dirty_viewport (ClutterStage *stage);
|
void _clutter_stage_dirty_viewport (ClutterStage *stage);
|
||||||
void _clutter_stage_maybe_setup_viewport (ClutterStage *stage,
|
void _clutter_stage_maybe_setup_viewport (ClutterStage *stage,
|
||||||
ClutterStageView *view);
|
ClutterStageView *view);
|
||||||
void _clutter_stage_maybe_relayout (ClutterActor *stage);
|
void clutter_stage_maybe_relayout (ClutterActor *stage);
|
||||||
|
void clutter_stage_maybe_finish_queue_redraws (ClutterStage *stage);
|
||||||
|
GSList * clutter_stage_find_updated_devices (ClutterStage *stage);
|
||||||
|
void clutter_stage_update_devices (ClutterStage *stage,
|
||||||
|
GSList *devices);
|
||||||
|
void clutter_stage_update_actor_stage_views (ClutterStage *stage);
|
||||||
gboolean _clutter_stage_needs_update (ClutterStage *stage);
|
gboolean _clutter_stage_needs_update (ClutterStage *stage);
|
||||||
gboolean _clutter_stage_do_update (ClutterStage *stage);
|
gboolean _clutter_stage_do_update (ClutterStage *stage);
|
||||||
|
|
||||||
|
@ -140,13 +140,13 @@ struct _ClutterStagePrivate
|
|||||||
int update_freeze_count;
|
int update_freeze_count;
|
||||||
|
|
||||||
gboolean needs_update;
|
gboolean needs_update;
|
||||||
|
gboolean needs_update_devices;
|
||||||
gboolean pending_finish_queue_redraws;
|
gboolean pending_finish_queue_redraws;
|
||||||
|
|
||||||
guint redraw_pending : 1;
|
guint redraw_pending : 1;
|
||||||
guint throttle_motion_events : 1;
|
guint throttle_motion_events : 1;
|
||||||
guint min_size_changed : 1;
|
guint min_size_changed : 1;
|
||||||
guint motion_events_enabled : 1;
|
guint motion_events_enabled : 1;
|
||||||
guint stage_was_relayout : 1;
|
|
||||||
guint actor_needs_immediate_relayout : 1;
|
guint actor_needs_immediate_relayout : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -178,7 +178,6 @@ static guint stage_signals[LAST_SIGNAL] = { 0, };
|
|||||||
|
|
||||||
static const ClutterColor default_stage_color = { 255, 255, 255, 255 };
|
static const ClutterColor default_stage_color = { 255, 255, 255, 255 };
|
||||||
|
|
||||||
static void clutter_stage_maybe_finish_queue_redraws (ClutterStage *stage);
|
|
||||||
static void free_queue_redraw_entry (ClutterStageQueueRedrawEntry *entry);
|
static void free_queue_redraw_entry (ClutterStageQueueRedrawEntry *entry);
|
||||||
static void capture_view_into (ClutterStage *stage,
|
static void capture_view_into (ClutterStage *stage,
|
||||||
gboolean paint,
|
gboolean paint,
|
||||||
@ -939,7 +938,7 @@ clutter_stage_show (ClutterActor *self)
|
|||||||
|
|
||||||
/* Possibly do an allocation run so that the stage will have the
|
/* Possibly do an allocation run so that the stage will have the
|
||||||
right size before we map it */
|
right size before we map it */
|
||||||
_clutter_stage_maybe_relayout (self);
|
clutter_stage_maybe_relayout (self);
|
||||||
|
|
||||||
g_assert (priv->impl != NULL);
|
g_assert (priv->impl != NULL);
|
||||||
_clutter_stage_window_show (priv->impl, TRUE);
|
_clutter_stage_window_show (priv->impl, TRUE);
|
||||||
@ -1206,7 +1205,7 @@ clutter_stage_queue_actor_relayout (ClutterStage *stage,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_clutter_stage_maybe_relayout (ClutterActor *actor)
|
clutter_stage_maybe_relayout (ClutterActor *actor)
|
||||||
{
|
{
|
||||||
ClutterStage *stage = CLUTTER_STAGE (actor);
|
ClutterStage *stage = CLUTTER_STAGE (actor);
|
||||||
ClutterStagePrivate *priv = stage->priv;
|
ClutterStagePrivate *priv = stage->priv;
|
||||||
@ -1253,7 +1252,7 @@ _clutter_stage_maybe_relayout (ClutterActor *actor)
|
|||||||
CLUTTER_NOTE (ACTOR, "<<< Completed recomputing layout of %d subtrees", count);
|
CLUTTER_NOTE (ACTOR, "<<< Completed recomputing layout of %d subtrees", count);
|
||||||
|
|
||||||
if (count)
|
if (count)
|
||||||
priv->stage_was_relayout = TRUE;
|
priv->needs_update_devices = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1302,15 +1301,21 @@ clutter_stage_do_redraw (ClutterStage *stage)
|
|||||||
stage);
|
stage);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GSList *
|
GSList *
|
||||||
clutter_stage_find_updated_devices (ClutterStage *stage)
|
clutter_stage_find_updated_devices (ClutterStage *stage)
|
||||||
{
|
{
|
||||||
|
ClutterStagePrivate *priv = stage->priv;
|
||||||
ClutterBackend *backend;
|
ClutterBackend *backend;
|
||||||
ClutterSeat *seat;
|
ClutterSeat *seat;
|
||||||
GSList *updating = NULL;
|
GSList *updating = NULL;
|
||||||
const GList *l, *devices;
|
const GList *l, *devices;
|
||||||
graphene_point_t point;
|
graphene_point_t point;
|
||||||
|
|
||||||
|
if (!priv->needs_update_devices)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
priv->needs_update_devices = FALSE;
|
||||||
|
|
||||||
backend = clutter_get_default_backend ();
|
backend = clutter_get_default_backend ();
|
||||||
seat = clutter_backend_get_default_seat (backend);
|
seat = clutter_backend_get_default_seat (backend);
|
||||||
devices = clutter_seat_peek_devices (seat);
|
devices = clutter_seat_peek_devices (seat);
|
||||||
@ -1356,8 +1361,8 @@ clutter_stage_find_updated_devices (ClutterStage *stage)
|
|||||||
return updating;
|
return updating;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
update_actor_stage_views (ClutterStage *stage)
|
clutter_stage_update_actor_stage_views (ClutterStage *stage)
|
||||||
{
|
{
|
||||||
ClutterActor *actor = CLUTTER_ACTOR (stage);
|
ClutterActor *actor = CLUTTER_ACTOR (stage);
|
||||||
ClutterStagePrivate *priv = stage->priv;
|
ClutterStagePrivate *priv = stage->priv;
|
||||||
@ -1384,13 +1389,13 @@ update_actor_stage_views (ClutterStage *stage)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
priv->actor_needs_immediate_relayout = FALSE;
|
priv->actor_needs_immediate_relayout = FALSE;
|
||||||
_clutter_stage_maybe_relayout (actor);
|
clutter_stage_maybe_relayout (actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_warn_if_fail (!priv->actor_needs_immediate_relayout);
|
g_warn_if_fail (!priv->actor_needs_immediate_relayout);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
clutter_stage_update_devices (ClutterStage *stage,
|
clutter_stage_update_devices (ClutterStage *stage,
|
||||||
GSList *devices)
|
GSList *devices)
|
||||||
{
|
{
|
||||||
@ -1437,20 +1442,15 @@ _clutter_stage_do_update (ClutterStage *stage)
|
|||||||
* check or clear the pending redraws flag since a relayout may
|
* check or clear the pending redraws flag since a relayout may
|
||||||
* queue a redraw.
|
* queue a redraw.
|
||||||
*/
|
*/
|
||||||
_clutter_stage_maybe_relayout (CLUTTER_ACTOR (stage));
|
clutter_stage_maybe_relayout (CLUTTER_ACTOR (stage));
|
||||||
|
|
||||||
if (!priv->redraw_pending)
|
if (!priv->redraw_pending)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
update_actor_stage_views (stage);
|
clutter_stage_update_actor_stage_views (stage);
|
||||||
|
|
||||||
clutter_stage_maybe_finish_queue_redraws (stage);
|
clutter_stage_maybe_finish_queue_redraws (stage);
|
||||||
|
|
||||||
if (priv->stage_was_relayout)
|
devices = clutter_stage_find_updated_devices (stage);
|
||||||
{
|
|
||||||
priv->stage_was_relayout = FALSE;
|
|
||||||
devices = clutter_stage_find_updated_devices (stage);
|
|
||||||
}
|
|
||||||
|
|
||||||
clutter_stage_do_redraw (stage);
|
clutter_stage_do_redraw (stage);
|
||||||
|
|
||||||
@ -3361,7 +3361,7 @@ _clutter_stage_queue_redraw_entry_invalidate (ClutterStageQueueRedrawEntry *entr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
clutter_stage_maybe_finish_queue_redraws (ClutterStage *stage)
|
clutter_stage_maybe_finish_queue_redraws (ClutterStage *stage)
|
||||||
{
|
{
|
||||||
ClutterStagePrivate *priv = stage->priv;
|
ClutterStagePrivate *priv = stage->priv;
|
||||||
|
Loading…
Reference in New Issue
Block a user