actor: Add has_allocation() method

Add clutter_actor_has_allocation(), a method meant to be used when
deciding whether to call clutter_actor_get_allocation_box() or any
of its wrappers.

The get_allocation_box() method will, in case the allocation is invalid,
perform a costly re-allocation cycle to ensure that the returned box
is valid. The has_allocation() method is meant to be used if we have an
actor calling get_allocation_box() from outside the place where the
allocation is always guaranteed to be valid.

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
This commit is contained in:
Owen W. Taylor 2010-03-26 00:35:36 +00:00 committed by Emmanuele Bassi
parent 7483f82566
commit 8df4a0b8fd
3 changed files with 35 additions and 0 deletions

View File

@ -10112,3 +10112,35 @@ _clutter_actor_set_queue_redraw_clip (ClutterActor *self,
self->priv->oob_queue_redraw_clip = clip;
}
/**
* clutter_actor_has_allocation:
* @self: a #ClutterActor
*
* Checks if the actor has an up-to-date allocation assigned to
* it. This means that the actor should have an allocation: it's
* visible and has a parent. It also means that there is no
* outstanding relayout request in progress for the actor or its
* children (There might be other outstanding layout requests in
* progress that will cause the actor to get a new allocation
* when the stage is laid out, however).
*
* If this function returns %FALSE, then the actor will normally
* be allocated before it is next drawn on the screen.
*
* Return value: %TRUE if the actor has an up-to-date allocation
*
* Since: 1.4
*/
gboolean
clutter_actor_has_allocation (ClutterActor *self)
{
ClutterActorPrivate *priv;
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), FALSE);
priv = self->priv;
return priv->parent_actor != NULL &&
CLUTTER_ACTOR_IS_VISIBLE (self) &&
!priv->needs_allocation;
}

View File

@ -562,6 +562,8 @@ ClutterTextDirection clutter_actor_get_text_direction (ClutterActor *sel
void clutter_actor_push_internal (ClutterActor *self);
void clutter_actor_pop_internal (ClutterActor *self);
gboolean clutter_actor_has_allocation (ClutterActor *self);
G_END_DECLS
#endif /* __CLUTTER_ACTOR_H__ */

View File

@ -314,6 +314,7 @@ clutter_actor_set_fixed_position_set
clutter_actor_get_fixed_position_set
clutter_actor_set_request_mode
clutter_actor_get_request_mode
clutter_actor_has_allocation
<SUBSECTION>
clutter_actor_set_geometry