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 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_white(struct dt_iop_module_t *self, const float white) { dt_iop_exposure_params_t *p = (dt_iop_exposure_params_t *)self->params; float exposure = white2exposure(white); if(p->exposure == exposure) return; p->exposure = exposure; if(p->black >= white) exposure_set_black(self, white - 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->exposure, p->exposure); darktable.gui->reset = 0; dt_dev_add_history_item(darktable.develop, self, TRUE); }
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_black(struct dt_iop_module_t *self, const float black) { autoexp_disable(self); exposure_set_black(self, black); }