[gimp] libgimpwidgets: support the same "factor" logic as in app's prop widgets
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] libgimpwidgets: support the same "factor" logic as in app's prop widgets
- Date: Mon, 17 Jun 2013 00:15:42 +0000 (UTC)
commit ad2a57760684fae1dbd51e25031929546e74415a
Author: Michael Natterer <mitch gimp org>
Date: Mon Jun 17 02:14:17 2013 +0200
libgimpwidgets: support the same "factor" logic as in app's prop widgets
libgimpwidgets/gimppropwidgets.c | 146 +++++++++++++++++++++-----------------
1 files changed, 80 insertions(+), 66 deletions(-)
---
diff --git a/libgimpwidgets/gimppropwidgets.c b/libgimpwidgets/gimppropwidgets.c
index 1bb28aa..9684de7 100644
--- a/libgimpwidgets/gimppropwidgets.c
+++ b/libgimpwidgets/gimppropwidgets.c
@@ -1230,6 +1230,55 @@ gimp_prop_scale_entry_new (GObject *config,
return adjustment;
}
+static void
+gimp_prop_widget_set_factor (GtkWidget *widget,
+ GtkAdjustment *adjustment,
+ gdouble factor,
+ gint digits)
+{
+ gdouble *factor_store;
+ gdouble old_factor = 1.0;
+ gdouble f;
+
+ g_return_if_fail (widget == NULL || GTK_IS_SPIN_BUTTON (widget));
+ g_return_if_fail (widget != NULL || GTK_IS_ADJUSTMENT (adjustment));
+ g_return_if_fail (factor != 0.0);
+ g_return_if_fail (digits >= 0);
+
+ if (! adjustment)
+ adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget));
+
+ g_return_if_fail (get_param_spec (G_OBJECT (adjustment)) != NULL);
+
+ factor_store = g_object_get_data (G_OBJECT (adjustment),
+ "gimp-prop-adjustment-factor");
+ if (factor_store)
+ {
+ old_factor = *factor_store;
+ }
+ else
+ {
+ factor_store = g_new (gdouble, 1);
+ g_object_set_data_full (G_OBJECT (adjustment),
+ "gimp-prop-adjustment-factor",
+ factor_store, (GDestroyNotify) g_free);
+ }
+
+ *factor_store = factor;
+
+ f = factor / old_factor;
+
+ gtk_adjustment_configure (adjustment,
+ f * gtk_adjustment_get_value (adjustment),
+ f * gtk_adjustment_get_lower (adjustment),
+ f * gtk_adjustment_get_upper (adjustment),
+ f * gtk_adjustment_get_step_increment (adjustment),
+ f * gtk_adjustment_get_page_increment (adjustment),
+ f * gtk_adjustment_get_page_size (adjustment));
+
+ gtk_spin_button_set_digits (GTK_SPIN_BUTTON (widget), digits);
+}
+
/**
* gimp_prop_opacity_entry_new:
* @config: Object to which property is attached.
@@ -1257,49 +1306,22 @@ gimp_prop_opacity_entry_new (GObject *config,
gint row,
const gchar *label)
{
- GParamSpec *param_spec;
- GtkObject *adjustment;
- const gchar *tooltip;
- gdouble value;
- gdouble lower;
- gdouble upper;
+ GtkObject *adjustment;
g_return_val_if_fail (G_IS_OBJECT (config), NULL);
g_return_val_if_fail (property_name != NULL, NULL);
- param_spec = check_param_spec_w (config, property_name,
- G_TYPE_PARAM_DOUBLE, G_STRFUNC);
- if (! param_spec)
- return NULL;
-
- g_object_get (config, property_name, &value, NULL);
-
- tooltip = dgettext (gimp_type_get_translation_domain (G_OBJECT_TYPE (config)),
- g_param_spec_get_blurb (param_spec));
-
- value *= 100.0;
- lower = G_PARAM_SPEC_DOUBLE (param_spec)->minimum * 100.0;
- upper = G_PARAM_SPEC_DOUBLE (param_spec)->maximum * 100.0;
+ adjustment = gimp_prop_scale_entry_new (config, property_name,
+ table, column, row, label,
+ 0.01, 0.1, 1,
+ TRUE, 0.0, 0.0);
- adjustment = gimp_scale_entry_new (table, column, row,
- label, -1, -1,
- value, lower, upper,
- 1.0, 10.0, 1,
- TRUE, 0.0, 0.0,
- tooltip,
- NULL);
-
- set_param_spec (G_OBJECT (adjustment), NULL, param_spec);
- g_object_set_data (G_OBJECT (adjustment),
- "opacity-scale", GINT_TO_POINTER (TRUE));
-
- g_signal_connect (adjustment, "value-changed",
- G_CALLBACK (gimp_prop_adjustment_callback),
- config);
-
- connect_notify (config, property_name,
- G_CALLBACK (gimp_prop_adjustment_notify),
- adjustment);
+ if (adjustment)
+ {
+ gimp_prop_widget_set_factor (GIMP_SCALE_ENTRY_SPINBUTTON (adjustment),
+ GTK_ADJUSTMENT (adjustment),
+ 100.0, 1);
+ }
return adjustment;
}
@@ -1311,6 +1333,7 @@ gimp_prop_adjustment_callback (GtkAdjustment *adjustment,
{
GParamSpec *param_spec;
gdouble value;
+ gdouble *factor;
param_spec = get_param_spec (G_OBJECT (adjustment));
if (! param_spec)
@@ -1318,48 +1341,37 @@ gimp_prop_adjustment_callback (GtkAdjustment *adjustment,
value = gtk_adjustment_get_value (adjustment);
+ factor = g_object_get_data (G_OBJECT (adjustment),
+ "gimp-prop-adjustment-factor");
+ if (factor)
+ value /= *factor;
+
if (G_IS_PARAM_SPEC_INT (param_spec))
{
- g_object_set (config,
- param_spec->name, (gint) value,
- NULL);
+ g_object_set (config, param_spec->name, (gint) value, NULL);
}
else if (G_IS_PARAM_SPEC_UINT (param_spec))
{
- g_object_set (config,
- param_spec->name, (guint) value,
- NULL);
+ g_object_set (config, param_spec->name, (guint) value, NULL);
}
else if (G_IS_PARAM_SPEC_LONG (param_spec))
{
- g_object_set (config,
- param_spec->name, (glong) value,
- NULL);
+ g_object_set (config, param_spec->name, (glong) value, NULL);
}
else if (G_IS_PARAM_SPEC_ULONG (param_spec))
{
- g_object_set (config,
- param_spec->name, (gulong) value,
- NULL);
+ g_object_set (config, param_spec->name, (gulong) value, NULL);
}
else if (G_IS_PARAM_SPEC_INT64 (param_spec))
{
- g_object_set (config,
- param_spec->name, (gint64) value,
- NULL);
+ g_object_set (config, param_spec->name, (gint64) value, NULL);
}
else if (G_IS_PARAM_SPEC_UINT64 (param_spec))
{
- g_object_set (config,
- param_spec->name, (guint64) value,
- NULL);
+ g_object_set (config, param_spec->name, (guint64) value, NULL);
}
else if (G_IS_PARAM_SPEC_DOUBLE (param_spec))
{
- if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (adjustment),
- "opacity-scale")))
- value /= 100.0;
-
g_object_set (config, param_spec->name, value, NULL);
}
}
@@ -1369,7 +1381,8 @@ gimp_prop_adjustment_notify (GObject *config,
GParamSpec *param_spec,
GtkAdjustment *adjustment)
{
- gdouble value;
+ gdouble value;
+ gdouble *factor;
if (G_IS_PARAM_SPEC_INT (param_spec))
{
@@ -1426,10 +1439,6 @@ gimp_prop_adjustment_notify (GObject *config,
else if (G_IS_PARAM_SPEC_DOUBLE (param_spec))
{
g_object_get (config, param_spec->name, &value, NULL);
-
- if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (adjustment),
- "opacity-scale")))
- value *= 100.0;
}
else
{
@@ -1438,6 +1447,11 @@ gimp_prop_adjustment_notify (GObject *config,
return;
}
+ factor = g_object_get_data (G_OBJECT (adjustment),
+ "gimp-prop-adjustment-factor");
+ if (factor)
+ value *= *factor;
+
if (gtk_adjustment_get_value (adjustment) != value)
{
g_signal_handlers_block_by_func (adjustment,
@@ -3925,7 +3939,7 @@ check_param_spec_w (GObject *object,
if (param_spec &&
(param_spec->flags & G_PARAM_WRITABLE) == 0)
{
- g_warning ("%s: property '%s' of %s is writable",
+ g_warning ("%s: property '%s' of %s is not writable",
strloc,
param_spec->name,
g_type_name (param_spec->owner_type));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]