Skip to content

Commit 1ef7e76

Browse files
committed
agx: Don't call gui_changed from gui_update; extract all dynamic redraws into function _update_redraw_dynamic_gui, called from gui_update and gui_changed; extract slider offset, scale, default and value updates into _update_pivot_slider_settings, called from _update_pivot_x (gui_changed and exposure picker callbacks) and from gui_update.
1 parent dd44fbf commit 1ef7e76

File tree

1 file changed

+40
-26
lines changed

1 file changed

+40
-26
lines changed

src/iop/agx.c

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1371,6 +1371,23 @@ static primaries_params_t _get_primaries_params(const dt_iop_agx_params_t *p)
13711371
return primaries_params;
13721372
}
13731373

1374+
static void _update_pivot_slider_settings(GtkWidget* const slider,
1375+
const dt_iop_agx_params_t* const p)
1376+
{
1377+
darktable.gui->reset++;
1378+
1379+
const float range = p->range_white_relative_ev - p->range_black_relative_ev;
1380+
1381+
dt_bauhaus_slider_set_factor(slider, range);
1382+
dt_bauhaus_slider_set_offset(slider, p->range_black_relative_ev);
1383+
// 0 EV default with the new exposure params
1384+
dt_bauhaus_slider_set_default(slider, -p->range_black_relative_ev / range);
1385+
1386+
dt_bauhaus_slider_set(slider, p->curve_pivot_x);
1387+
1388+
darktable.gui->reset--;
1389+
}
1390+
13741391
static void _update_pivot_x(const float old_black_ev, const float old_white_ev, dt_iop_module_t *self, dt_iop_agx_params_t *const p)
13751392
{
13761393
const dt_iop_agx_gui_data_t *g = self->gui_data;
@@ -1389,14 +1406,7 @@ static void _update_pivot_x(const float old_black_ev, const float old_white_ev,
13891406
// new_range is ensured to be > 0 due to hard limits on sliders
13901407
p->curve_pivot_x = (clamped_pivot_ev - new_black_ev) / new_range;
13911408

1392-
darktable.gui->reset++;
1393-
GtkWidget* const slider = g->basic_curve_controls.curve_pivot_x;
1394-
dt_bauhaus_slider_set_factor(slider, new_range);
1395-
dt_bauhaus_slider_set_offset(slider, new_black_ev);
1396-
// 0 EV default with the new exposure params
1397-
dt_bauhaus_slider_set_default(slider, -new_black_ev / new_range);
1398-
dt_bauhaus_slider_set(slider, p->curve_pivot_x);
1399-
darktable.gui->reset--;
1409+
_update_pivot_slider_settings(g->basic_curve_controls.curve_pivot_x, p);
14001410
}
14011411

14021412
static void _adjust_relative_exposure_from_exposure_params(dt_iop_module_t *self)
@@ -2094,6 +2104,22 @@ static void _update_curve_warnings(dt_iop_module_t *self)
20942104
? dtgtk_cairo_paint_warning : NULL, CPF_ACTIVE, NULL);
20952105
}
20962106

2107+
static void _update_redraw_dynamic_gui(dt_iop_module_t* const self,
2108+
const dt_iop_agx_gui_data_t* const g,
2109+
const dt_iop_agx_params_t* const p)
2110+
{
2111+
gtk_widget_set_visible(g->curve_gamma, !p->auto_gamma);
2112+
gtk_widget_set_visible(g->primaries_controls_vbox, !p->disable_primaries_adjustments);
2113+
const gboolean post_curve_primaries_available = !p->completely_reverse_primaries && !p->disable_primaries_adjustments;
2114+
gtk_widget_set_visible(g->post_curve_primaries_controls_vbox, post_curve_primaries_available);
2115+
gtk_widget_set_sensitive(g->set_post_curve_primaries_from_pre_button, post_curve_primaries_available);
2116+
2117+
_update_curve_warnings(self);
2118+
2119+
// Trigger redraw when any parameter changes
2120+
gtk_widget_queue_draw(GTK_WIDGET(g->graph_drawing_area));
2121+
}
2122+
20972123
void gui_changed(dt_iop_module_t *self,
20982124
GtkWidget *widget,
20992125
void *previous)
@@ -2138,24 +2164,15 @@ void gui_changed(dt_iop_module_t *self,
21382164
darktable.gui->reset--;
21392165
}
21402166

2141-
gtk_widget_set_visible(g->curve_gamma, !p->auto_gamma);
2142-
gtk_widget_set_visible(g->primaries_controls_vbox, !p->disable_primaries_adjustments);
2143-
const gboolean post_curve_primaries_available = !p->completely_reverse_primaries && !p->disable_primaries_adjustments;
2144-
gtk_widget_set_visible(g->post_curve_primaries_controls_vbox, post_curve_primaries_available);
2145-
gtk_widget_set_sensitive(g->set_post_curve_primaries_from_pre_button, post_curve_primaries_available);
2146-
2147-
_update_curve_warnings(self);
2148-
2149-
// Trigger redraw when any parameter changes
2150-
gtk_widget_queue_draw(GTK_WIDGET(g->graph_drawing_area));
2151-
21522167
if(g && p->auto_gamma)
21532168
{
21542169
tone_mapping_params_t tone_mapping_params;
21552170
_set_log_mapping_params(self->params, &tone_mapping_params);
21562171
_adjust_pivot(self->params, &tone_mapping_params);
21572172
dt_bauhaus_slider_set(g->curve_gamma, tone_mapping_params.curve_gamma);
21582173
}
2174+
2175+
_update_redraw_dynamic_gui(self, g, p);
21592176
}
21602177

21612178
static GtkWidget* _create_basic_curve_controls_box(dt_iop_module_t *self,
@@ -2579,22 +2596,19 @@ static GtkWidget *_setup_hue_slider(dt_iop_module_t *self,
25792596

25802597
void gui_update(dt_iop_module_t *self)
25812598
{
2582-
dt_iop_agx_gui_data_t *g = self->gui_data;
2583-
const dt_iop_agx_params_t *p = self->params;
2599+
const dt_iop_agx_gui_data_t* const g = self->gui_data;
2600+
const dt_iop_agx_params_t* const p = self->params;
25842601

2585-
const float range = p->range_white_relative_ev - p->range_black_relative_ev;
2586-
dt_bauhaus_slider_set_factor(g->basic_curve_controls.curve_pivot_x, range);
2587-
dt_bauhaus_slider_set_offset(g->basic_curve_controls.curve_pivot_x, p->range_black_relative_ev);
2602+
_update_pivot_slider_settings(g->basic_curve_controls.curve_pivot_x, p);
25882603

25892604
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->auto_gamma),
25902605
p->auto_gamma);
25912606
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->disable_primaries_adjustments),
25922607
p->disable_primaries_adjustments);
25932608
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->completely_reverse_primaries),
25942609
p->completely_reverse_primaries);
2595-
_update_curve_warnings(self);
25962610

2597-
gui_changed(self, NULL, NULL);
2611+
_update_redraw_dynamic_gui(self, g, p);
25982612
}
25992613

26002614
static void _create_primaries_page(dt_iop_module_t *main,

0 commit comments

Comments
 (0)