From 709bb69970ff2b8c2caa27aa0f4b43a9ce763901 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Wed, 15 Apr 2009 17:25:50 +0100 Subject: [PATCH] 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. --- clutter/clutter-actor.c | 38 ++++++++++++++++++++++++++++++-------- clutter/clutter-debug.h | 3 ++- clutter/clutter-main.c | 3 ++- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c index 8090f1e93..5d9d95d6a 100644 --- a/clutter/clutter-actor.c +++ b/clutter/clutter-actor.c @@ -766,6 +766,7 @@ clutter_actor_real_get_preferred_width (ClutterActor *self, * using this default is relying on someone to set the * request manually */ + CLUTTER_NOTE (LAYOUT, "Default preferred width: 0, 0"); if (min_width_p) *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 * request manually */ + CLUTTER_NOTE (LAYOUT, "Default preferred height: 0, 0"); if (min_height_p) *min_height_p = 0; @@ -3524,6 +3526,7 @@ clutter_actor_get_preferred_size (ClutterActor *self, if (priv->request_mode == CLUTTER_REQUEST_HEIGHT_FOR_WIDTH) { + CLUTTER_NOTE (LAYOUT, "Preferred size (height-for-width)"); clutter_actor_get_preferred_width (self, -1, &min_width, &natural_width); @@ -3533,6 +3536,7 @@ clutter_actor_get_preferred_size (ClutterActor *self, } else { + CLUTTER_NOTE (LAYOUT, "Preferred size (width-for-height)"); clutter_actor_get_preferred_height (self, -1, &min_height, &natural_height); @@ -3597,6 +3601,11 @@ clutter_actor_get_preferred_width (ClutterActor *self, 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, &min_width, &natural_width); @@ -3668,6 +3677,11 @@ clutter_actor_get_preferred_height (ClutterActor *self, 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, &min_height, &natural_height); @@ -3768,12 +3782,12 @@ clutter_actor_get_allocation_box (ClutterActor *self, { g_return_if_fail (CLUTTER_IS_ACTOR (self)); - /* FIXME - if needs_allocation=TRUE, we can either 1) - * g_return_if_fail, which limits calling get_allocation to inside - * paint() basically; or we can 2) force a layout, which could be - * expensive if someone calls get_allocation somewhere silly; or we - * can 3) just return the latest value, allowing it to be - * out-of-date, and assume people know what they are doing. + /* XXX - if needs_allocation=TRUE, we can either 1) g_return_if_fail, + * which limits calling get_allocation to inside paint() basically; or + * we can 2) force a layout, which could be expensive if someone calls + * get_allocation somewhere silly; or we can 3) just return the latest + * value, allowing it to be out-of-date, and assume people know what + * they are doing. * * The least-surprises approach that keeps existing code working is * likely to be 2). People can end up doing some inefficient things, @@ -3816,11 +3830,12 @@ void clutter_actor_get_allocation_geometry (ClutterActor *self, ClutterGeometry *geom) { - int x2, y2; + gint x2, y2; g_return_if_fail (CLUTTER_IS_ACTOR (self)); clutter_actor_get_allocation_coords (self, &geom->x, &geom->y, &x2, &y2); + geom->width = x2 - geom->x; geom->height = y2 - geom->y; } @@ -3880,7 +3895,7 @@ clutter_actor_allocate (ClutterActor *self, box->x2 == priv->allocation.x2 && box->y2 == priv->allocation.y2) { - CLUTTER_NOTE (ACTOR, "No allocation needed"); + CLUTTER_NOTE (LAYOUT, "No allocation needed"); return; } @@ -3908,8 +3923,10 @@ clutter_actor_set_geometry (ClutterActor *self, const ClutterGeometry *geometry) { g_object_freeze_notify (G_OBJECT (self)); + clutter_actor_set_position (self, geometry->x, geometry->y); clutter_actor_set_size (self, geometry->width, geometry->height); + 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_object_freeze_notify (G_OBJECT (self)); + clutter_actor_set_x (self, x); clutter_actor_set_y (self, y); + 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_object_freeze_notify (G_OBJECT (self)); + clutter_actor_set_xu (self, x); clutter_actor_set_yu (self, y); + g_object_thaw_notify (G_OBJECT (self)); } @@ -4074,6 +4095,7 @@ clutter_actor_move_byu (ClutterActor *self, ClutterUnit dy) { ClutterUnit x, y; + g_return_if_fail (CLUTTER_IS_ACTOR (self)); x = self->priv->fixed_x; diff --git a/clutter/clutter-debug.h b/clutter/clutter-debug.h index 697e61288..6d08caf9a 100644 --- a/clutter/clutter-debug.h +++ b/clutter/clutter-debug.h @@ -21,7 +21,8 @@ typedef enum { CLUTTER_DEBUG_SCRIPT = 1 << 11, CLUTTER_DEBUG_SHADER = 1 << 12, CLUTTER_DEBUG_MULTISTAGE = 1 << 13, - CLUTTER_DEBUG_ANIMATION = 1 << 14 + CLUTTER_DEBUG_ANIMATION = 1 << 14, + CLUTTER_DEBUG_LAYOUT = 1 << 15 } ClutterDebugFlag; #ifdef CLUTTER_ENABLE_DEBUG diff --git a/clutter/clutter-main.c b/clutter/clutter-main.c index ad228c63d..31b24d23f 100644 --- a/clutter/clutter-main.c +++ b/clutter/clutter-main.c @@ -92,7 +92,8 @@ static const GDebugKey clutter_debug_keys[] = { { "script", CLUTTER_DEBUG_SCRIPT }, { "shader", CLUTTER_DEBUG_SHADER }, { "multistage", CLUTTER_DEBUG_MULTISTAGE }, - { "animation", CLUTTER_DEBUG_ANIMATION } + { "animation", CLUTTER_DEBUG_ANIMATION }, + { "layout", CLUTTER_DEBUG_LAYOUT } }; #endif /* CLUTTER_ENABLE_DEBUG */