bind-constraint: Update the preferred size
Bind the preferred size of an actor using a BindConstraint to the preferred size of the source of the constraint, depending on the coordinate of the constraint. https://gitlab.gnome.org/GNOME/mutter/merge_requests/1070
This commit is contained in:
parent
d2953e0d33
commit
4f8e518d42
@ -144,6 +144,55 @@ source_destroyed (ClutterActor *actor,
|
|||||||
bind->source = NULL;
|
bind->source = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_bind_constraint_update_preferred_size (ClutterConstraint *constraint,
|
||||||
|
ClutterActor *actor,
|
||||||
|
ClutterOrientation direction,
|
||||||
|
float for_size,
|
||||||
|
float *minimum_size,
|
||||||
|
float *natural_size)
|
||||||
|
{
|
||||||
|
ClutterBindConstraint *bind = CLUTTER_BIND_CONSTRAINT (constraint);
|
||||||
|
float source_min, source_nat;
|
||||||
|
|
||||||
|
if (bind->source == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* only these bindings affect the preferred size */
|
||||||
|
if (!(bind->coordinate == CLUTTER_BIND_WIDTH ||
|
||||||
|
bind->coordinate == CLUTTER_BIND_HEIGHT ||
|
||||||
|
bind->coordinate == CLUTTER_BIND_SIZE ||
|
||||||
|
bind->coordinate == CLUTTER_BIND_ALL))
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (direction)
|
||||||
|
{
|
||||||
|
case CLUTTER_ORIENTATION_HORIZONTAL:
|
||||||
|
if (bind->coordinate != CLUTTER_BIND_HEIGHT)
|
||||||
|
{
|
||||||
|
clutter_actor_get_preferred_width (bind->source, for_size,
|
||||||
|
&source_min,
|
||||||
|
&source_nat);
|
||||||
|
|
||||||
|
*minimum_size = source_min;
|
||||||
|
*natural_size = source_nat;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_ORIENTATION_VERTICAL:
|
||||||
|
if (bind->coordinate != CLUTTER_BIND_WIDTH)
|
||||||
|
{
|
||||||
|
clutter_actor_get_preferred_height (bind->source, for_size,
|
||||||
|
&source_min,
|
||||||
|
&source_nat);
|
||||||
|
|
||||||
|
*minimum_size = source_min;
|
||||||
|
*natural_size = source_nat;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
clutter_bind_constraint_update_allocation (ClutterConstraint *constraint,
|
clutter_bind_constraint_update_allocation (ClutterConstraint *constraint,
|
||||||
ClutterActor *actor,
|
ClutterActor *actor,
|
||||||
@ -328,6 +377,8 @@ clutter_bind_constraint_class_init (ClutterBindConstraintClass *klass)
|
|||||||
meta_class->set_actor = clutter_bind_constraint_set_actor;
|
meta_class->set_actor = clutter_bind_constraint_set_actor;
|
||||||
|
|
||||||
constraint_class->update_allocation = clutter_bind_constraint_update_allocation;
|
constraint_class->update_allocation = clutter_bind_constraint_update_allocation;
|
||||||
|
constraint_class->update_preferred_size = clutter_bind_constraint_update_preferred_size;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ClutterBindConstraint:source:
|
* ClutterBindConstraint:source:
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user