diff --git a/ChangeLog b/ChangeLog index 9d8ba37d7d..7255155e1a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2003-02-19 Sven Neumann + + * app/widgets/gimppropwidgets.[ch]: added a new widget constructor + gimp_prop_opacity_entry_new() which is a scale entry with a display + factor of 100.0. + + * app/tools/paint_options.c: use the new opacity scale for opacity + controls. + 2003-02-19 Sven Neumann * plug-ins/common/uniteditor.c: fixed typo. diff --git a/app/tools/gimppaintoptions-gui.c b/app/tools/gimppaintoptions-gui.c index 41fa544b8a..1af4b1ada4 100644 --- a/app/tools/gimppaintoptions-gui.c +++ b/app/tools/gimppaintoptions-gui.c @@ -96,11 +96,9 @@ gimp_paint_options_gui (GimpToolOptions *tool_options) gtk_widget_show (table); /* the opacity scale */ - gimp_prop_scale_entry_new (config, "opacity", - GTK_TABLE (table), 0, 0, - _("Opacity:"), - 1.0, 10.0, 1, - FALSE, 0.0, 0.0); + gimp_prop_opacity_entry_new (config, "opacity", + GTK_TABLE (table), 0, 0, + _("Opacity:")); /* the paint mode menu */ optionmenu = gimp_prop_paint_mode_menu_new (config, "paint-mode", TRUE); diff --git a/app/tools/paint_options.c b/app/tools/paint_options.c index 41fa544b8a..1af4b1ada4 100644 --- a/app/tools/paint_options.c +++ b/app/tools/paint_options.c @@ -96,11 +96,9 @@ gimp_paint_options_gui (GimpToolOptions *tool_options) gtk_widget_show (table); /* the opacity scale */ - gimp_prop_scale_entry_new (config, "opacity", - GTK_TABLE (table), 0, 0, - _("Opacity:"), - 1.0, 10.0, 1, - FALSE, 0.0, 0.0); + gimp_prop_opacity_entry_new (config, "opacity", + GTK_TABLE (table), 0, 0, + _("Opacity:")); /* the paint mode menu */ optionmenu = gimp_prop_paint_mode_menu_new (config, "paint-mode", TRUE); diff --git a/app/widgets/gimppropwidgets.c b/app/widgets/gimppropwidgets.c index d08e17accf..7345e670c7 100644 --- a/app/widgets/gimppropwidgets.c +++ b/app/widgets/gimppropwidgets.c @@ -725,6 +725,58 @@ gimp_prop_scale_entry_new (GObject *config, return adjustment; } +GtkObject * +gimp_prop_opacity_entry_new (GObject *config, + const gchar *property_name, + GtkTable *table, + gint column, + gint row, + const gchar *label) +{ + GParamSpec *param_spec; + GtkObject *adjustment; + const gchar *tooltip; + gdouble lower; + gdouble upper; + gdouble value; + + param_spec = check_param_spec (config, property_name, + G_TYPE_PARAM_DOUBLE, G_STRLOC); + if (! param_spec) + return NULL; + + g_object_get (config, property_name, &value, NULL); + + tooltip = gettext (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_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); + + return adjustment; +} + + static void gimp_prop_adjustment_callback (GtkAdjustment *adjustment, GObject *config) @@ -737,33 +789,31 @@ gimp_prop_adjustment_callback (GtkAdjustment *adjustment, if (G_IS_PARAM_SPEC_INT (param_spec)) { - g_object_set (config, - param_spec->name, (gint) adjustment->value, - NULL); + g_object_set (config, param_spec->name, (gint) adjustment->value, NULL); } else if (G_IS_PARAM_SPEC_UINT (param_spec)) { - g_object_set (config, - param_spec->name, (guint) adjustment->value, - NULL); + g_object_set (config, param_spec->name, (guint) adjustment->value, NULL); } else if (G_IS_PARAM_SPEC_LONG (param_spec)) { - g_object_set (config, - param_spec->name, (glong) adjustment->value, - NULL); + g_object_set (config, param_spec->name, (glong) adjustment->value, NULL); } else if (G_IS_PARAM_SPEC_ULONG (param_spec)) { - g_object_set (config, - param_spec->name, (gulong) adjustment->value, - NULL); + g_object_set (config, param_spec->name, adjustment->value, NULL); } else if (G_IS_PARAM_SPEC_DOUBLE (param_spec)) { - g_object_set (config, - param_spec->name, adjustment->value, - NULL); + gdouble value; + + if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (adjustment), + "opacity-scale"))) + value = adjustment->value / 100.0; + else + value = adjustment->value; + + g_object_set (config, param_spec->name, value, NULL); } } @@ -778,9 +828,7 @@ gimp_prop_adjustment_notify (GObject *config, { gint int_value; - g_object_get (config, - param_spec->name, &int_value, - NULL); + g_object_get (config, param_spec->name, &int_value, NULL); value = int_value; } @@ -788,9 +836,7 @@ gimp_prop_adjustment_notify (GObject *config, { guint uint_value; - g_object_get (config, - param_spec->name, &uint_value, - NULL); + g_object_get (config, param_spec->name, &uint_value, NULL); value = uint_value; } @@ -798,9 +844,7 @@ gimp_prop_adjustment_notify (GObject *config, { glong long_value; - g_object_get (config, - param_spec->name, &long_value, - NULL); + g_object_get (config, param_spec->name, &long_value, NULL); value = long_value; } @@ -808,17 +852,17 @@ gimp_prop_adjustment_notify (GObject *config, { gulong ulong_value; - g_object_get (config, - param_spec->name, &ulong_value, - NULL); + g_object_get (config, param_spec->name, &ulong_value, NULL); value = ulong_value; } else if (G_IS_PARAM_SPEC_DOUBLE (param_spec)) { - g_object_get (config, - param_spec->name, &value, - NULL); + 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 { diff --git a/app/widgets/gimppropwidgets.h b/app/widgets/gimppropwidgets.h index 1adf08a7d7..ffe602fe0c 100644 --- a/app/widgets/gimppropwidgets.h +++ b/app/widgets/gimppropwidgets.h @@ -82,6 +82,15 @@ GtkObject * gimp_prop_scale_entry_new (GObject *config, gdouble restricted_lower, gdouble restricted_upper); +/* special form of gimp_prop_scale_entry_new() for GParamDouble */ + +GtkObject * gimp_prop_opacity_entry_new (GObject *config, + const gchar *property_name, + GtkTable *table, + gint column, + gint row, + const gchar *label); + /* GimpParamMemsize */ diff --git a/libgimpwidgets/gimppropwidgets.c b/libgimpwidgets/gimppropwidgets.c index d08e17accf..7345e670c7 100644 --- a/libgimpwidgets/gimppropwidgets.c +++ b/libgimpwidgets/gimppropwidgets.c @@ -725,6 +725,58 @@ gimp_prop_scale_entry_new (GObject *config, return adjustment; } +GtkObject * +gimp_prop_opacity_entry_new (GObject *config, + const gchar *property_name, + GtkTable *table, + gint column, + gint row, + const gchar *label) +{ + GParamSpec *param_spec; + GtkObject *adjustment; + const gchar *tooltip; + gdouble lower; + gdouble upper; + gdouble value; + + param_spec = check_param_spec (config, property_name, + G_TYPE_PARAM_DOUBLE, G_STRLOC); + if (! param_spec) + return NULL; + + g_object_get (config, property_name, &value, NULL); + + tooltip = gettext (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_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); + + return adjustment; +} + + static void gimp_prop_adjustment_callback (GtkAdjustment *adjustment, GObject *config) @@ -737,33 +789,31 @@ gimp_prop_adjustment_callback (GtkAdjustment *adjustment, if (G_IS_PARAM_SPEC_INT (param_spec)) { - g_object_set (config, - param_spec->name, (gint) adjustment->value, - NULL); + g_object_set (config, param_spec->name, (gint) adjustment->value, NULL); } else if (G_IS_PARAM_SPEC_UINT (param_spec)) { - g_object_set (config, - param_spec->name, (guint) adjustment->value, - NULL); + g_object_set (config, param_spec->name, (guint) adjustment->value, NULL); } else if (G_IS_PARAM_SPEC_LONG (param_spec)) { - g_object_set (config, - param_spec->name, (glong) adjustment->value, - NULL); + g_object_set (config, param_spec->name, (glong) adjustment->value, NULL); } else if (G_IS_PARAM_SPEC_ULONG (param_spec)) { - g_object_set (config, - param_spec->name, (gulong) adjustment->value, - NULL); + g_object_set (config, param_spec->name, adjustment->value, NULL); } else if (G_IS_PARAM_SPEC_DOUBLE (param_spec)) { - g_object_set (config, - param_spec->name, adjustment->value, - NULL); + gdouble value; + + if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (adjustment), + "opacity-scale"))) + value = adjustment->value / 100.0; + else + value = adjustment->value; + + g_object_set (config, param_spec->name, value, NULL); } } @@ -778,9 +828,7 @@ gimp_prop_adjustment_notify (GObject *config, { gint int_value; - g_object_get (config, - param_spec->name, &int_value, - NULL); + g_object_get (config, param_spec->name, &int_value, NULL); value = int_value; } @@ -788,9 +836,7 @@ gimp_prop_adjustment_notify (GObject *config, { guint uint_value; - g_object_get (config, - param_spec->name, &uint_value, - NULL); + g_object_get (config, param_spec->name, &uint_value, NULL); value = uint_value; } @@ -798,9 +844,7 @@ gimp_prop_adjustment_notify (GObject *config, { glong long_value; - g_object_get (config, - param_spec->name, &long_value, - NULL); + g_object_get (config, param_spec->name, &long_value, NULL); value = long_value; } @@ -808,17 +852,17 @@ gimp_prop_adjustment_notify (GObject *config, { gulong ulong_value; - g_object_get (config, - param_spec->name, &ulong_value, - NULL); + g_object_get (config, param_spec->name, &ulong_value, NULL); value = ulong_value; } else if (G_IS_PARAM_SPEC_DOUBLE (param_spec)) { - g_object_get (config, - param_spec->name, &value, - NULL); + 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 { diff --git a/libgimpwidgets/gimppropwidgets.h b/libgimpwidgets/gimppropwidgets.h index 1adf08a7d7..ffe602fe0c 100644 --- a/libgimpwidgets/gimppropwidgets.h +++ b/libgimpwidgets/gimppropwidgets.h @@ -82,6 +82,15 @@ GtkObject * gimp_prop_scale_entry_new (GObject *config, gdouble restricted_lower, gdouble restricted_upper); +/* special form of gimp_prop_scale_entry_new() for GParamDouble */ + +GtkObject * gimp_prop_opacity_entry_new (GObject *config, + const gchar *property_name, + GtkTable *table, + gint column, + gint row, + const gchar *label); + /* GimpParamMemsize */