static gboolean draw(GtkWidget *widget, cairo_t *cr, dt_iop_module_t *self) { if(darktable.gui->reset) return FALSE; dt_iop_exposure_gui_data_t *g = (dt_iop_exposure_gui_data_t *)self->gui_data; dt_pthread_mutex_lock(&g->lock); if(!isnan(g->deflicker_computed_exposure)) { gchar *str = g_strdup_printf("%.2fEV", g->deflicker_computed_exposure); darktable.gui->reset = 1; gtk_label_set_text(g->deflicker_used_EC, str); darktable.gui->reset = 0; g_free(str); } dt_pthread_mutex_unlock(&g->lock); if(self->request_color_pick != DT_REQUEST_COLORPICK_MODULE) return FALSE; if(self->picked_color_max[0] < 0.0f) return FALSE; const float white = fmaxf(fmaxf(self->picked_color_max[0], self->picked_color_max[1]), self->picked_color_max[2]) * (1.0 - dt_bauhaus_slider_get(g->autoexpp)); const float black = fminf(fminf(self->picked_color_min[0], self->picked_color_min[1]), self->picked_color_min[2]); exposure_set_white(self, white); exposure_set_black(self, black); return FALSE; }
static void deflicker_process (dt_iop_module_t *self) { if(!(self->dev->image_storage.flags & DT_IMAGE_RAW)) return; dt_iop_exposure_params_t *p = (dt_iop_exposure_params_t *)self->params; float correction; if(p->deflicker && !compute_correction(self, &correction)) exposure_set_white(self, exposure2white(correction)); }
static void autoexpp_callback(GtkWidget *slider, gpointer user_data) { dt_iop_module_t *self = (dt_iop_module_t *)user_data; if(self->dt->gui->reset) return; if(self->request_color_pick != DT_REQUEST_COLORPICK_MODULE || self->picked_color_max[0] < 0.0f) return; dt_iop_exposure_gui_data_t *g = (dt_iop_exposure_gui_data_t *)self->gui_data; const float white = fmaxf(fmaxf(self->picked_color_max[0], self->picked_color_max[1]), self->picked_color_max[2]) * (1.0 - dt_bauhaus_slider_get(g->autoexpp)); exposure_set_white(self, white); }
static void autoexpp_callback (GtkDarktableSlider *slider, gpointer user_data) { dt_iop_module_t *self = (dt_iop_module_t *)user_data; if(self->dt->gui->reset) return; if(!self->request_color_pick) return; dt_iop_exposure_gui_data_t *g = (dt_iop_exposure_gui_data_t *)self->gui_data; const float white = fmaxf(fmaxf(self->picked_color_max[0], self->picked_color_max[1]), self->picked_color_max[2]) * (1.0-dtgtk_slider_get_value(DTGTK_SLIDER(g->autoexpp))); exposure_set_white(self, white); }
static gboolean expose (GtkWidget *widget, GdkEventExpose *event, dt_iop_module_t *self) { if(darktable.gui->reset) return FALSE; if(self->picked_color_max[0] < 0) return FALSE; if(!self->request_color_pick) return FALSE; dt_iop_exposure_gui_data_t *g = (dt_iop_exposure_gui_data_t *)self->gui_data; const float white = fmaxf(fmaxf(self->picked_color_max[0], self->picked_color_max[1]), self->picked_color_max[2]) * (1.0-dtgtk_slider_get_value(DTGTK_SLIDER(g->autoexpp))); const float black = fminf(fminf(self->picked_color_min[0], self->picked_color_min[1]), self->picked_color_min[2]); exposure_set_white(self, white); exposure_set_black(self, black); return FALSE; }
static void exposure_set_black(struct dt_iop_module_t *self, const float black) { dt_iop_exposure_params_t *p = (dt_iop_exposure_params_t *)self->params; float b = black; if(p->black == b) return; p->black = b; if(p->black >= exposure2white(p->exposure)) { exposure_set_white(self, p->black + 0.01); } dt_iop_exposure_gui_data_t *g = (dt_iop_exposure_gui_data_t *)self->gui_data; darktable.gui->reset = 1; dt_bauhaus_slider_set_soft(g->black, p->black); darktable.gui->reset = 0; 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 gboolean expose (GtkWidget *widget, GdkEventExpose *event, dt_iop_module_t *self) { if(darktable.gui->reset) return FALSE; // Needed if deflicker is part of auto-applied preset deflicker_process(self); if(self->request_color_pick <= 0) return FALSE; if(self->picked_color_max[0] < 0.0f) return FALSE; dt_iop_exposure_gui_data_t *g = (dt_iop_exposure_gui_data_t *)self->gui_data; const float white = fmaxf(fmaxf(self->picked_color_max[0], self->picked_color_max[1]), self->picked_color_max[2]) * (1.0-dt_bauhaus_slider_get(g->autoexpp)); const float black = fminf(fminf(self->picked_color_min[0], self->picked_color_min[1]), self->picked_color_min[2]); exposure_set_white(self, white); exposure_set_black(self, black); return FALSE; }
static gboolean expose (GtkWidget *widget, GdkEventExpose *event, dt_iop_module_t *self) { if(darktable.gui->reset) return FALSE; dt_iop_exposure_gui_data_t *g = (dt_iop_exposure_gui_data_t *)self->gui_data; if(!isnan(g->deflicker_computed_exposure)) { gchar *str = g_strdup_printf("%.2fEV", g->deflicker_computed_exposure); darktable.gui->reset = 1; gtk_label_set_text(g->deflicker_used_EC, str); darktable.gui->reset = 0; g_free(str); g->deflicker_computed_exposure = NAN; } if(self->enabled && g->reprocess_on_next_expose) { g->reprocess_on_next_expose = FALSE; //FIXME: or just use dev->pipe->changed |= DT_DEV_PIPE_SYNCH; ? dt_dev_reprocess_all(self->dev); return TRUE; } if(self->request_color_pick != DT_REQUEST_COLORPICK_MODULE) return FALSE; if(self->picked_color_max[0] < 0.0f) return FALSE; const float white = fmaxf(fmaxf(self->picked_color_max[0], self->picked_color_max[1]), self->picked_color_max[2]) * (1.0-dt_bauhaus_slider_get(g->autoexpp)); const float black = fminf(fminf(self->picked_color_min[0], self->picked_color_min[1]), self->picked_color_min[2]); exposure_set_white(self, white); exposure_set_black(self, black); return FALSE; }
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); }