Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
0
static void dt_iop_exposure_set_black(struct dt_iop_module_t *self, const float black)
{
  autoexp_disable(self);
  exposure_set_black(self, black);
}