Skip to content

Commit 2c0243b

Browse files
Cleanup exposure proxy
Since introduction of (*handle_event) in exposure proxy a number of proxy functions were superfluous and thus have thus been removed. Simplified code for checking and getting data from the exposure proxy for histogram visualizing and getting black and exposure data. Currently colorbalancergb makes use of blackpoint and exposure setting in the proxy module. These data are only relevant is module is enabled.
1 parent c9132c0 commit 2c0243b

File tree

4 files changed

+26
-147
lines changed

4 files changed

+26
-147
lines changed

src/develop/develop.c

Lines changed: 7 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -2866,78 +2866,24 @@ gboolean dt_dev_is_current_image(const dt_develop_t *dev,
28662866
return (dev->image_storage.id == imgid) ? TRUE : FALSE;
28672867
}
28682868

2869-
static dt_dev_proxy_exposure_t *find_last_exposure_instance(dt_develop_t *dev)
2869+
static dt_dev_proxy_exposure_t *_dev_exposure_proxy_available(dt_develop_t *dev)
28702870
{
2871-
if(!dev->proxy.exposure.module) return NULL;
2871+
if(!dev->proxy.exposure.module || dt_view_get_current() != DT_VIEW_DARKROOM) return NULL;
28722872

28732873
dt_dev_proxy_exposure_t *instance = &dev->proxy.exposure;
2874-
2875-
return instance;
2876-
};
2877-
2878-
gboolean dt_dev_exposure_hooks_available(dt_develop_t *dev)
2879-
{
2880-
dt_dev_proxy_exposure_t *instance = find_last_exposure_instance(dev);
2881-
2882-
/* check if exposure iop module has registered its hooks */
2883-
if(instance
2884-
&& instance->module
2885-
&& instance->set_black
2886-
&& instance->get_black && instance->set_exposure
2887-
&& instance->get_exposure)
2888-
return TRUE;
2889-
2890-
return FALSE;
2891-
}
2892-
2893-
void dt_dev_exposure_reset_defaults(dt_develop_t *dev)
2894-
{
2895-
dt_dev_proxy_exposure_t *instance = find_last_exposure_instance(dev);
2896-
2897-
if(!(instance && instance->module)) return;
2898-
2899-
dt_iop_module_t *exposure = instance->module;
2900-
memcpy(exposure->params, exposure->default_params, exposure->params_size);
2901-
dt_iop_gui_update(exposure);
2902-
dt_dev_add_history_item(exposure->dev, exposure, TRUE);
2903-
}
2904-
2905-
void dt_dev_exposure_set_exposure(dt_develop_t *dev,
2906-
const float exposure)
2907-
{
2908-
dt_dev_proxy_exposure_t *instance = find_last_exposure_instance(dev);
2909-
2910-
if(instance && instance->module && instance->set_exposure)
2911-
instance->set_exposure(instance->module, exposure);
2874+
return instance && instance->module ? instance : NULL;
29122875
}
29132876

29142877
float dt_dev_exposure_get_exposure(dt_develop_t *dev)
29152878
{
2916-
dt_dev_proxy_exposure_t *instance = find_last_exposure_instance(dev);
2917-
2918-
if(instance && instance->module && instance->get_exposure)
2919-
return instance->get_exposure(instance->module);
2920-
2921-
return 0.0;
2922-
}
2923-
2924-
void dt_dev_exposure_set_black(dt_develop_t *dev,
2925-
const float black)
2926-
{
2927-
dt_dev_proxy_exposure_t *instance = find_last_exposure_instance(dev);
2928-
2929-
if(instance && instance->module && instance->set_black)
2930-
instance->set_black(instance->module, black);
2879+
const dt_dev_proxy_exposure_t *instance = _dev_exposure_proxy_available(dev);
2880+
return instance && instance->get_exposure && instance->module->enabled ? instance->get_exposure(instance->module) : 0.0f;
29312881
}
29322882

