mirror of
https://github.com/brl/mutter.git
synced 2025-03-05 12:48:11 +00:00
actor: Remove the was_painted flag
While we still don't want to perform implicit transitions on unmapped actors, we can relax the requirement on having been painted once; the was_painted flag was introduced to avoid performing implicit transitions on the :allocation property, but for that we can use the needs_allocation flag instead, as needs_allocation will be set to FALSE when we have been painted as well. Thus, we retain our original goal of not having actors "flying" into position on their first allocation, without the side effect of preventing animations when emitting the ::show signal.
This commit is contained in:
parent
fa933b5ec5
commit
18f7a4aa12
@ -816,7 +816,6 @@ struct _ClutterActorPrivate
|
|||||||
guint needs_compute_expand : 1;
|
guint needs_compute_expand : 1;
|
||||||
guint needs_x_expand : 1;
|
guint needs_x_expand : 1;
|
||||||
guint needs_y_expand : 1;
|
guint needs_y_expand : 1;
|
||||||
guint was_painted : 1;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@ -1488,12 +1487,6 @@ clutter_actor_real_map (ClutterActor *self)
|
|||||||
stage = _clutter_actor_get_stage_internal (self);
|
stage = _clutter_actor_get_stage_internal (self);
|
||||||
priv->pick_id = _clutter_stage_acquire_pick_id (CLUTTER_STAGE (stage), self);
|
priv->pick_id = _clutter_stage_acquire_pick_id (CLUTTER_STAGE (stage), self);
|
||||||
|
|
||||||
/* reset the was_painted flag here: unmapped actors are not going to
|
|
||||||
* be painted in any case, and this allows us to catch the case of
|
|
||||||
* cloned actors.
|
|
||||||
*/
|
|
||||||
priv->was_painted = FALSE;
|
|
||||||
|
|
||||||
CLUTTER_NOTE (ACTOR, "Pick id '%d' for actor '%s'",
|
CLUTTER_NOTE (ACTOR, "Pick id '%d' for actor '%s'",
|
||||||
priv->pick_id,
|
priv->pick_id,
|
||||||
_clutter_actor_get_debug_name (self));
|
_clutter_actor_get_debug_name (self));
|
||||||
@ -3899,9 +3892,6 @@ clutter_actor_continue_paint (ClutterActor *self)
|
|||||||
|
|
||||||
/* XXX:2.0 - Call the paint() virtual directly */
|
/* XXX:2.0 - Call the paint() virtual directly */
|
||||||
g_signal_emit (self, actor_signals[PAINT], 0);
|
g_signal_emit (self, actor_signals[PAINT], 0);
|
||||||
|
|
||||||
/* the actor was painted at least once */
|
|
||||||
priv->was_painted = TRUE;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -18716,8 +18706,8 @@ clutter_actor_add_transition_internal (ClutterActor *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
should_skip_transition (ClutterActor *self,
|
should_skip_implicit_transition (ClutterActor *self,
|
||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
ClutterActorPrivate *priv = self->priv;
|
ClutterActorPrivate *priv = self->priv;
|
||||||
const ClutterAnimationInfo *info;
|
const ClutterAnimationInfo *info;
|
||||||
@ -18734,13 +18724,6 @@ should_skip_transition (ClutterActor *self,
|
|||||||
if (info->cur_state->easing_duration == 0)
|
if (info->cur_state->easing_duration == 0)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* we do want :opacity transitions to work even if they start from an
|
|
||||||
* unpainted actor, because of the opacity optimization that lives in
|
|
||||||
* clutter_actor_paint()
|
|
||||||
*/
|
|
||||||
if (pspec == obj_props[PROP_OPACITY] && !priv->was_painted)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
/* on the other hand, if the actor hasn't been allocated yet, we want to
|
/* on the other hand, if the actor hasn't been allocated yet, we want to
|
||||||
* skip all transitions on the :allocation, to avoid actors "flying in"
|
* skip all transitions on the :allocation, to avoid actors "flying in"
|
||||||
* into their new position and size
|
* into their new position and size
|
||||||
@ -18838,19 +18821,18 @@ _clutter_actor_create_transition (ClutterActor *actor,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (should_skip_transition (actor, pspec))
|
if (should_skip_implicit_transition (actor, pspec))
|
||||||
{
|
{
|
||||||
/* we don't go through the Animatable interface because we
|
CLUTTER_NOTE (ANIMATION, "Skipping implicit transition for '%s::%s'",
|
||||||
* already know we got here through an animatable property.
|
|
||||||
*/
|
|
||||||
CLUTTER_NOTE (ANIMATION, "Easing duration=0 was_painted=%s, immediate set for '%s::%s'",
|
|
||||||
actor->priv->was_painted ? "yes" : "no",
|
|
||||||
_clutter_actor_get_debug_name (actor),
|
_clutter_actor_get_debug_name (actor),
|
||||||
pspec->name);
|
pspec->name);
|
||||||
|
|
||||||
/* remove a transition, if one exists */
|
/* remove a transition, if one exists */
|
||||||
clutter_actor_remove_transition (actor, pspec->name);
|
clutter_actor_remove_transition (actor, pspec->name);
|
||||||
|
|
||||||
|
/* we don't go through the Animatable interface because we
|
||||||
|
* already know we got here through an animatable property.
|
||||||
|
*/
|
||||||
clutter_actor_set_animatable_property (actor,
|
clutter_actor_set_animatable_property (actor,
|
||||||
pspec->param_id,
|
pspec->param_id,
|
||||||
&final,
|
&final,
|
||||||
@ -18878,26 +18860,27 @@ _clutter_actor_create_transition (ClutterActor *actor,
|
|||||||
clutter_timeline_set_progress_mode (timeline, info->cur_state->easing_mode);
|
clutter_timeline_set_progress_mode (timeline, info->cur_state->easing_mode);
|
||||||
|
|
||||||
#ifdef CLUTTER_ENABLE_DEBUG
|
#ifdef CLUTTER_ENABLE_DEBUG
|
||||||
{
|
if (CLUTTER_HAS_DEBUG (ANIMATION))
|
||||||
gchar *initial_v, *final_v;
|
{
|
||||||
|
gchar *initial_v, *final_v;
|
||||||
|
|
||||||
initial_v = g_strdup_value_contents (&initial);
|
initial_v = g_strdup_value_contents (&initial);
|
||||||
final_v = g_strdup_value_contents (&final);
|
final_v = g_strdup_value_contents (&final);
|
||||||
|
|
||||||
CLUTTER_NOTE (ANIMATION,
|
CLUTTER_NOTE (ANIMATION,
|
||||||
"Created transition for %s:%s "
|
"Created transition for %s:%s "
|
||||||
"(len:%u, mode:%s, delay:%u) "
|
"(len:%u, mode:%s, delay:%u) "
|
||||||
"initial:%s, final:%s",
|
"initial:%s, final:%s",
|
||||||
_clutter_actor_get_debug_name (actor),
|
_clutter_actor_get_debug_name (actor),
|
||||||
pspec->name,
|
pspec->name,
|
||||||
info->cur_state->easing_duration,
|
info->cur_state->easing_duration,
|
||||||
clutter_get_easing_name_for_mode (info->cur_state->easing_mode),
|
clutter_get_easing_name_for_mode (info->cur_state->easing_mode),
|
||||||
info->cur_state->easing_delay,
|
info->cur_state->easing_delay,
|
||||||
initial_v, final_v);
|
initial_v, final_v);
|
||||||
|
|
||||||
g_free (initial_v);
|
g_free (initial_v);
|
||||||
g_free (final_v);
|
g_free (final_v);
|
||||||
}
|
}
|
||||||
#endif /* CLUTTER_ENABLE_DEBUG */
|
#endif /* CLUTTER_ENABLE_DEBUG */
|
||||||
|
|
||||||
/* this will start the transition as well */
|
/* this will start the transition as well */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user