[gegl] property meta-data: add ui_digits
- From: Øyvind Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] property meta-data: add ui_digits
- Date: Tue, 20 May 2014 14:24:35 +0000 (UTC)
commit 33e1d28776f0f3d1984eeb22c2c90b2f97b1ea04
Author: Øyvind Kolås <pippin gimp org>
Date: Tue May 20 16:23:49 2014 +0200
property meta-data: add ui_digits
Also improve logic for auto-detecting good values.
gegl/gegl-op.h | 63 ++++++++++++++++++++++++++++-----
gegl/property-types/gegl-paramspecs.c | 9 +++++
gegl/property-types/gegl-paramspecs.h | 6 +++
operations/common/noise-rgb.c | 5 ---
4 files changed, 69 insertions(+), 14 deletions(-)
---
diff --git a/gegl/gegl-op.h b/gegl/gegl-op.h
index 3f43ea2..a5998c5 100644
--- a/gegl/gegl-op.h
+++ b/gegl/gegl-op.h
@@ -235,6 +235,7 @@ gegl_module_register (GTypeModule *module)
#define ui_gamma(gamma)
#define ui_steps(small_increment, big_increment)
#define ui_meta(key,val)
+#define ui_digits(digits)
#define ITEM(name,label,def_val, type)
#define ITEM2(name,label,def_val,type) ITEM(name,label,def_val,type)
@@ -906,10 +907,21 @@ gegl_op_constructor (GType type,
return obj;
}
+static gboolean has_key (GParamSpec *pspec,
+ const gchar *key,
+ const gchar *value)
+{
+ const char *set_value = gegl_param_spec_get_property_key (pspec, key);
+ if (set_value && g_str_equal (value, set_value))
+ return TRUE;
+ return FALSE;
+}
+
static void
param_spec_update_ui (GParamSpec *pspec,
gboolean ui_range_set,
- gboolean ui_steps_set)
+ gboolean ui_steps_set,
+ gboolean ui_digits_set)
{
if (GEGL_IS_PARAM_SPEC_DOUBLE (pspec))
{
@@ -924,15 +936,20 @@ param_spec_update_ui (GParamSpec *pspec,
upspec->ui_minimum = vpspec->minimum;
}
- if (upspec->ui_maximum <= 5.0)
+ if (has_key (pspec, "unit", "degree"))
{
- upspec->ui_step_small = 0.01;
- upspec->ui_step_big = 0.10;
+ upspec->ui_step_small = 1.0;
+ upspec->ui_step_big = 15.0;
+ }
+ else if (upspec->ui_maximum <= 5.0)
+ {
+ upspec->ui_step_small = 0.001;
+ upspec->ui_step_big = 0.100;
}
else if (upspec->ui_maximum <= 50)
{
- upspec->ui_step_small = 0.1;
- upspec->ui_step_big = 1.0;
+ upspec->ui_step_small = 0.01;
+ upspec->ui_step_big = 1.00;
}
else if (upspec->ui_maximum <= 500)
{
@@ -945,6 +962,30 @@ param_spec_update_ui (GParamSpec *pspec,
upspec->ui_step_big = 100.0;
}
}
+
+ if (!ui_digits_set)
+ {
+ if (has_key (pspec, "unit", "degrees"))
+ {
+ upspec->ui_digits = 2;
+ }
+ else if (upspec->ui_maximum <= 5.0)
+ {
+ upspec->ui_digits = 4;
+ }
+ if (upspec->ui_maximum <= 50.0)
+ {
+ upspec->ui_digits = 3;
+ }
+ else if (upspec->ui_maximum <= 500)
+ {
+ upspec->ui_digits = 2;
+ }
+ else
+ {
+ upspec->ui_digits = 1;
+ }
+ }
}
else if (GEGL_IS_PARAM_SPEC_INT (pspec))
{
@@ -979,7 +1020,6 @@ param_spec_update_ui (GParamSpec *pspec,
upspec->ui_step_small = 1;
upspec->ui_step_big = 100;
}
-
}
}
}
@@ -991,6 +1031,7 @@ gegl_op_class_intern_init (gpointer klass)
int current_prop = -1;
gboolean G_GNUC_UNUSED ui_range_set = FALSE;
gboolean G_GNUC_UNUSED ui_steps_set = FALSE;
+ gboolean G_GNUC_UNUSED ui_digits_set = FALSE;
GParamFlags flags G_GNUC_UNUSED = G_PARAM_READWRITE | G_PARAM_CONSTRUCT | GEGL_PARAM_PAD_INPUT;
object_class->set_property = set_property;
@@ -1006,13 +1047,14 @@ gegl_op_class_intern_init (gpointer klass)
#undef ui_steps
#undef ui_gamma
#undef ui_meta
+#undef ui_digits
#define REGISTER_IF_ANY \
if (pspec && current_prop >=0) {\
- param_spec_update_ui (pspec, ui_range_set, ui_steps_set);\
+ param_spec_update_ui (pspec, ui_range_set, ui_steps_set, ui_digits_set);\
g_object_class_install_property (object_class, current_prop, pspec);\
pspec = NULL; current_prop = -1;\
- ui_range_set = ui_steps_set = FALSE;\
+ ui_range_set = ui_steps_set = ui_digits_set = FALSE;\
}
#define description(blurb) \
@@ -1030,6 +1072,9 @@ gegl_op_class_intern_init (gpointer klass)
upspec->ui_gamma = gamma;
#define ui_meta(key,val) \
gegl_param_spec_set_property_key(pspec, key, val);
+#define ui_digits(digits) \
+ upspec->ui_digits = digits; \
+ ui_digits_set = TRUE;
#define property_double(name, label, def_val) \
REGISTER_IF_ANY \
diff --git a/gegl/property-types/gegl-paramspecs.c b/gegl/property-types/gegl-paramspecs.c
index b4b2b24..ae70446 100644
--- a/gegl/property-types/gegl-paramspecs.c
+++ b/gegl/property-types/gegl-paramspecs.c
@@ -99,6 +99,7 @@ gegl_param_spec_double (const gchar *name,
pspec->ui_maximum = ui_maximum;
pspec->ui_gamma = ui_gamma;
gegl_param_spec_double_set_steps (pspec, 0.1, 1.0);
+ gegl_param_spec_double_set_digits (pspec, 2);
return G_PARAM_SPEC (pspec);
}
@@ -114,6 +115,14 @@ gegl_param_spec_double_set_steps (GeglParamSpecDouble *pspec,
pspec->ui_step_big = step_big;
}
+void gegl_param_spec_double_set_digits (GeglParamSpecDouble *pspec,
+ gint digits)
+{
+ g_return_if_fail (GEGL_IS_PARAM_SPEC_DOUBLE (pspec));
+
+ pspec->ui_digits = digits;
+}
+
gdouble gegl_param_spec_double_get_step_size (GeglParamSpecDouble *pspec);
gdouble gegl_param_spec_double_get_page_size (GeglParamSpecDouble *pspec);
diff --git a/gegl/property-types/gegl-paramspecs.h b/gegl/property-types/gegl-paramspecs.h
index caa1e2b..4e1452b 100644
--- a/gegl/property-types/gegl-paramspecs.h
+++ b/gegl/property-types/gegl-paramspecs.h
@@ -61,6 +61,7 @@ struct _GeglParamSpecDouble
*/
gdouble ui_step_small;
gdouble ui_step_big;
+ gint ui_digits;
};
GType gegl_param_double_get_type (void) G_GNUC_CONST;
@@ -94,10 +95,15 @@ GParamSpec * gegl_param_spec_double (const gchar *name,
GParamFlags flags);
+/* utility function to initialize ui_steps; should be moved to constructor
+ * when breaking API/ABI */
void gegl_param_spec_double_set_steps (GeglParamSpecDouble *pspec,
gdouble small_step,
gdouble big_step);
+void gegl_param_spec_double_set_digits (GeglParamSpecDouble *pspec,
+ gint digits);
+
/*
* GEGL_TYPE_PARAM_INT
*/
diff --git a/operations/common/noise-rgb.c b/operations/common/noise-rgb.c
index 2647f13..2adcc89 100644
--- a/operations/common/noise-rgb.c
+++ b/operations/common/noise-rgb.c
@@ -31,20 +31,15 @@ property_boolean (independent, _("Independent RGB"), TRUE)
property_double (red, _("Red"), 0.20)
value_range (0.0, 1.0)
- ui_range (0.0, 1.0)
- ui_steps (0.01, 0.1)
property_double (green, _("Green"), 0.20)
value_range (0.0, 1.0)
- ui_range (0.0, 1.0)
property_double (blue, _("Blue"), 0.20)
value_range (0.0, 1.0)
- ui_range (0.0, 1.0)
property_double (alpha, _("Alpha"), 0.0)
value_range (0.0, 1.0)
- ui_range (0.0, 1.0)
property_seed (seed, _("Random seed"), rand)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]