29332883
float dt_dev_exposure_get_black(dt_develop_t *dev)
29342884
{
2935-
dt_dev_proxy_exposure_t *instance = find_last_exposure_instance(dev);
2936-
2937-
if(instance && instance->module && instance->get_black)
2938-
return instance->get_black(instance->module);
2939-
2940-
return 0.0;
2885+
const dt_dev_proxy_exposure_t *instance = _dev_exposure_proxy_available(dev);
2886+
return instance && instance->get_black && instance->module->enabled ? instance->get_black(instance->module) : 0.0f;
29412887
}
29422888

29432889
void dt_dev_modulegroups_set(dt_develop_t *dev,

src/develop/develop.h

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,7 @@ typedef enum dt_clipping_preview_mode_t
102102
typedef struct dt_dev_proxy_exposure_t
103103
{
104104
struct dt_iop_module_t *module;
105-
void (*set_exposure)(struct dt_iop_module_t *exp, const float exposure);
106105
float (*get_exposure)(struct dt_iop_module_t *exp);
107-
void (*set_black)(struct dt_iop_module_t *exp, const float black);
108106
float (*get_black)(struct dt_iop_module_t *exp);
109107
void (*handle_event)(GdkEvent *event, gboolean blackwhite);
110108
} dt_dev_proxy_exposure_t;
@@ -458,22 +456,8 @@ void dt_dev_get_viewport_params(dt_dev_viewport_t *port,
458456

459457
void dt_dev_configure(dt_dev_viewport_t *port);
460458

461-
/*
462-
* exposure plugin hook, set the exposure and the black level
463-
*/
464-
465-
/** check if exposure iop hooks are available */
466-
gboolean dt_dev_exposure_hooks_available(dt_develop_t *dev);
467-
/** reset exposure to defaults */
468-
void dt_dev_exposure_reset_defaults(dt_develop_t *dev);
469-
/** set exposure */
470-
void dt_dev_exposure_set_exposure(dt_develop_t *dev,
471-
const float exposure);
472-
/** get exposure */
459+
/** get exposure level */
473460
float dt_dev_exposure_get_exposure(dt_develop_t *dev);
474-
/** set exposure black level */
475-
void dt_dev_exposure_set_black(dt_develop_t *dev,
476-
const float black);
477461
/** get exposure black level */
478462
float dt_dev_exposure_get_black(dt_develop_t *dev);
479463

src/iop/exposure.c

Lines changed: 13 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
This file is part of darktable,
3-
Copyright (C) 2009-2023 darktable developers.
3+
Copyright (C) 2009-2024 darktable developers.
44
55
darktable is free software: you can redistribute it and/or modify
66
it under the terms of the GNU General Public License as published by
@@ -69,12 +69,12 @@ typedef enum dt_spot_mode_t
6969

7070
typedef struct dt_iop_exposure_params_t
7171
{
72-
dt_iop_exposure_mode_t mode; // $DEFAULT: EXPOSURE_MODE_MANUAL
73-
float black; // $MIN: -1.0 $MAX: 1.0 $DEFAULT: 0.0 $DESCRIPTION: "black level correction"
74-
float exposure; // $MIN: -18.0 $MAX: 18.0 $DEFAULT: 0.0
75-
float deflicker_percentile; // $MIN: 0.0 $MAX: 100.0 $DEFAULT: 50.0 $DESCRIPTION: "percentile"
76-
float deflicker_target_level; // $MIN: -18.0 $MAX: 18.0 $DEFAULT: -4.0 $DESCRIPTION: "target level"
77-
gboolean compensate_exposure_bias; // $DEFAULT: FALSE $DESCRIPTION: "compensate exposure bias"
72+
dt_iop_exposure_mode_t mode; // $DEFAULT: EXPOSURE_MODE_MANUAL
73+
float black; // $MIN: -1.0 $MAX: 1.0 $DEFAULT: 0.0 $DESCRIPTION: "black level correction"
74+
float exposure; // $MIN: -18.0 $MAX: 18.0 $DEFAULT: 0.0
75+
float deflicker_percentile; // $MIN: 0.0 $MAX: 100.0 $DEFAULT: 50.0 $DESCRIPTION: "percentile"
76+
float deflicker_target_level; // $MIN: -18.0 $MAX: 18.0 $DEFAULT: -4.0 $DESCRIPTION: "target level"
77+
gboolean compensate_exposure_bias;// $DEFAULT: FALSE $DESCRIPTION: "compensate exposure bias"
7878
} dt_iop_exposure_params_t;
7979

8080
typedef struct dt_iop_exposure_gui_data_t
@@ -151,19 +151,9 @@ dt_iop_colorspace_type_t default_colorspace(dt_iop_module_t *self,
151151
return IOP_CS_RGB;
152152
}
153153

154-
static void _exposure_proxy_set_exposure(dt_iop_module_t *self,
155-
const float exposure);
156-
157154
static float _exposure_proxy_get_exposure(dt_iop_module_t *self);
158-
159-
static void _exposure_proxy_set_black(dt_iop_module_t *self,
160-
const float black);
161-
162-
static float _exposure_proxy_get_black(dt_iop_module_t *self);
163155
static void _paint_hue(dt_iop_module_t *self);
164-
165-
static void _exposure_set_black(dt_iop_module_t *self,
166-
const float black);
156+
static void _exposure_set_black(dt_iop_module_t *self, const float black);
167157

168158
int legacy_params(dt_iop_module_t *self,
169159
const void *const old_params,
@@ -409,14 +399,12 @@ static double _raw_to_ev(const uint32_t raw,
409399
}
410400

411401
static void _compute_correction(dt_iop_module_t *self,
412-
dt_iop_params_t *p1,
402+
dt_iop_exposure_params_t *p,
413403
dt_dev_pixelpipe_t *pipe,
414404
const uint32_t *const histogram,
415405
const dt_dev_histogram_stats_t *const histogram_stats,
416406
float *correction)
417407
{
418-
const dt_iop_exposure_params_t *const p = (const dt_iop_exposure_params_t *const)p1;
419-
420408
*correction = EXPOSURE_CORRECTION_UNDEFINED;
421409

422410
if(histogram == NULL) return;
@@ -451,7 +439,7 @@ static gboolean _show_computed(gpointer user_data);
451439
static void _process_common_setup(dt_iop_module_t *self,
452440
dt_dev_pixelpipe_iop_t *piece)
453441
{
454-
dt_iop_exposure_gui_data_t *g = (dt_iop_exposure_gui_data_t*)self->gui_data;
442+
dt_iop_exposure_gui_data_t *g = self->gui_data;
455443
dt_iop_exposure_data_t *d = piece->data;
456444

457445
d->black = d->params.black;
@@ -720,31 +708,6 @@ static void _exposure_set_white(dt_iop_module_t *self,
720708
dt_dev_add_history_item(darktable.develop, self, TRUE);
721709
}
722710

723-
static void _exposure_proxy_set_exposure(dt_iop_module_t *self,
724-
const float exposure)
725-
{
726-
dt_iop_exposure_params_t *p = self->params;
727-
728-
if(p->mode == EXPOSURE_MODE_DEFLICKER)
729-
{
730-
dt_iop_exposure_gui_data_t *g = self->gui_data;
731-
732-
p->deflicker_target_level = exposure;
733-
734-
++darktable.gui->reset;
735-
dt_bauhaus_slider_set(g->deflicker_target_level, p->deflicker_target_level);
736-
--darktable.gui->reset;
737-
738-
dt_dev_add_history_item(darktable.develop, self, TRUE);
739-
}
740-
else
741-
{
742-
const float white = exposure2white(exposure);
743-
_exposure_set_white(self, white);
744-
_autoexp_disable(self);
745-
}
746-
}
747-
748711
static float _exposure_proxy_get_exposure(dt_iop_module_t *self)
749712
{
750713
dt_iop_exposure_params_t *p = self->params;
@@ -779,20 +742,14 @@ static void _exposure_set_black(dt_iop_module_t *self,
779742
dt_dev_add_history_item(darktable.develop, self, TRUE);
780743
}
781744

782-
static void _exposure_proxy_set_black(dt_iop_module_t *self,
783-
const float black)
784-
{
785-
_autoexp_disable(self);
786-
_exposure_set_black(self, black);
787-
}
788-
789745
static float _exposure_proxy_get_black(dt_iop_module_t *self)
790746
{
791747
dt_iop_exposure_params_t *p = self->params;
792748
return p->black;
793749
}
794750

795-
static void _exposure_proxy_handle_event(GdkEvent *event, gboolean blackwhite)
751+
752+
static void _exposure_proxy_handle_event(GdkEvent *event, const gboolean blackwhite)
796753
{
797754
dt_iop_module_t *self = darktable.develop->proxy.exposure.module;
798755
if(self && self->gui_data)
@@ -991,7 +948,7 @@ static gboolean _show_computed(gpointer user_data)
991948

992949
static gboolean _target_color_draw(GtkWidget *widget,
993950
cairo_t *crf,
994-
dt_iop_module_t *self)
951+
const dt_iop_module_t *self)
995952
{
996953
dt_iop_exposure_gui_data_t *g = self->gui_data;
997954

@@ -1285,9 +1242,7 @@ void gui_init(dt_iop_module_t *self)
12851242
*/
12861243
dt_dev_proxy_exposure_t *instance = &darktable.develop->proxy.exposure;
12871244
instance->module = self;
1288-
instance->set_exposure = _exposure_proxy_set_exposure;
12891245
instance->get_exposure = _exposure_proxy_get_exposure;
1290-
instance->set_black = _exposure_proxy_set_black;
12911246
instance->get_black = _exposure_proxy_get_black;
12921247
instance->handle_event = _exposure_proxy_handle_event;
12931248
}

src/libs/histogram.c

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1638,8 +1638,6 @@ static gboolean _drawable_motion_notify_callback(GtkWidget *widget,
16381638
GdkEventMotion *event,
16391639
dt_lib_histogram_t *d)
16401640
{
1641-
dt_develop_t *dev = darktable.develop;
1642-
16431641
if(event->state & GDK_BUTTON1_MASK)
16441642
{
16451643
if(d->scope_type != DT_LIB_HISTOGRAM_SCOPE_HISTOGRAM
@@ -1655,8 +1653,6 @@ static gboolean _drawable_motion_notify_callback(GtkWidget *widget,
16551653
const float posx = event->x / (float)(allocation.width);
16561654
const float posy = event->y / (float)(allocation.height);
16571655
const dt_lib_histogram_highlight_t prior_highlight = d->highlight;
1658-
const gboolean hooks_available = (dt_view_get_current() == DT_VIEW_DARKROOM)
1659-
&& dt_dev_exposure_hooks_available(dev);
16601656

16611657
// FIXME: make just one tooltip for the widget depending on
16621658
// whether it is draggable or not, and set it when enter the view
@@ -1677,15 +1673,13 @@ static gboolean _drawable_motion_notify_callback(GtkWidget *widget,
16771673
_("shift+scroll to change width"),
16781674
_("alt+scroll to cycle"));
16791675
}
1680-
else if(hooks_available)
1676+
// only visualize effect if there is a proxy for the exposure module.
1677+
else
16811678
{
16821679
if((posx < 0.2f && d->scope_type == DT_LIB_HISTOGRAM_SCOPE_HISTOGRAM)
1683-
|| ((d->scope_type == DT_LIB_HISTOGRAM_SCOPE_WAVEFORM
1684-
|| d->scope_type == DT_LIB_HISTOGRAM_SCOPE_PARADE)
1685-
&& ((posy > 7.0f/9.0f
1686-
&& d->scope_orient == DT_LIB_HISTOGRAM_ORIENT_HORI)
1687-
|| (posx < 2.0f/9.0f
1688-
&& d->scope_orient == DT_LIB_HISTOGRAM_ORIENT_VERT))))
1680+
|| ((d->scope_type == DT_LIB_HISTOGRAM_SCOPE_WAVEFORM || d->scope_type == DT_LIB_HISTOGRAM_SCOPE_PARADE)
1681+
&& ((posy > 7.0f/9.0f && d->scope_orient == DT_LIB_HISTOGRAM_ORIENT_HORI)
1682+
||(posx < 2.0f/9.0f && d->scope_orient == DT_LIB_HISTOGRAM_ORIENT_VERT))))
16891683
{
16901684
d->highlight = DT_LIB_HISTOGRAM_HIGHLIGHT_BLACK_POINT;
16911685
dt_util_str_cat(&tip, "\n%s\n%s",

0 commit comments

Comments
 (0)