Add debug annotations for the layout process

If we need to check that the layout sequence is correct in
terms of order of execution and with respect to caching, then
having a CLUTTER_DEBUG_LAYOUT debug flag would make things
easier.
This commit is contained in:
Emmanuele Bassi 2009-04-15 17:25:50 +01:00
parent f8256e4b23
commit 709bb69970
3 changed files with 34 additions and 10 deletions

View File

@ -766,6 +766,7 @@ clutter_actor_real_get_preferred_width (ClutterActor *self,
* using this default is relying on someone to set the * using this default is relying on someone to set the
* request manually * request manually
*/ */
CLUTTER_NOTE (LAYOUT, "Default preferred width: 0, 0");
if (min_width_p) if (min_width_p)
*min_width_p = 0; *min_width_p = 0;
@ -784,6 +785,7 @@ clutter_actor_real_get_preferred_height (ClutterActor *self,
* using this default is relying on someone to set the * using this default is relying on someone to set the
* request manually * request manually
*/ */
CLUTTER_NOTE (LAYOUT, "Default preferred height: 0, 0");
if (min_height_p) if (min_height_p)
*min_height_p = 0; *min_height_p = 0;
@ -3524,6 +3526,7 @@ clutter_actor_get_preferred_size (ClutterActor *self,
if (priv->request_mode == CLUTTER_REQUEST_HEIGHT_FOR_WIDTH) if (priv->request_mode == CLUTTER_REQUEST_HEIGHT_FOR_WIDTH)
{ {
CLUTTER_NOTE (LAYOUT, "Preferred size (height-for-width)");
clutter_actor_get_preferred_width (self, -1, clutter_actor_get_preferred_width (self, -1,
&min_width, &min_width,
&natural_width); &natural_width);
@ -3533,6 +3536,7 @@ clutter_actor_get_preferred_size (ClutterActor *self,
} }
else else
{ {
CLUTTER_NOTE (LAYOUT, "Preferred size (width-for-height)");
clutter_actor_get_preferred_height (self, -1, clutter_actor_get_preferred_height (self, -1,
&min_height, &min_height,
&natural_height); &natural_height);
@ -3597,6 +3601,11 @@ clutter_actor_get_preferred_width (ClutterActor *self,
min_width = natural_width = 0; min_width = natural_width = 0;
CLUTTER_NOTE (LAYOUT,
"Width request for %" CLUTTER_UNITS_FORMAT " (%d px)",
for_height,
CLUTTER_UNITS_TO_DEVICE (for_height));
klass->get_preferred_width (self, for_height, klass->get_preferred_width (self, for_height,
&min_width, &min_width,
&natural_width); &natural_width);
@ -3668,6 +3677,11 @@ clutter_actor_get_preferred_height (ClutterActor *self,
min_height = natural_height = 0; min_height = natural_height = 0;
CLUTTER_NOTE (LAYOUT,
"Width request for %" CLUTTER_UNITS_FORMAT " (%d px)",
for_width,
CLUTTER_UNITS_TO_DEVICE (for_width));
klass->get_preferred_height (self, for_width, klass->get_preferred_height (self, for_width,
&min_height, &min_height,
&natural_height); &natural_height);
@ -3768,12 +3782,12 @@ clutter_actor_get_allocation_box (ClutterActor *self,
{ {
g_return_if_fail (CLUTTER_IS_ACTOR (self)); g_return_if_fail (CLUTTER_IS_ACTOR (self));
/* FIXME - if needs_allocation=TRUE, we can either 1) /* XXX - if needs_allocation=TRUE, we can either 1) g_return_if_fail,
* g_return_if_fail, which limits calling get_allocation to inside * which limits calling get_allocation to inside paint() basically; or
* paint() basically; or we can 2) force a layout, which could be * we can 2) force a layout, which could be expensive if someone calls
* expensive if someone calls get_allocation somewhere silly; or we * get_allocation somewhere silly; or we can 3) just return the latest
* can 3) just return the latest value, allowing it to be * value, allowing it to be out-of-date, and assume people know what
* out-of-date, and assume people know what they are doing. * they are doing.
* *
* The least-surprises approach that keeps existing code working is * The least-surprises approach that keeps existing code working is
* likely to be 2). People can end up doing some inefficient things, * likely to be 2). People can end up doing some inefficient things,
@ -3816,11 +3830,12 @@ void
clutter_actor_get_allocation_geometry (ClutterActor *self, clutter_actor_get_allocation_geometry (ClutterActor *self,
ClutterGeometry *geom) ClutterGeometry *geom)
{ {
int x2, y2; gint x2, y2;
g_return_if_fail (CLUTTER_IS_ACTOR (self)); g_return_if_fail (CLUTTER_IS_ACTOR (self));
clutter_actor_get_allocation_coords (self, &geom->x, &geom->y, &x2, &y2); clutter_actor_get_allocation_coords (self, &geom->x, &geom->y, &x2, &y2);
geom->width = x2 - geom->x; geom->width = x2 - geom->x;
geom->height = y2 - geom->y; geom->height = y2 - geom->y;
} }
@ -3880,7 +3895,7 @@ clutter_actor_allocate (ClutterActor *self,
box->x2 == priv->allocation.x2 && box->x2 == priv->allocation.x2 &&
box->y2 == priv->allocation.y2) box->y2 == priv->allocation.y2)
{ {
CLUTTER_NOTE (ACTOR, "No allocation needed"); CLUTTER_NOTE (LAYOUT, "No allocation needed");
return; return;
} }
@ -3908,8 +3923,10 @@ clutter_actor_set_geometry (ClutterActor *self,
const ClutterGeometry *geometry) const ClutterGeometry *geometry)
{ {
g_object_freeze_notify (G_OBJECT (self)); g_object_freeze_notify (G_OBJECT (self));
clutter_actor_set_position (self, geometry->x, geometry->y); clutter_actor_set_position (self, geometry->x, geometry->y);
clutter_actor_set_size (self, geometry->width, geometry->height); clutter_actor_set_size (self, geometry->width, geometry->height);
g_object_thaw_notify (G_OBJECT (self)); g_object_thaw_notify (G_OBJECT (self));
} }
@ -3953,8 +3970,10 @@ clutter_actor_set_position (ClutterActor *self,
g_return_if_fail (CLUTTER_IS_ACTOR (self)); g_return_if_fail (CLUTTER_IS_ACTOR (self));
g_object_freeze_notify (G_OBJECT (self)); g_object_freeze_notify (G_OBJECT (self));
clutter_actor_set_x (self, x); clutter_actor_set_x (self, x);
clutter_actor_set_y (self, y); clutter_actor_set_y (self, y);
g_object_thaw_notify (G_OBJECT (self)); g_object_thaw_notify (G_OBJECT (self));
} }
@ -3980,8 +3999,10 @@ clutter_actor_set_positionu (ClutterActor *self,
g_return_if_fail (CLUTTER_IS_ACTOR (self)); g_return_if_fail (CLUTTER_IS_ACTOR (self));
g_object_freeze_notify (G_OBJECT (self)); g_object_freeze_notify (G_OBJECT (self));
clutter_actor_set_xu (self, x); clutter_actor_set_xu (self, x);
clutter_actor_set_yu (self, y); clutter_actor_set_yu (self, y);
g_object_thaw_notify (G_OBJECT (self)); g_object_thaw_notify (G_OBJECT (self));
} }
@ -4074,6 +4095,7 @@ clutter_actor_move_byu (ClutterActor *self,
ClutterUnit dy) ClutterUnit dy)
{ {
ClutterUnit x, y; ClutterUnit x, y;
g_return_if_fail (CLUTTER_IS_ACTOR (self)); g_return_if_fail (CLUTTER_IS_ACTOR (self));
x = self->priv->fixed_x; x = self->priv->fixed_x;

View File

@ -21,7 +21,8 @@ typedef enum {
CLUTTER_DEBUG_SCRIPT = 1 << 11, CLUTTER_DEBUG_SCRIPT = 1 << 11,
CLUTTER_DEBUG_SHADER = 1 << 12, CLUTTER_DEBUG_SHADER = 1 << 12,
CLUTTER_DEBUG_MULTISTAGE = 1 << 13, CLUTTER_DEBUG_MULTISTAGE = 1 << 13,
CLUTTER_DEBUG_ANIMATION = 1 << 14 CLUTTER_DEBUG_ANIMATION = 1 << 14,
CLUTTER_DEBUG_LAYOUT = 1 << 15
} ClutterDebugFlag; } ClutterDebugFlag;
#ifdef CLUTTER_ENABLE_DEBUG #ifdef CLUTTER_ENABLE_DEBUG

View File

@ -92,7 +92,8 @@ static const GDebugKey clutter_debug_keys[] = {
{ "script", CLUTTER_DEBUG_SCRIPT }, { "script", CLUTTER_DEBUG_SCRIPT },
{ "shader", CLUTTER_DEBUG_SHADER }, { "shader", CLUTTER_DEBUG_SHADER },
{ "multistage", CLUTTER_DEBUG_MULTISTAGE }, { "multistage", CLUTTER_DEBUG_MULTISTAGE },
{ "animation", CLUTTER_DEBUG_ANIMATION } { "animation", CLUTTER_DEBUG_ANIMATION },
{ "layout", CLUTTER_DEBUG_LAYOUT }
}; };
#endif /* CLUTTER_ENABLE_DEBUG */ #endif /* CLUTTER_ENABLE_DEBUG */