static void st_box_layout_allocate (ClutterActor *actor, const ClutterActorBox *box, ClutterAllocationFlags flags) { StBoxLayoutPrivate *priv = ST_BOX_LAYOUT (actor)->priv; StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor)); ClutterLayoutManager *layout = clutter_actor_get_layout_manager (actor); ClutterActorBox content_box; gfloat avail_width, avail_height, min_width, natural_width, min_height, natural_height; CLUTTER_ACTOR_CLASS (st_box_layout_parent_class)->allocate (actor, box, flags); st_theme_node_get_content_box (theme_node, box, &content_box); clutter_actor_box_get_size (&content_box, &avail_width, &avail_height); clutter_layout_manager_get_preferred_width (layout, CLUTTER_CONTAINER (actor), avail_height, &min_width, &natural_width); clutter_layout_manager_get_preferred_height (layout, CLUTTER_CONTAINER (actor), MAX (avail_width, min_width), &min_height, &natural_height); /* update adjustments for scrolling */ if (priv->vadjustment) { gdouble prev_value; g_object_set (G_OBJECT (priv->vadjustment), "lower", 0.0, "upper", MAX (min_height, avail_height), "page-size", avail_height, "step-increment", avail_height / 6, "page-increment", avail_height - avail_height / 6, NULL); prev_value = st_adjustment_get_value (priv->vadjustment); st_adjustment_set_value (priv->vadjustment, prev_value); } if (priv->hadjustment) { gdouble prev_value; g_object_set (G_OBJECT (priv->hadjustment), "lower", 0.0, "upper", MAX (min_width, avail_width), "page-size", avail_width, "step-increment", avail_width / 6, "page-increment", avail_width - avail_width / 6, NULL); prev_value = st_adjustment_get_value (priv->hadjustment); st_adjustment_set_value (priv->hadjustment, prev_value); } }
static void clutter_box_real_get_preferred_width (ClutterActor *actor, gfloat for_height, gfloat *min_width, gfloat *natural_width) { ClutterBoxPrivate *priv = CLUTTER_BOX (actor)->priv; clutter_layout_manager_get_preferred_width (priv->manager, CLUTTER_CONTAINER (actor), for_height, min_width, natural_width); }
static void champlain_group_real_get_preferred_width (ClutterActor *actor, gfloat for_height, gfloat *min_width, gfloat *natural_width) { ChamplainGroupPrivate *priv = CHAMPLAIN_GROUP (actor)->priv; clutter_layout_manager_get_preferred_width (priv->layout, CLUTTER_CONTAINER (actor), for_height, min_width, natural_width); }
static VALUE rbclt_layout_manager_get_preferred_width (VALUE self, VALUE container, VALUE for_height) { ClutterLayoutManager *manager = CLUTTER_LAYOUT_MANAGER (RVAL2GOBJ (self)); ClutterContainer *g_container = CLUTTER_CONTAINER (RVAL2GOBJ (container)); gfloat min_width, nat_width; VALUE answer = rb_hash_new (); clutter_layout_manager_get_preferred_width (manager, g_container, NUM2INT (for_height), &min_width, &nat_width); rb_hash_aset (answer, rb_intern("min"), rb_float_new (min_width)); rb_hash_aset (answer, rb_intern("nat"), rb_float_new (nat_width)); return answer; }