static void deflicker_callback (GtkToggleButton *button, gpointer user_data) { dt_iop_module_t *self = (dt_iop_module_t *)user_data; if(self->dt->gui->reset) return; dt_iop_exposure_gui_data_t *g = (dt_iop_exposure_gui_data_t *)self->gui_data; dt_iop_exposure_params_t *p = (dt_iop_exposure_params_t *)self->params; if(!(self->dev->image_storage.flags & DT_IMAGE_RAW)) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->deflicker), FALSE); return; } autoexp_disable(self); p->deflicker = gtk_toggle_button_get_active(button); gtk_widget_set_sensitive(GTK_WIDGET(g->deflicker_percentile), p->deflicker); gtk_widget_set_sensitive(GTK_WIDGET(g->deflicker_level), p->deflicker); if(p->deflicker) //deflicker has been turend on { deflicker_params_callback(NULL, user_data); } dt_dev_add_history_item(darktable.develop, self, TRUE); }
void gui_update(struct dt_iop_module_t *self) { dt_iop_exposure_gui_data_t *g = (dt_iop_exposure_gui_data_t *)self->gui_data; dt_iop_exposure_params_t *p = (dt_iop_exposure_params_t *)self->params; if(!dt_image_is_raw(&self->dev->image_storage)) { gtk_widget_hide(GTK_WIDGET(g->mode)); p->mode = EXPOSURE_MODE_MANUAL; dt_dev_add_history_item(darktable.develop, self, TRUE); } else { gtk_widget_show(GTK_WIDGET(g->mode)); } dt_bauhaus_combobox_set(g->mode, g_list_index(g->modes, GUINT_TO_POINTER(p->mode))); dt_bauhaus_slider_set(g->black, p->black); dt_bauhaus_slider_set_soft(g->exposure, p->exposure); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->autoexp), FALSE); dt_bauhaus_slider_set(g->autoexpp, 0.01); gtk_widget_set_sensitive(GTK_WIDGET(g->autoexpp), FALSE); dt_bauhaus_slider_set(g->deflicker_percentile, p->deflicker_percentile); dt_bauhaus_slider_set(g->deflicker_target_level, p->deflicker_target_level); dt_bauhaus_combobox_set(g->deflicker_histogram_source, g_list_index(g->deflicker_histogram_sources, GUINT_TO_POINTER(p->deflicker_histogram_source))); self->request_color_pick = DT_REQUEST_COLORPICK_OFF; free(g->deflicker_histogram); g->deflicker_histogram = NULL; g->reprocess_on_next_expose = FALSE; gtk_label_set_text(g->deflicker_used_EC, ""); g->deflicker_computed_exposure = NAN; switch(p->mode) { case EXPOSURE_MODE_DEFLICKER: autoexp_disable(self); gtk_widget_hide(GTK_WIDGET(g->vbox_manual)); gtk_widget_show(GTK_WIDGET(g->vbox_deflicker)); if(p->deflicker_histogram_source == DEFLICKER_HISTOGRAM_SOURCE_SOURCEFILE) deflicker_prepare_histogram(self, &g->deflicker_histogram, &g->deflicker_histogram_stats); break; case EXPOSURE_MODE_MANUAL: default: gtk_widget_hide(GTK_WIDGET(g->vbox_deflicker)); gtk_widget_show(GTK_WIDGET(g->vbox_manual)); break; } }
static void exposure_callback(GtkWidget *slider, gpointer user_data) { dt_iop_module_t *self = (dt_iop_module_t *)user_data; if(self->dt->gui->reset) return; autoexp_disable(self); const float exposure = dt_bauhaus_slider_get(slider); dt_iop_exposure_set_white(self, exposure2white(exposure)); }
static void mode_callback(GtkWidget *combo, gpointer user_data) { dt_iop_module_t *self = (dt_iop_module_t *)user_data; if(darktable.gui->reset) return; dt_iop_exposure_gui_data_t *g = (dt_iop_exposure_gui_data_t *)self->gui_data; dt_iop_exposure_params_t *p = (dt_iop_exposure_params_t *)self->params; const dt_iop_exposure_mode_t new_mode = GPOINTER_TO_UINT(g_list_nth_data(g->modes, dt_bauhaus_combobox_get(combo))); free(g->deflicker_histogram); g->deflicker_histogram = NULL; switch(new_mode) { case EXPOSURE_MODE_DEFLICKER: autoexp_disable(self); if(!dt_image_is_raw(&self->dev->image_storage)) { dt_bauhaus_combobox_set(g->mode, g_list_index(g->modes, GUINT_TO_POINTER(EXPOSURE_MODE_MANUAL))); gtk_widget_hide(GTK_WIDGET(g->mode)); break; } p->mode = EXPOSURE_MODE_DEFLICKER; gtk_widget_hide(GTK_WIDGET(g->vbox_manual)); gtk_widget_show(GTK_WIDGET(g->vbox_deflicker)); if(p->deflicker_histogram_source == DEFLICKER_HISTOGRAM_SOURCE_SOURCEFILE) deflicker_prepare_histogram(self, &g->deflicker_histogram, &g->deflicker_histogram_stats); break; case EXPOSURE_MODE_MANUAL: default: p->mode = EXPOSURE_MODE_MANUAL; gtk_widget_hide(GTK_WIDGET(g->vbox_deflicker)); gtk_widget_show(GTK_WIDGET(g->vbox_manual)); break; } dt_dev_add_history_item(darktable.develop, self, TRUE); }
static void dt_iop_exposure_set_white(struct dt_iop_module_t *self, const float white) { dt_iop_exposure_params_t *p = (dt_iop_exposure_params_t *)self->params; if(p->mode == EXPOSURE_MODE_DEFLICKER) { dt_iop_exposure_gui_data_t *g = (dt_iop_exposure_gui_data_t *)self->gui_data; p->deflicker_target_level = white; darktable.gui->reset = 1; dt_bauhaus_slider_set(g->deflicker_target_level, p->deflicker_target_level); darktable.gui->reset = 0; dt_dev_add_history_item(darktable.develop, self, TRUE); } else { exposure_set_white(self, white); autoexp_disable(self); } }
static void dt_iop_exposure_set_black(struct dt_iop_module_t *self, const float black) { autoexp_disable(self); exposure_set_black(self, black); }
static void dt_iop_exposure_set_white(struct dt_iop_module_t *self, const float white) { autoexp_disable(self); deflicker_disable(self); exposure_set_white(self, white); }