Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
imageop.h
Go to the documentation of this file.
1/*
2 This file is part of darktable,
3 Copyright (C) 2009-2013 johannes hanika.
4 Copyright (C) 2010-2012 Henrik Andersson.
5 Copyright (C) 2011 Edouard Gomez.
6 Copyright (C) 2011-2012 Jérémy Rosen.
7 Copyright (C) 2011 Robert Bieber.
8 Copyright (C) 2011 Rostyslav Pidgornyi.
9 Copyright (C) 2011-2014, 2016, 2018-2019 Tobias Ellinghaus.
10 Copyright (C) 2011-2017 Ulrich Pegelow.
11 Copyright (C) 2012-2013, 2019-2021 Aldric Renaudin.
12 Copyright (C) 2012 Richard Wonka.
13 Copyright (C) 2013, 2018-2022 Pascal Obry.
14 Copyright (C) 2013-2016 Roman Lebedev.
15 Copyright (C) 2013 Simon Spannagel.
16 Copyright (C) 2014, 2021 Dan Torop.
17 Copyright (C) 2014 Mikhail Trishchenkov.
18 Copyright (C) 2016 Pedro Côrte-Real.
19 Copyright (C) 2017-2019 Edgardo Hoszowski.
20 Copyright (C) 2019-2020 Heiko Bauke.
21 Copyright (C) 2020, 2022-2026 Aurélien PIERRE.
22 Copyright (C) 2020, 2022 Chris Elston.
23 Copyright (C) 2020-2022 Diederik Ter Rahe.
24 Copyright (C) 2020 Harold le Clément de Saint-Marcq.
25 Copyright (C) 2020 Philippe Weyland.
26 Copyright (C) 2020-2021 Ralf Brown.
27 Copyright (C) 2021-2022 Hanno Schwalm.
28 Copyright (C) 2021 Marco.
29 Copyright (C) 2021 Mark-64.
30 Copyright (C) 2021 Paolo DePetrillo.
31 Copyright (C) 2021 Sakari Kapanen.
32 Copyright (C) 2022 luzpaz.
33 Copyright (C) 2022 Martin Bařinka.
34 Copyright (C) 2022 Philipp Lutz.
35 Copyright (C) 2023 Luca Zulberti.
36 Copyright (C) 2024-2025 Alynx Zhou.
37 Copyright (C) 2025 Guillaume Stutin.
38
39 darktable is free software: you can redistribute it and/or modify
40 it under the terms of the GNU General Public License as published by
41 the Free Software Foundation, either version 3 of the License, or
42 (at your option) any later version.
43
44 darktable is distributed in the hope that it will be useful,
45 but WITHOUT ANY WARRANTY; without even the implied warranty of
46 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
47 GNU General Public License for more details.
48
49 You should have received a copy of the GNU General Public License
50 along with darktable. If not, see <http://www.gnu.org/licenses/>.
51*/
52
53#pragma once
54
55#include <gmodule.h>
56#include <gtk/gtk.h>
57#include <sched.h>
58#include <stddef.h>
59#include <stdint.h>
60
61#ifdef __cplusplus
62extern "C" {
63#endif
64
66typedef struct dt_iop_roi_t
67{
68 int x, y, width, height;
69 double scale;
71
72#ifdef __cplusplus
73}
74#endif
75
76#include "common/darktable.h"
79#include "common/opencl.h"
80
81#include "control/settings.h"
82#include "develop/pixelpipe.h"
83#include "dtgtk/togglebutton.h"
84#include "gui/gtk.h"
85#include "gui/gui_throttle.h"
86
87#ifdef __cplusplus
88extern "C" {
89#endif
90
91struct dt_develop_t;
97
109
123
125typedef enum dt_iop_tags_t
126{
131
132 // might be some other filters togglable by user?
133 // IOP_TAG_SLOW = 1<<3,
134 // IOP_TAG_DETAIL_FIX = 1<<3,
136
138typedef enum dt_iop_flags_t
139{
141
144 IOP_FLAGS_SUPPORTS_BLENDING = 1 << 1, // Does provide blending modes
146 IOP_FLAGS_ALLOW_TILING = 1 << 3, // Does allow tile-wise processing (valid for CPU and GPU processing)
147 IOP_FLAGS_HIDDEN = 1 << 4, // Hide the iop from userinterface
148 IOP_FLAGS_TILING_FULL_ROI = 1 << 5, // Tiling code has to expect arbitrary roi's for this module (incl. flipping, mirroring etc.)
149 IOP_FLAGS_ONE_INSTANCE = 1 << 6, // The module doesn't support multiple instances
150 IOP_FLAGS_PREVIEW_NON_OPENCL = 1 << 7, // Preview pixelpipe of this module must not run on GPU but always on CPU
151 IOP_FLAGS_NO_HISTORY_STACK = 1 << 8, // This iop will never show up in the history stack
152 IOP_FLAGS_NO_MASKS = 1 << 9, // The module doesn't support masks (used with SUPPORT_BLENDING)
153 IOP_FLAGS_FENCE = 1 << 10, // No module can be moved pass this one
154 IOP_FLAGS_UNSAFE_COPY = 1 << 11, // Unsafe to copy as part of history
155 IOP_FLAGS_GUIDES_SPECIAL_DRAW = 1 << 12, // handle the grid drawing directly
156 IOP_FLAGS_INTERNAL_MASKS = 1 << 13 // Module uses masks internally, outside of blendops. This advertises the need to commit them to history unconditionnaly.
158
159typedef struct dt_iop_gui_data_t
160{
161 // "base type" for all dt_iop_XXXX_gui_data_t types used by iops
162 // to avoid compiler error about different sizes of empty structs between C and C++, we need at least one member
163 int dummy;
165
166typedef void dt_iop_data_t;
168
171{
173 DT_REQUEST_COLORPICK_MODULE = 1 // requested by module (should take precedence)
175
187
189typedef struct dt_iop_module_so_t
190{
191 // Needs to stay on top for casting
193
194#define INCLUDE_API_FROM_MODULE_H
195#include "iop/iop_api.h"
196
198 GModule *module;
205// dt_iop_gui_data_t *gui_data;
208 int (*process_plain)(struct dt_iop_module_t *self, const struct dt_dev_pixelpipe_t *pipe,
209 const struct dt_dev_pixelpipe_iop_t *piece, const void *const i, void *const o);
210
211 // introspection related data
214
215typedef struct dt_iop_module_t
216{
217 // Needs to stay on top for casting
219
220#define INCLUDE_API_FROM_MODULE_H
221#include "iop/iop_api.h"
222
224 GModule *module;
228 int32_t instance;
242 gboolean bypass_cache;
248 uint32_t *histogram;
252 uint32_t histogram_max[4];
263 gboolean enabled;
269
274 int32_t params_size;
277 dt_pthread_mutex_t gui_lock;
283 gpointer blend_data;
284 struct {
285 struct {
289 GHashTable *users;
293 GHashTable *masks;
294 } source;
295 struct {
298 int id;
299 } sink;
311 gboolean expanded;
318
322
325
327 int multi_priority; // user may change this
328 char multi_name[128]; // user may change this name
334
337
338 int (*process_plain)(struct dt_iop_module_t *self, const struct dt_dev_pixelpipe_t *pipe,
339 const struct dt_dev_pixelpipe_iop_t *piece, const void *const i, void *const o);
340
341 // introspection related data
343
344 // parameters hash
346
347 // blendop hash
348 // Ideally, this would be added to struct dt_develop_blend_params_t *blendop
349 // but since blendops are dumped to DB as a memory blob, we can't change their length
350 // without updating version (aka breaking backwards compatibility), and this minor
351 // stuff is not worth it.
353
355
357void dt_iop_load_modules_so(void);
359void dt_iop_unload_modules_so(void);
362int dt_iop_load_module(dt_iop_module_t *module, dt_iop_module_so_t *module_so, struct dt_develop_t *dev);
366void dt_iop_init_pipe(struct dt_iop_module_t *module, struct dt_dev_pixelpipe_t *pipe,
367 struct dt_dev_pixelpipe_iop_t *piece);
368void dt_iop_cleanup_pipe(struct dt_iop_module_t *module, struct dt_dev_pixelpipe_t *pipe,
369 struct dt_dev_pixelpipe_iop_t *piece);
372gboolean dt_iop_is_hidden(dt_iop_module_t *module);
374static inline void dt_iop_gui_enter_critical_section(dt_iop_module_t *const module)
375 ACQUIRE(&module->gui_lock)
376{
377 dt_pthread_mutex_lock(&module->gui_lock);
378}
380static inline void dt_iop_gui_leave_critical_section(dt_iop_module_t *const module)
381 RELEASE(&module->gui_lock)
382{
383 dt_pthread_mutex_unlock(&module->gui_lock);
384}
394void dt_iop_gui_set_expanded(dt_iop_module_t *module, gboolean expanded, gboolean collapse_others);
397/* duplicate module and return new instance */
398dt_iop_module_t *dt_iop_gui_duplicate(dt_iop_module_t *base, gboolean copy_params);
399
401
404 struct dt_develop_blend_params_t *blendop_params, struct dt_dev_pixelpipe_t *pipe,
405 struct dt_dev_pixelpipe_iop_t *piece);
406void dt_iop_commit_blend_params(dt_iop_module_t *module, const struct dt_develop_blend_params_t *blendop_params);
408void dt_iop_set_mask_mode(dt_iop_module_t *module, int mask_mode);
415
423void dt_iop_gui_init(dt_iop_module_t *module);
426
428void dt_iop_nap(int32_t usec);
429
432/* returns the iop-module found in list with the given name */
433dt_iop_module_t *dt_iop_get_module_from_list(GList *iop_list, const char *op);
434dt_iop_module_t *dt_iop_get_module(const char *op);
437dt_iop_module_t *dt_iop_get_module_by_op_priority(GList *modules, const char *operation, const int multi_priority);
440dt_iop_module_t *dt_iop_get_module_by_instance_name(GList *modules, const char *operation, const char *multi_name);
441
443gboolean dt_iop_is_first_instance(GList *modules, dt_iop_module_t *module);
444
445
447int dt_iop_get_module_flags(const char *op);
448
450const gchar *dt_iop_get_localized_name(const gchar *op);
451const gchar *dt_iop_get_localized_aliases(const gchar *op);
452
454void dt_iop_update_multi_priority(dt_iop_module_t *module, int new_priority);
455
457gboolean dt_iop_module_has_raster_mask(const dt_iop_module_t *module);
460
462gboolean dt_iop_is_raster_mask_used(dt_iop_module_t *module, int id);
463
470
471// initializes memory.darktable_iop_names
473
476
479
480// format modules description going in tooltips
481const char **dt_iop_set_description(dt_iop_module_t *module, const char *main_text,
482 const char *purpose, const char *input,
483 const char *process, const char *output);
484
486{
487 // Align so that DT_ALIGNED_ARRAY may be used within gui_data struct
488 module->gui_data = (dt_iop_gui_data_t*)dt_calloc_align(size);
489 dt_pthread_mutex_init(&module->gui_lock,NULL);
490 return module->gui_data;
491}
492#define IOP_GUI_ALLOC(module) \
493 (dt_iop_##module##_gui_data_t *)_iop_gui_alloc(self,sizeof(dt_iop_##module##_gui_data_t))
494
495#define IOP_GUI_FREE \
496 dt_pthread_mutex_destroy(&self->gui_lock); \
497 if(self->gui_data){ \
498 dt_free_align(self->gui_data); \
499 self->gui_data = NULL; \
500 } \
501 self->gui_data = NULL;
502
503/* bring up module rename dialog */
505
506/* dispatch post-value-changed GUI events within module and commit changes to history */
507void dt_iop_gui_changed(dt_iop_module_t *module, GtkWidget *widget, gpointer data);
508
509// update all bauhaus widgets in an iop module from their params fields
511
512// default callback to connect to value-changed signal for bauhaus widgets
513// it will automatically call dt_iop_changed for the right module.
515
516
537void dt_iop_compute_module_hash(dt_iop_module_t *module, GList *masks);
538
539// Use module fingerprints to determine if two instances are actually the same
541
542
567void dt_iop_set_cache_bypass(dt_iop_module_t *module, gboolean state);
568
569// after writing data using copy_pixel_nontemporal, it is necessary to
570// ensure that the writes have completed before attempting reads from
571// a different core. This function produces the required memory
572// fence to ensure proper visibility
573static inline void dt_sfence()
574{
575#if defined(__SSE__)
576 _mm_sfence();
577#else
578 // the following generates an MFENCE instruction on x86/x64. We
579 // only really need SFENCE, which is less expensive, but none of the
580 // other memory orders generate *any* fence instructions on x64.
581 __atomic_thread_fence(__ATOMIC_SEQ_CST);
582#endif
583}
584
585// if the copy_pixel_nontemporal() writes were inside an OpenMP
586// parallel loop, the OpenMP parallelization will have performed a
587// memory fence before resuming single-threaded operation, so a
588// dt_sfence would be superfluous. But if compiled without OpenMP
589// parallelization, we should play it safe and emit a memory fence.
590// This function should be used right after a parallelized for loop,
591// where it will produce a barrier only if needed.
592#ifdef _OPENMP
593#define dt_omploop_sfence()
594#else
595#define dt_omploop_sfence() dt_sfence()
596#endif
597
598#ifdef __cplusplus
599}
600#endif
601
602// clang-format off
603// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
604// vim: shiftwidth=2 expandtab tabstop=2 cindent
605// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
606// clang-format on
int process(struct dt_iop_module_t *self, const dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_iop_t *piece, const void *const ivoid, void *const ovoid)
Definition ashift.c:3304
dt_iop_colorspace_type_t
Definition color_conversion.h:30
@ ACQUIRE
Definition colormapping.c:94
const float i
Definition colorspaces_inline_conversions.h:669
void dt_iop_params_t
Definition dev_history.h:41
static int dt_pthread_mutex_unlock(dt_pthread_mutex_t *mutex) RELEASE(mutex) NO_THREAD_SAFETY_ANALYSIS
Definition dtpthread.h:374
static int dt_pthread_mutex_init(dt_pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)
Definition dtpthread.h:359
static int dt_pthread_mutex_lock(dt_pthread_mutex_t *mutex) ACQUIRE(mutex) NO_THREAD_SAFETY_ANALYSIS
Definition dtpthread.h:364
dt_iop_module_t * dt_iop_get_module_from_list(GList *iop_list, const char *op)
Definition imageop.c:2617
dt_dev_request_colorpick_flags_t
Definition imageop.h:171
@ DT_REQUEST_COLORPICK_OFF
Definition imageop.h:172
@ DT_REQUEST_COLORPICK_MODULE
Definition imageop.h:173
dt_iop_module_t * dt_iop_get_module(const char *op)
Definition imageop.c:2634
void dt_iop_set_darktable_iop_table()
Definition imageop.c:2698
void dt_iop_gui_cleanup_module(dt_iop_module_t *module)
Definition imageop.c:1909
void dt_iop_load_default_params(dt_iop_module_t *module)
Definition imageop.c:125
dt_iop_module_t * dt_iop_get_module_by_instance_name(GList *modules, const char *operation, const char *multi_name)
Definition imageop.c:2824
GtkWidget * dt_iop_gui_get_pluginui(dt_iop_module_t *module)
Definition imageop.c:2572
gboolean dt_iop_is_raster_mask_used(dt_iop_module_t *module, int id)
Definition imageop.c:2792
void dt_iop_compute_module_hash(dt_iop_module_t *module, GList *masks)
Definition imageop.c:1815
void dt_iop_add_remove_mask_indicator(dt_iop_module_t *module)
Definition imageop.c:2338
void dt_iop_reload_defaults(dt_iop_module_t *module)
Definition imageop.c:1213
static void dt_sfence()
Definition imageop.h:573
void dt_iop_gui_set_expander(dt_iop_module_t *module)
Definition imageop.c:2428
void dt_iop_throttled_history_update(gpointer data)
Definition imageop.c:2860
dt_iop_module_t * dt_iop_gui_get_next_visible_module(dt_iop_module_t *module)
Definition imageop.c:680
void dt_iop_init_pipe(struct dt_iop_module_t *module, struct dt_dev_pixelpipe_t *pipe, struct dt_dev_pixelpipe_iop_t *piece)
Definition imageop.c:535
int dt_iop_load_module(dt_iop_module_t *module, dt_iop_module_so_t *module_so, struct dt_develop_t *dev)
Definition imageop.c:1494
gboolean dt_iop_is_first_instance(GList *modules, dt_iop_module_t *module)
Definition imageop.c:2842
void dt_iop_gui_init(dt_iop_module_t *module)
Definition imageop.c:1181
void dt_iop_cleanup_module(dt_iop_module_t *module)
Definition imageop.c:1505
gboolean dt_iop_module_has_raster_mask(const dt_iop_module_t *module)
Definition imageop.c:1563
void dt_iop_gui_update(dt_iop_module_t *module)
Definition imageop.c:1956
const gchar * dt_iop_get_localized_aliases(const gchar *op)
Definition imageop.c:2746
const gchar * dt_iop_get_localized_name(const gchar *op)
Definition imageop.c:2724
void dt_bauhaus_update_module(dt_iop_module_t *self)
Definition imageop.c:2895
void dt_iop_commit_params(dt_iop_module_t *module, dt_iop_params_t *params, struct dt_develop_blend_params_t *blendop_params, struct dt_dev_pixelpipe_t *pipe, struct dt_dev_pixelpipe_iop_t *piece)
Definition imageop.c:1838
void dt_iop_gui_reset(dt_iop_module_t *module)
Definition imageop.c:1976
gboolean dt_iop_module_needs_mask_history(const dt_iop_module_t *module)
Definition imageop.c:1574
void dt_iop_load_modules_so(void)
Definition imageop.c:1485
void dt_iop_nap(int32_t usec)
Definition imageop.c:2578
void dt_iop_default_init(dt_iop_module_t *module)
Definition imageop.c:313
void dt_iop_commit_blend_params(dt_iop_module_t *module, const struct dt_develop_blend_params_t *blendop_params)
void dt_iop_gui_changed(dt_iop_module_t *module, GtkWidget *widget, gpointer data)
Definition imageop.c:2880
void dt_iop_gui_update_expanded(dt_iop_module_t *module)
Definition imageop.c:2171
void dt_iop_gui_update_header(dt_iop_module_t *module)
Definition imageop.c:1129
void dt_iop_gui_set_enable_button(dt_iop_module_t *module)
Definition imageop.c:1157
void dt_iop_cleanup_pipe(struct dt_iop_module_t *module, struct dt_dev_pixelpipe_t *pipe, struct dt_dev_pixelpipe_iop_t *piece)
Definition imageop.c:542
int dt_iop_load_module_by_so(dt_iop_module_t *module, dt_iop_module_so_t *so, struct dt_develop_t *dev)
Definition imageop.c:455
void dt_iop_request_focus(dt_iop_module_t *module)
Definition imageop.c:2025
dt_iop_module_t * dt_iop_gui_get_previous_visible_module(dt_iop_module_t *module)
Definition imageop.c:666
dt_iop_module_header_icons_t
Definition imageop.h:99
@ IOP_MODULE_ICON
Definition imageop.h:101
@ IOP_MODULE_PRESETS
Definition imageop.h:106
@ IOP_MODULE_RESET
Definition imageop.h:105
@ IOP_MODULE_LABEL
Definition imageop.h:102
@ IOP_MODULE_MASK
Definition imageop.h:103
@ IOP_MODULE_LAST
Definition imageop.h:107
@ IOP_MODULE_SWITCH
Definition imageop.h:100
@ IOP_MODULE_INSTANCE
Definition imageop.h:104
static void dt_iop_gui_enter_critical_section(dt_iop_module_t *const module) ACQUIRE(&module -> gui_lock)
Definition imageop.h:374
gboolean dt_iop_is_hidden(dt_iop_module_t *module)
Definition imageop.c:1084
const char ** dt_iop_set_description(dt_iop_module_t *module, const char *main_text, const char *purpose, const char *input, const char *process, const char *output)
Definition imageop.c:2866
GtkWidget * dt_iop_gui_get_widget(dt_iop_module_t *module)
Definition imageop.c:2567
gboolean dt_iop_so_is_hidden(dt_iop_module_so_t *module)
Definition imageop.c:1069
dt_iop_flags_t
Definition imageop.h:139
@ IOP_FLAGS_HIDDEN
Definition imageop.h:147
@ IOP_FLAGS_INCLUDE_IN_STYLES
Definition imageop.h:143
@ IOP_FLAGS_INTERNAL_MASKS
Definition imageop.h:156
@ IOP_FLAGS_PREVIEW_NON_OPENCL
Definition imageop.h:150
@ IOP_FLAGS_DEPRECATED
Definition imageop.h:145
@ IOP_FLAGS_SUPPORTS_BLENDING
Definition imageop.h:144
@ IOP_FLAGS_ALLOW_TILING
Definition imageop.h:146
@ IOP_FLAGS_UNSAFE_COPY
Definition imageop.h:154
@ IOP_FLAGS_NONE
Definition imageop.h:140
@ IOP_FLAGS_ONE_INSTANCE
Definition imageop.h:149
@ IOP_FLAGS_NO_MASKS
Definition imageop.h:152
@ IOP_FLAGS_GUIDES_SPECIAL_DRAW
Definition imageop.h:155
@ IOP_FLAGS_TILING_FULL_ROI
Definition imageop.h:148
@ IOP_FLAGS_FENCE
Definition imageop.h:153
@ IOP_FLAGS_NO_HISTORY_STACK
Definition imageop.h:151
void dt_iop_global_data_t
Definition imageop.h:167
static void dt_iop_gui_leave_critical_section(dt_iop_module_t *const module) RELEASE(&module -> gui_lock)
Definition imageop.h:380
int dt_iop_get_module_flags(const char *op)
Definition imageop.c:2639
void dt_bauhaus_value_changed_default_callback(GtkWidget *widget)
Definition imageop.c:2948
dt_iop_module_t * dt_iop_get_colorout_module(void)
Definition imageop.c:2612
gboolean dt_iop_check_modules_equal(dt_iop_module_t *mod_1, dt_iop_module_t *mod_2)
Definition imageop.c:1743
void dt_iop_data_t
Definition imageop.h:166
dt_iop_colorspace_type_t
Definition imageop.h:178
@ IOP_CS_RAW
Definition imageop.h:180
@ IOP_CS_LCH
Definition imageop.h:183
@ IOP_CS_JZCZHZ
Definition imageop.h:185
@ IOP_CS_RGB
Definition imageop.h:182
@ IOP_CS_HSL
Definition imageop.h:184
@ IOP_CS_LAB
Definition imageop.h:181
@ IOP_CS_NONE
Definition imageop.h:179
void dt_iop_gui_set_expanded(dt_iop_module_t *module, gboolean expanded, gboolean collapse_others)
Definition imageop.c:2154
dt_iop_group_t
Definition imageop.h:112
@ IOP_GROUP_LAST
Definition imageop.h:121
@ IOP_GROUP_EFFECTS
Definition imageop.h:119
@ IOP_GROUP_FILM
Definition imageop.h:115
@ IOP_GROUP_TECHNICAL
Definition imageop.h:120
@ IOP_GROUP_COLOR
Definition imageop.h:116
@ IOP_GROUP_REPAIR
Definition imageop.h:117
@ IOP_GROUP_SHARPNESS
Definition imageop.h:118
@ IOP_GROUP_TONES
Definition imageop.h:114
@ IOP_GROUP_NONE
Definition imageop.h:113
void dt_iop_set_cache_bypass(dt_iop_module_t *module, gboolean state)
Definition imageop.c:2594
gboolean dt_iop_get_cache_bypass(dt_iop_module_t *module)
Definition imageop.c:2589
void dt_iop_set_mask_mode(dt_iop_module_t *module, int mask_mode)
Definition imageop.c:1549
void dt_iop_gui_rename_module(dt_iop_module_t *module)
Definition imageop.c:926
dt_iop_module_t * dt_iop_gui_duplicate(dt_iop_module_t *base, gboolean copy_params)
Definition imageop.c:759
gboolean dt_iop_gui_module_is_visible(dt_iop_module_t *module)
Definition imageop.c:660
dt_iop_module_t * dt_iop_get_module_by_op_priority(GList *modules, const char *operation, const int multi_priority)
Definition imageop.c:2806
static dt_iop_gui_data_t * _iop_gui_alloc(dt_iop_module_t *module, size_t size)
Definition imageop.h:485
void dt_iop_update_multi_priority(dt_iop_module_t *module, int new_priority)
Definition imageop.c:2768
dt_iop_tags_t
Definition imageop.h:126
@ IOP_TAG_DECORATION
Definition imageop.h:129
@ IOP_TAG_CLIPPING
Definition imageop.h:130
@ IOP_TAG_DISTORT
Definition imageop.h:128
@ IOP_TAG_NONE
Definition imageop.h:127
void dt_iop_unload_modules_so(void)
Definition imageop.c:1531
size_t size
Definition mipmap_cache.c:3
dt_dev_request_flags_t
Definition pixelpipe.h:46
char dt_dev_operation_t[20]
Definition settings.h:38
struct _GtkWidget GtkWidget
Definition splash.h:29
unsigned __int64 uint64_t
Definition strptime.c:74
Definition togglebutton.h:43
Definition pixelpipe.h:65
Definition pixelpipe_hb.h:95
struct dt_iop_module_t *void * data
Definition pixelpipe_hb.h:96
Definition pixelpipe_hb.h:216
Definition blend.h:198
Definition develop.h:155
Definition tiling.h:39
The dt_gui_module_t type is the intersection between a dt_lib_module_t and a dt_iop_module_t structur...
Definition gui_module_api.h:42
Definition color_picker_proxy.h:50
Definition imageop.h:160
int dummy
Definition imageop.h:163
Definition imageop.h:190
GModule *dt_dev_operation_t op
Definition imageop.h:200
dt_gui_module_t common_fields
Definition imageop.h:192
int(* process_plain)(struct dt_iop_module_t *self, const struct dt_dev_pixelpipe_t *pipe, const struct dt_dev_pixelpipe_iop_t *piece, const void *const i, void *const o)
Definition imageop.h:208
dt_iop_global_data_t * data
Definition imageop.h:203
gboolean have_introspection
Definition imageop.h:212
Definition imageop.h:216
dt_dev_request_colorpick_flags_t request_color_pick
Definition imageop.h:234
GtkDarktableToggleButton * off
Definition imageop.h:304
int32_t hide_enable_button
Definition imageop.h:232
gpointer blend_data
Definition imageop.h:283
struct dt_iop_module_t * source
Definition imageop.h:297
dt_iop_params_t * default_params
Definition imageop.h:272
GHashTable * masks
Definition imageop.h:293
struct dt_develop_blend_params_t * blend_params
Definition imageop.h:281
dt_aligned_pixel_t picked_output_color_min
Definition imageop.h:246
uint64_t hash
Definition imageop.h:345
int32_t suppress_mask
Definition imageop.h:240
GtkWidget * widget
Definition imageop.h:302
int multi_priority
Definition imageop.h:327
char multi_name[128]
Definition imageop.h:328
dt_gui_module_t common_fields
Definition imageop.h:218
struct dt_develop_t * dev
Definition imageop.h:261
GtkWidget * mask_indicator
Definition imageop.h:308
dt_iop_gui_data_t * gui_data
Definition imageop.h:276
uint64_t blendop_hash
Definition imageop.h:352
gboolean default_enabled
Definition imageop.h:268
GModule *dt_dev_operation_t op
Definition imageop.h:226
dt_dev_request_flags_t request_histogram
Definition imageop.h:236
int iop_order
Definition imageop.h:230
gboolean have_introspection
Definition imageop.h:342
GtkWidget * guides_toggle
Definition imageop.h:320
GtkWidget * fusion_slider
Definition imageop.h:317
gboolean expanded
Definition imageop.h:311
GtkWidget * multimenu_button
Definition imageop.h:333
gboolean multi_show_close
Definition imageop.h:329
dt_dev_histogram_stats_t histogram_stats
Definition imageop.h:250
dt_aligned_pixel_t picked_output_color_max
Definition imageop.h:246
int32_t instance
Definition imageop.h:228
gboolean multi_show_up
Definition imageop.h:330
gboolean bypass_cache
Definition imageop.h:242
struct dt_iop_module_t::@29 raster_mask
GtkWidget * presets_button
Definition imageop.h:315
uint32_t histogram_max[4]
Definition imageop.h:252
dt_iop_global_data_t * global_data
Definition imageop.h:279
gboolean multi_show_new
Definition imageop.h:332
gboolean multi_show_down
Definition imageop.h:331
int id
Definition imageop.h:298
gboolean workflow_enabled
Definition imageop.h:270
dt_aligned_pixel_t picked_output_color
Definition imageop.h:246
gboolean enabled
Definition imageop.h:263
GtkWidget * reset_button
Definition imageop.h:313
dt_iop_module_so_t * so
Definition imageop.h:324
int(* process_plain)(struct dt_iop_module_t *self, const struct dt_dev_pixelpipe_t *pipe, const struct dt_dev_pixelpipe_iop_t *piece, const void *const i, void *const o)
Definition imageop.h:338
GtkWidget * expander
Definition imageop.h:310
dt_aligned_pixel_t picked_color_min
Definition imageop.h:244
int request_mask_display
Definition imageop.h:238
dt_pthread_mutex_t gui_lock
Definition imageop.h:277
dt_aligned_pixel_t picked_color_max
Definition imageop.h:244
int histogram_middle_grey
Definition imageop.h:259
GHashTable * users
Definition imageop.h:289
struct dt_develop_blend_params_t * default_blendop_params
Definition imageop.h:281
GtkWidget * header
Definition imageop.h:306
int32_t params_size
Definition imageop.h:274
uint32_t * histogram
Definition imageop.h:248
dt_iop_colorspace_type_t histogram_cst
Definition imageop.h:257
guint timeout_handle
Definition imageop.h:336
dt_aligned_pixel_t picked_color
Definition imageop.h:244
GtkWidget * guides_combo
Definition imageop.h:321
dt_iop_params_t * params
Definition imageop.h:272
Definition imageop.h:67
int x
Definition imageop.h:68
double scale
Definition imageop.h:69
int width
Definition imageop.h:68
int height
Definition imageop.h:68
int y
Definition imageop.h:68