diff options
author | Matthias Clasen <mclasen@redhat.com> | 2019-06-29 14:18:23 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2019-07-01 00:10:11 +0100 |
commit | a9dfca04e4403b9e7b17e9550a7b837c1b232f2c (patch) | |
tree | 971f75e04c0d06e28bb8e8255985bd113eddfc63 | |
parent | 71b52f485e26a8eec0e583dd1b9a2d202030d817 (diff) | |
download | gtk+-a9dfca04e4403b9e7b17e9550a7b837c1b232f2c.tar.gz |
constraint guide: Make strength tweakable
The strength for the natural width can be used
as a tie-breaker to make instable systems behave
in a more predictable way. This can be seen
in the simple constraints demo in gtk-demo.
-rw-r--r-- | demos/gtk-demo/constraints.c | 1 | ||||
-rw-r--r-- | gtk/gtkconstraintguide.c | 46 | ||||
-rw-r--r-- | gtk/gtkconstraintguide.h | 8 |
3 files changed, 54 insertions, 1 deletions
diff --git a/demos/gtk-demo/constraints.c b/demos/gtk-demo/constraints.c index 9e2bf3577d..1b6b00b2f5 100644 --- a/demos/gtk-demo/constraints.c +++ b/demos/gtk-demo/constraints.c @@ -88,6 +88,7 @@ build_constraints (SimpleGrid *self, gtk_constraint_guide_set_min_size (guide, 10, 10); gtk_constraint_guide_set_nat_size (guide, 100, 10); gtk_constraint_guide_set_max_size (guide, 200, 20); + gtk_constraint_guide_set_strength (guide, GTK_CONSTRAINT_STRENGTH_STRONG); gtk_constraint_layout_add_guide (manager, guide); gtk_constraint_layout_add_constraint (manager, diff --git a/gtk/gtkconstraintguide.c b/gtk/gtkconstraintguide.c index 60220c60f6..b6db1554b2 100644 --- a/gtk/gtkconstraintguide.c +++ b/gtk/gtkconstraintguide.c @@ -47,6 +47,8 @@ struct _GtkConstraintGuide char *name; + int strength; + int values[LAST_VALUE]; GtkConstraintLayout *layout; @@ -73,6 +75,7 @@ enum { PROP_NAT_HEIGHT, PROP_MAX_WIDTH, PROP_MAX_HEIGHT, + PROP_STRENGTH, PROP_NAME, LAST_PROP }; @@ -137,7 +140,7 @@ gtk_constraint_guide_update_constraint (GtkConstraintGuide *guide, guide->constraints[index] = gtk_constraint_solver_add_stay_variable (solver, var, - GTK_CONSTRAINT_WEIGHT_MEDIUM); + guide->strength); } else { @@ -232,6 +235,10 @@ gtk_constraint_guide_set_property (GObject *gobject, } break; + case PROP_STRENGTH: + gtk_constraint_guide_set_strength (self, g_value_get_enum (value)); + break; + case PROP_NAME: gtk_constraint_guide_set_name (self, g_value_get_string (value)); break; @@ -261,6 +268,10 @@ gtk_constraint_guide_get_property (GObject *gobject, g_value_set_int (value, self->values[prop_id - 1]); break; + case PROP_STRENGTH: + g_value_set_int (value, self->strength); + break; + case PROP_NAME: g_value_set_string (value, self->name); break; @@ -335,6 +346,15 @@ gtk_constraint_guide_class_init (GtkConstraintGuideClass *class) G_PARAM_READWRITE| G_PARAM_EXPLICIT_NOTIFY); + guide_props[PROP_STRENGTH] = + g_param_spec_enum ("strength", + "Strength", + "The strength to use for natural size", + GTK_TYPE_CONSTRAINT_STRENGTH, + GTK_CONSTRAINT_STRENGTH_MEDIUM, + G_PARAM_READWRITE| + G_PARAM_EXPLICIT_NOTIFY); + guide_props[PROP_NAME] = g_param_spec_string ("name", "Name", @@ -538,3 +558,27 @@ gtk_constraint_guide_set_name (GtkConstraintGuide *guide, guide->name = g_strdup (name); g_object_notify_by_pspec (G_OBJECT (guide), guide_props[PROP_NAME]); } + +GtkConstraintStrength +gtk_constraint_guide_get_strength (GtkConstraintGuide *guide) +{ + g_return_val_if_fail (GTK_IS_CONSTRAINT_GUIDE (guide), + GTK_CONSTRAINT_STRENGTH_MEDIUM); + + return guide->strength; +} + +void +gtk_constraint_guide_set_strength (GtkConstraintGuide *guide, + GtkConstraintStrength strength) +{ + g_return_if_fail (GTK_IS_CONSTRAINT_GUIDE (guide)); + + if (guide->strength == strength) + return; + + guide->strength = strength; + g_object_notify_by_pspec (G_OBJECT (guide), guide_props[PROP_STRENGTH]); + gtk_constraint_guide_update_constraint (guide, NAT_WIDTH); + gtk_constraint_guide_update_constraint (guide, NAT_HEIGHT); +} diff --git a/gtk/gtkconstraintguide.h b/gtk/gtkconstraintguide.h index 429085c1f9..1a489543f8 100644 --- a/gtk/gtkconstraintguide.h +++ b/gtk/gtkconstraintguide.h @@ -21,6 +21,7 @@ #include <gtk/gtktypes.h> #include <gtk/gtkenums.h> +#include <gtk/gtktypebuiltins.h> G_BEGIN_DECLS @@ -67,6 +68,13 @@ GDK_AVAILABLE_IN_ALL void gtk_constraint_guide_get_max_size (GtkConstraintGuide *guide, int *width, int *height); + +GDK_AVAILABLE_IN_ALL +GtkConstraintStrength gtk_constraint_guide_get_strength (GtkConstraintGuide *guide); +GDK_AVAILABLE_IN_ALL +void gtk_constraint_guide_set_strength (GtkConstraintGuide *guide, + GtkConstraintStrength strength); + GDK_AVAILABLE_IN_ALL void gtk_constraint_guide_set_name (GtkConstraintGuide *guide, const char *name); |