plug-ins: Restore drag arrows in Sample Colorize

This feature was broken during the initial
port to GimpProcedureConfig, due to the
Out Level parameters not being properly
clamped when interacted with. This patch
fixes the clamping and restores the call
to level_in_draw () to show the arrows.
It also sets the gamma widget's increments
to match 2.10's range.
This commit is contained in:
Alx Sa 2024-09-17 12:06:32 +00:00
parent 290e46b912
commit 1513f41614
1 changed files with 34 additions and 21 deletions

View File

@ -665,7 +665,6 @@ smp_adj_lvl_in_min_upd_callback (GObject *config,
g_object_get (config,
"in-low", &value,
NULL);
value = CLAMP (value, 0, 254);
if (value != g_values.lvl_in_min)
{
@ -690,7 +689,6 @@ smp_text_gamma_upd_callback (GObject *config,
g_object_get (config,
"gamma", &value,
NULL);
value = CLAMP (value, 0.1, 10.0);
if (value != g_values.lvl_in_gamma)
{
@ -736,7 +734,6 @@ smp_adj_lvl_out_min_upd_callback (GObject *config,
g_object_get (config,
"out-low", &value,
NULL);
value = CLAMP (value, 0, 254);
if (value != g_values.lvl_out_min)
{
@ -1069,9 +1066,13 @@ levels_update (gint update)
"in-low", g_values.lvl_in_min,
NULL);
if (update & GAMMA)
g_object_set (g_di.config,
"gamma", g_values.lvl_in_gamma,
NULL);
{
g_values.lvl_in_gamma = CLAMP (g_values.lvl_in_gamma, 0.1, 10.0);
g_object_set (g_di.config,
"gamma", g_values.lvl_in_gamma,
NULL);
}
if (update & HIGH_INPUT)
g_object_set (g_di.config,
"in-high", g_values.lvl_in_max,
@ -1179,9 +1180,14 @@ level_in_events (GtkWidget *widget,
switch (g_di.active_slider)
{
case 0: /* low input */
g_values.lvl_in_min = ((double) x / (double) DA_WIDTH) * 255.0;
g_values.lvl_in_min = CLAMP (g_values.lvl_in_min,
0, g_values.lvl_in_max);
{
gint lvl_in_max = (g_values.lvl_in_max < 255) ?
g_values.lvl_in_max : 254;
g_values.lvl_in_min = ((double) x / (double) DA_WIDTH) * 255.0;
g_values.lvl_in_min = CLAMP (g_values.lvl_in_min,
0, lvl_in_max);
}
break;
case 1: /* gamma */
@ -1195,6 +1201,7 @@ level_in_events (GtkWidget *widget,
/* round the gamma value to the nearest 1/100th */
g_values.lvl_in_gamma =
floor (g_values.lvl_in_gamma * 100 + 0.5) / 100.0;
g_values.lvl_in_gamma = CLAMP (g_values.lvl_in_gamma, 0.1, 10.0);
break;
case 2: /* high input */
@ -1318,9 +1325,14 @@ level_out_events (GtkWidget *widget,
switch (g_di.active_slider)
{
case 3: /* low output */
g_values.lvl_out_min = ((double) x / (double) DA_WIDTH) * 255.0;
g_values.lvl_out_min = CLAMP (g_values.lvl_out_min,
0, g_values.lvl_out_max);
{
gint lvl_out_max = (g_values.lvl_out_max < 255) ?
g_values.lvl_out_max : 254;
g_values.lvl_out_min = ((double) x / (double) DA_WIDTH) * 255.0;
g_values.lvl_out_min = CLAMP (g_values.lvl_out_min,
0, lvl_out_max);
}
break;
case 4: /* high output */
@ -1381,6 +1393,7 @@ smp_dialog (GimpProcedure *procedure,
GtkWidget *grid;
GtkWidget *check_button;
GtkWidget *label;
GtkWidget *spin_button;
GtkWidget *combo;
gint ty;
gboolean run;
@ -1576,10 +1589,9 @@ smp_dialog (GimpProcedure *procedure,
g_signal_connect (g_di.in_lvl_drawarea, "event",
G_CALLBACK (level_in_events),
NULL);
/* TODO: Fix crash when editing inputs with this enabled */
/* g_signal_connect (g_di.in_lvl_drawarea, "draw",
G_CALLBACK (level_in_draw),
NULL); */
g_signal_connect (g_di.in_lvl_drawarea, "draw",
G_CALLBACK (level_in_draw),
NULL);
gtk_widget_show (vbox2);
gtk_widget_show (frame);
@ -1627,8 +1639,11 @@ smp_dialog (GimpProcedure *procedure,
FALSE);
gimp_procedure_dialog_get_widget (GIMP_PROCEDURE_DIALOG (dialog), "in-low",
GIMP_TYPE_SPIN_BUTTON);
gimp_procedure_dialog_get_widget (GIMP_PROCEDURE_DIALOG (dialog), "gamma",
GIMP_TYPE_SPIN_BUTTON);
spin_button = gimp_procedure_dialog_get_widget (GIMP_PROCEDURE_DIALOG (dialog), "gamma",
GIMP_TYPE_SPIN_BUTTON);
gtk_spin_button_set_increments (GTK_SPIN_BUTTON (spin_button), 0.02, 0.2);
gimp_procedure_dialog_get_widget (GIMP_PROCEDURE_DIALOG (dialog), "in-high",
GIMP_TYPE_SPIN_BUTTON);
@ -2005,9 +2020,7 @@ calculate_level_transfers (void)
/* determine input intensity */
inten = (double) i / 255.0;
if (g_values.lvl_in_gamma != 0.0)
{
inten = pow (inten, (1.0 / g_values.lvl_in_gamma));
}
inten = pow (inten, (1.0 / g_values.lvl_in_gamma));
inten = (double) (inten * (in_max - in_min) + in_min);
inten = CLAMP (inten, 0.0, 255.0);
g_lvl_trans_tab[i] = (guchar) (inten + 0.5);