Skip to content

Commit 1f0cb99

Browse files
committed
agx: Added dt_iop_get_module_enabled_preferring_unmasked_first_instance to imageop; refactored finding the 'exposure' instance in develop.c.
1 parent 16a5751 commit 1f0cb99

File tree

3 files changed

+27
-40
lines changed

3 files changed

+27
-40
lines changed

src/develop/develop.c

Lines changed: 1 addition & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2951,42 +2951,6 @@ float dt_dev_exposure_get_exposure(dt_develop_t *dev)
29512951
return instance && instance->get_exposure && instance->module->enabled ? instance->get_exposure(instance->module) : 0.0f;
29522952
}
29532953

2954-
static dt_iop_module_t *_find_preferred_enabled_instance(const dt_iop_module_so_t *module,
2955-
const gboolean prefer_expanded,
2956-
const gboolean prefer_unmasked,
2957-
const gboolean prefer_first)
2958-
{
2959-
dt_iop_module_t *best_mod = NULL;
2960-
int best_score = -1;
2961-
2962-
for(GList *iop_mods = g_list_last(darktable.develop->iop);
2963-
iop_mods;
2964-
iop_mods = g_list_previous(iop_mods))
2965-
{
2966-
dt_iop_module_t *mod = iop_mods->data;
2967-
2968-
if(mod->so == module && mod->iop_order != INT_MAX)
2969-
{
2970-
if (!mod->enabled)
2971-
continue;
2972-
2973-
const gboolean no_mask = mod->blend_params->mask_mode == DEVELOP_MASK_DISABLED
2974-
|| mod->blend_params->mask_mode == DEVELOP_MASK_ENABLED;
2975-
2976-
const int score = (mod->expanded && prefer_expanded ? 8 : 0)
2977-
+ (no_mask && prefer_unmasked ? 2 : 0);
2978-
2979-
if(score + (prefer_first ? 1 : 0) > best_score)
2980-
{
2981-
best_score = score;
2982-
best_mod = mod;
2983-
}
2984-
}
2985-
}
2986-
2987-
return best_mod;
2988-
}
2989-
29902954
float dt_dev_exposure_get_effective_exposure(dt_develop_t *dev)
29912955
{
29922956
if (dt_view_get_current() != DT_VIEW_DARKROOM) return 0.0f;
@@ -3008,7 +2972,7 @@ float dt_dev_exposure_get_effective_exposure(dt_develop_t *dev)
30082972

30092973
if (exposure_so)
30102974
{
3011-
dt_iop_module_t *preferred_exposure_instance = _find_preferred_enabled_instance(exposure_so, FALSE, TRUE, TRUE);
2975+
dt_iop_module_t *preferred_exposure_instance = dt_iop_get_module_enabled_preferring_unmasked_first_instance(exposure_so);
30122976
if (preferred_exposure_instance)
30132977
return dev->proxy.exposure.get_effective_exposure(preferred_exposure_instance);
30142978
}

src/develop/imageop.c

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3620,9 +3620,16 @@ dt_iop_module_t *dt_iop_get_module_by_op_priority(GList *modules,
36203620
return mod_ret;
36213621
}
36223622

3623+
typedef enum instance_filter_mode_t
3624+
{
3625+
FILTER_NEUTRAL,
3626+
FILTER_PREFER,
3627+
FILTER_REQUIRE,
3628+
} instance_filter_mode_t;
3629+
36233630
dt_iop_module_t *_find_preferred_instance(const dt_iop_module_so_t *module,
36243631
const gboolean prefer_expanded,
3625-
const gboolean prefer_enabled,
3632+
const instance_filter_mode_t enabled_mode,
36263633
const gboolean prefer_unmasked,
36273634
const gboolean prefer_first)
36283635
{
@@ -3637,6 +3644,10 @@ dt_iop_module_t *_find_preferred_instance(const dt_iop_module_so_t *module,
36373644

36383645
if(mod->so == module && mod->iop_order != INT_MAX)
36393646
{
3647+
if (enabled_mode == FILTER_REQUIRE && !mod->enabled) continue;
3648+
3649+
const gboolean prefer_enabled = enabled_mode == FILTER_PREFER;
3650+
36403651
const gboolean no_mask = mod->blend_params->mask_mode == DEVELOP_MASK_DISABLED
36413652
|| mod->blend_params->mask_mode == DEVELOP_MASK_ENABLED;
36423653
const int score = (mod->expanded && prefer_expanded ? 8 : 0)
@@ -3688,11 +3699,20 @@ dt_iop_module_t *dt_iop_get_module_preferred_instance(const dt_iop_module_so_t *
36883699
else
36893700
return _find_preferred_instance(module,
36903701
dt_conf_get_bool("accel/prefer_expanded"),
3691-
dt_conf_get_bool("accel/prefer_enabled"),
3702+
dt_conf_get_bool("accel/prefer_enabled") ? FILTER_PREFER : FILTER_NEUTRAL,
36923703
dt_conf_get_bool("accel/prefer_unmasked"),
36933704
dt_conf_is_equal("accel/select_order", "first instance"));
36943705
}
36953706

3707+
dt_iop_module_t *dt_iop_get_module_enabled_preferring_unmasked_first_instance(const dt_iop_module_so_t *module)
3708+
{
3709+
return _find_preferred_instance(module,
3710+
FALSE,
3711+
FILTER_REQUIRE,
3712+
TRUE,
3713+
TRUE);
3714+
}
3715+
36963716
/** adds keyboard accels to the first module in the pipe to handle
36973717
* where there are multiple instances */
36983718
void dt_iop_connect_accels_multi(dt_iop_module_so_t *module)
@@ -3707,7 +3727,7 @@ void dt_iop_connect_accels_multi(dt_iop_module_so_t *module)
37073727

37083728
if(!strcmp(module->op, "exposure"))
37093729
darktable.develop->proxy.exposure.module =
3710-
_find_preferred_instance(module, FALSE, TRUE, TRUE, TRUE);
3730+
_find_preferred_instance(module, FALSE, FILTER_PREFER, TRUE, TRUE);
37113731
}
37123732

37133733
void dt_iop_connect_accels_all(void)

src/develop/imageop.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,9 @@ int dt_iop_count_instances(dt_iop_module_so_t *module);
457457
/** return preferred module instance for shortcuts **/
458458
dt_iop_module_t *dt_iop_get_module_preferred_instance(const dt_iop_module_so_t *module);
459459

460+
/** return an enabled instance, if any, preferring unmasked instances earlier in the pipe **/
461+
dt_iop_module_t *dt_iop_get_module_enabled_preferring_unmasked_first_instance(const dt_iop_module_so_t *module);
462+
460463
/** returns true if module is the first instance of this operation in the pipe */
461464
gboolean dt_iop_is_first_instance(GList *modules, const dt_iop_module_t *module);
462465

0 commit comments

Comments
 (0)