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
71typedef struct dt_iop_roi_t
72{
73 int x, y, width, height;
74 double scale;
76
77#ifdef __cplusplus
78}
79#endif
80
81#include "common/darktable.h"
84#include "common/opencl.h"
85
86#include "control/settings.h"
87#include "develop/pixelpipe.h"
88#include "dtgtk/togglebutton.h"
89#include "gui/gtk.h"
90#include "gui/gui_throttle.h"
91
92#ifdef __cplusplus
93extern "C" {
94#endif
95
96struct dt_develop_t;
102
114
131float dt_dev_get_module_scale(const struct dt_dev_pixelpipe_t *pipe, const dt_iop_roi_t *roi_in);
132
146
148typedef enum dt_iop_tags_t
149{
154
155 // might be some other filters togglable by user?
156 // IOP_TAG_SLOW = 1<<3,
157 // IOP_TAG_DETAIL_FIX = 1<<3,
159
161typedef enum dt_iop_flags_t
162{
164
167 IOP_FLAGS_SUPPORTS_BLENDING = 1 << 1, // Does provide blending modes
169 IOP_FLAGS_ALLOW_TILING = 1 << 3, // Does allow tile-wise processing (valid for CPU and GPU processing)
170 IOP_FLAGS_HIDDEN = 1 << 4, // Hide the iop from userinterface
171 IOP_FLAGS_TILING_FULL_ROI = 1 << 5, // Tiling code has to expect arbitrary roi's for this module (incl. flipping, mirroring etc.)
172 IOP_FLAGS_ONE_INSTANCE = 1 << 6, // The module doesn't support multiple instances
173 IOP_FLAGS_PREVIEW_NON_OPENCL = 1 << 7, // Preview pixelpipe of this module must not run on GPU but always on CPU
174 IOP_FLAGS_NO_HISTORY_STACK = 1 << 8, // This iop will never show up in the history stack
175 IOP_FLAGS_NO_MASKS = 1 << 9, // The module doesn't support masks (used with SUPPORT_BLENDING)
176 IOP_FLAGS_TAKE_NO_INPUT = 1 << 10, // The module doesn't use input
177 IOP_FLAGS_UNSAFE_COPY = 1 << 11, // Unsafe to copy as part of history
178 IOP_FLAGS_GUIDES_SPECIAL_DRAW = 1 << 12, // handle the grid drawing directly
179 IOP_FLAGS_INTERNAL_MASKS = 1 << 13, // Module uses masks internally, outside of blendops. This advertises the need to commit them to history unconditionnaly.
180 IOP_FLAGS_CPU_WRITES_OPENCL = 1 << 14 // Special case where the process() CPU path inits OpenCL vRAM output cache too
182
183typedef struct dt_iop_gui_data_t
184{
185 // "base type" for all dt_iop_XXXX_gui_data_t types used by iops
186 // to avoid compiler error about different sizes of empty structs between C and C++, we need at least one member
187 int dummy;
189
190typedef void dt_iop_data_t;
192
195{
197 DT_REQUEST_COLORPICK_MODULE = 1 // requested by module (should take precedence)
199
212
213static inline gboolean dt_iop_colorspace_is_rgb(const dt_iop_colorspace_type_t cst)
214{
215 return cst == IOP_CS_RGB || cst == IOP_CS_RGB_DISPLAY;
216}
217
219typedef struct dt_iop_module_so_t
220{
221 // Needs to stay on top for casting
223
224#define INCLUDE_API_FROM_MODULE_H
225#include "iop/iop_api.h"
226
228 GModule *module;
235// dt_iop_gui_data_t *gui_data;
238 int (*process_plain)(struct dt_iop_module_t *self, const struct dt_dev_pixelpipe_t *pipe,
239 const struct dt_dev_pixelpipe_iop_t *piece, const void *const i, void *const o);
240
241 // introspection related data
244
245typedef struct dt_iop_module_t
246{
247 // Needs to stay on top for casting
249
250#define INCLUDE_API_FROM_MODULE_H
251#include "iop/iop_api.h"
252
254 GModule *module;
258 int32_t instance;
270 gboolean bypass_cache;
276 uint32_t *histogram;
280 uint32_t histogram_max[4];
289 // FIXME: this should disappear from there.
290 // To access the develop object from backend (pipeline threads), we already have pipe->dev
291 // referenced in the pipeline object.
292 // To access the develop object from frontend (GUI), we have the global darktable.develop reference.
293 // Splitting like this between frontend/backend makes things clear and legible.
294 // This internal reference can be either, and used for writes and reads alike,
295 // which is impossible to track across the program.
298 gboolean enabled;
304
309 int32_t params_size;
312 dt_pthread_mutex_t gui_lock;
318 gpointer blend_data;
319 struct {
320 struct {
324 GHashTable *users;
328 GHashTable *masks;
329 } source;
330 struct {
333 int id;
334 } sink;
346 gboolean expanded;
353
357
360
362 int multi_priority; // user may change this
363 char multi_name[128]; // user may change this name
369
372
373 int (*process_plain)(struct dt_iop_module_t *self, const struct dt_dev_pixelpipe_t *pipe,
374 const struct dt_dev_pixelpipe_iop_t *piece, const void *const i, void *const o);
375
376 // introspection related data
378
379 // parameters hash
381
382 // blendop hash
383 // Ideally, this would be added to struct dt_develop_blend_params_t *blendop
384 // but since blendops are dumped to DB as a memory blob, we can't change their length
385 // without updating version (aka breaking backwards compatibility), and this minor
386 // stuff is not worth it.
388
390
392void dt_iop_load_modules_so(void);
394void dt_iop_unload_modules_so(void);
397int dt_iop_load_module(dt_iop_module_t *module, dt_iop_module_so_t *module_so, struct dt_develop_t *dev);
401void dt_iop_init_pipe(struct dt_iop_module_t *module, struct dt_dev_pixelpipe_t *pipe,
402 struct dt_dev_pixelpipe_iop_t *piece);
403void dt_iop_cleanup_pipe(struct dt_iop_module_t *module, struct dt_dev_pixelpipe_t *pipe,
404 struct dt_dev_pixelpipe_iop_t *piece);
407gboolean dt_iop_is_hidden(dt_iop_module_t *module);
408
410gboolean dt_iop_is_visible(dt_iop_module_t *module);
411
413static inline void dt_iop_gui_enter_critical_section(dt_iop_module_t *const module)
414 ACQUIRE(&module->gui_lock)
415{
416 dt_pthread_mutex_lock(&module->gui_lock);
417}
419static inline void dt_iop_gui_leave_critical_section(dt_iop_module_t *const module)
420 RELEASE(&module->gui_lock)
421{
422 dt_pthread_mutex_unlock(&module->gui_lock);
423}
433void dt_iop_gui_set_expanded(dt_iop_module_t *module, gboolean expanded, gboolean collapse_others);
436/* duplicate module and return new instance */
437dt_iop_module_t *dt_iop_gui_duplicate(dt_iop_module_t *base, gboolean copy_params);
438
440
453#define dt_iop_fmt_log(module, fmt, ...) \
454 dt_print(DT_DEBUG_PIPE, "[iop-fmt] %-14s " fmt "\n", (module)->op, ##__VA_ARGS__)
455
458 struct dt_develop_blend_params_t *blendop_params, struct dt_dev_pixelpipe_t *pipe,
459 struct dt_dev_pixelpipe_iop_t *piece);
460void dt_iop_commit_blend_params(dt_iop_module_t *module, const struct dt_develop_blend_params_t *blendop_params);
462void dt_iop_set_mask_mode(dt_iop_module_t *module, int mask_mode);
469
482void dt_iop_gui_init(dt_iop_module_t *module);
485
487void dt_iop_nap(int32_t usec);
488
491/* returns the iop-module found in list with the given name */
492dt_iop_module_t *dt_iop_get_module_from_list(GList *iop_list, const char *op);
493dt_iop_module_t *dt_iop_get_module(const char *op);
496dt_iop_module_t *dt_iop_get_module_by_op_priority(GList *modules, const char *operation, const int multi_priority);
499dt_iop_module_t *dt_iop_get_module_by_instance_name(GList *modules, const char *operation, const char *multi_name);
500
502gboolean dt_iop_is_first_instance(GList *modules, dt_iop_module_t *module);
503
504
506int dt_iop_get_module_flags(const char *op);
507
509const gchar *dt_iop_get_localized_name(const gchar *op);
510const gchar *dt_iop_get_localized_aliases(const gchar *op);
511
513void dt_iop_update_multi_priority(dt_iop_module_t *module, int new_priority);
514
516gboolean dt_iop_module_has_raster_mask(const dt_iop_module_t *module);
519
521gboolean dt_iop_is_raster_mask_used(dt_iop_module_t *module, int id);
522
543 const char *reason);
561 gboolean enable, gboolean write_history, const char *reason);
576 const char *reason);
577
578// initializes memory.darktable_iop_names
580
583
586
587// format modules description going in tooltips
588const char **dt_iop_set_description(dt_iop_module_t *module, const char *main_text,
589 const char *purpose, const char *input,
590 const char *process, const char *output);
591
593{
594 // Align so that DT_ALIGNED_ARRAY may be used within gui_data struct
595 module->gui_data = (dt_iop_gui_data_t*)dt_calloc_align(size);
596 dt_pthread_mutex_init(&module->gui_lock,NULL);
597 return module->gui_data;
598}
599#define IOP_GUI_ALLOC(module) \
600 (dt_iop_##module##_gui_data_t *)_iop_gui_alloc(self,sizeof(dt_iop_##module##_gui_data_t))
601
602#define IOP_GUI_FREE \
603 dt_pthread_mutex_destroy(&self->gui_lock); \
604 if(self->gui_data){ \
605 dt_free_align(self->gui_data); \
606 self->gui_data = NULL; \
607 } \
608 self->gui_data = NULL;
609
610/* bring up module rename dialog */
612
613/* dispatch post-value-changed GUI events within module and commit changes to history */
614void dt_iop_gui_changed(dt_iop_module_t *module, GtkWidget *widget, gpointer data);
615
616// update all bauhaus widgets in an iop module from their params fields
618
619// default callback to connect to value-changed signal for bauhaus widgets
620// it will automatically call dt_iop_changed for the right module.
622
623
644void dt_iop_compute_module_hash(dt_iop_module_t *module, GList *masks);
645
646// Use module fingerprints to determine if two instances are actually the same
648
649
674void dt_iop_set_cache_bypass(dt_iop_module_t *module, gboolean state);
675
676// after writing data using copy_pixel_nontemporal, it is necessary to
677// ensure that the writes have completed before attempting reads from
678// a different core. This function produces the required memory
679// fence to ensure proper visibility
680static inline void dt_sfence()
681{
682#if defined(__x86_64__) || defined(__i386__)
683 _mm_sfence();
684#else
685 // the following generates an MFENCE instruction on x86/x64. We
686 // only really need SFENCE, which is less expensive, but none of the
687 // other memory orders generate *any* fence instructions on x64.
688 __atomic_thread_fence(__ATOMIC_SEQ_CST);
689#endif
690}
691
692// if the copy_pixel_nontemporal() writes were inside an OpenMP
693// parallel loop, the OpenMP parallelization will have performed a
694// memory fence before resuming single-threaded operation, so a
695// dt_sfence would be superfluous. But if compiled without OpenMP
696// parallelization, we should play it safe and emit a memory fence.
697// This function should be used right after a parallelized for loop,
698// where it will produce a barrier only if needed.
699#ifdef _OPENMP
700#define dt_omploop_sfence()
701#else
702#define dt_omploop_sfence() dt_sfence()
703#endif
704
705#ifdef __cplusplus
706}
707#endif
708
709// clang-format off
710// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
711// vim: shiftwidth=2 expandtab tabstop=2 cindent
712// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
713// clang-format on
__DT_CLONE_TARGETS__ 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:3153
dt_iop_colorspace_type_t
@ ACQUIRE
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
static gboolean enable(dt_image_t *image)
dt_iop_module_t * dt_iop_get_module_from_list(GList *iop_list, const char *op)
Definition imageop.c:2938
dt_dev_request_colorpick_flags_t
Definition imageop.h:195
@ DT_REQUEST_COLORPICK_OFF
Definition imageop.h:196
@ DT_REQUEST_COLORPICK_MODULE
Definition imageop.h:197
dt_iop_module_t * dt_iop_get_module(const char *op)
Definition imageop.c:2955
void dt_iop_set_darktable_iop_table()
Definition imageop.c:2973
void dt_iop_gui_cleanup_module(dt_iop_module_t *module)
Definition imageop.c:1998
void dt_iop_load_default_params(dt_iop_module_t *module)
Definition imageop.c:137
dt_iop_module_t * dt_iop_get_module_by_instance_name(GList *modules, const char *operation, const char *multi_name)
Definition imageop.c:3099
GtkWidget * dt_iop_gui_get_pluginui(dt_iop_module_t *module)
Definition imageop.c:2893
gboolean dt_iop_is_raster_mask_used(dt_iop_module_t *module, int id)
Definition imageop.c:3067
void dt_iop_compute_module_hash(dt_iop_module_t *module, GList *masks)
Definition imageop.c:1890
void dt_iop_add_remove_mask_indicator(dt_iop_module_t *module)
Definition imageop.c:2639
void dt_iop_reload_defaults(dt_iop_module_t *module)
Definition imageop.c:1268
static void dt_sfence()
Definition imageop.h:680
void dt_iop_gui_set_expander(dt_iop_module_t *module)
Definition imageop.c:2731
void dt_iop_throttled_history_update(gpointer data)
Definition imageop.c:3135
dt_iop_module_t * dt_iop_gui_get_next_visible_module(dt_iop_module_t *module)
Definition imageop.c:782
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:558
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:1550
float dt_dev_get_module_scale(const struct dt_dev_pixelpipe_t *pipe, const dt_iop_roi_t *roi_in)
Get the size of one current-grid pixel in full-resolution image pixels.
gboolean dt_iop_gui_commit_iop_order_change(struct dt_develop_t *dev, dt_iop_module_t *module, gboolean enable, gboolean write_history, const char *reason)
Commit the GUI-side consequences of an IOP-order change.
Definition imageop.c:740
gboolean dt_iop_is_first_instance(GList *modules, dt_iop_module_t *module)
Definition imageop.c:3117
void dt_iop_gui_init(dt_iop_module_t *module)
Definition imageop.c:1229
void dt_iop_cleanup_module(dt_iop_module_t *module)
Definition imageop.c:1561
gboolean dt_iop_module_has_raster_mask(const dt_iop_module_t *module)
Definition imageop.c:1636
void dt_iop_gui_update(dt_iop_module_t *module)
Definition imageop.c:2091
const gchar * dt_iop_get_localized_aliases(const gchar *op)
Definition imageop.c:3021
const gchar * dt_iop_get_localized_name(const gchar *op)
Definition imageop.c:2999
void dt_bauhaus_update_module(dt_iop_module_t *self)
Definition imageop.c:3173
static gboolean dt_iop_colorspace_is_rgb(const dt_iop_colorspace_type_t cst)
Definition imageop.h:213
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:1913
void dt_iop_gui_reset(dt_iop_module_t *module)
Definition imageop.c:2111
gboolean dt_iop_module_needs_mask_history(const dt_iop_module_t *module)
Definition imageop.c:1647
void dt_iop_load_modules_so(void)
Definition imageop.c:1541
void dt_iop_nap(int32_t usec)
Definition imageop.c:2899
void dt_iop_default_init(dt_iop_module_t *module)
Definition imageop.c:316
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:3155
void dt_iop_gui_update_expanded(dt_iop_module_t *module)
Definition imageop.c:2338
void dt_iop_gui_update_header(dt_iop_module_t *module)
Definition imageop.c:1177
void dt_iop_gui_set_enable_button(dt_iop_module_t *module)
Definition imageop.c:1205
void dt_iop_cleanup_pipe(struct dt_iop_module_t *module, struct dt_dev_pixelpipe_t *pipe, struct dt_dev_pixelpipe_iop_t *piece)
Release module-owned resources for one pixelpipe node.
Definition imageop.c:576
gboolean dt_iop_is_visible(dt_iop_module_t *module)
Definition imageop.c:1132
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:466
void dt_iop_request_focus(dt_iop_module_t *module)
Definition imageop.c:2169
dt_iop_module_t * dt_iop_gui_get_previous_visible_module(dt_iop_module_t *module)
Definition imageop.c:768
dt_iop_module_header_icons_t
Definition imageop.h:104
@ IOP_MODULE_ICON
Definition imageop.h:106
@ IOP_MODULE_PRESETS
Definition imageop.h:111
@ IOP_MODULE_RESET
Definition imageop.h:110
@ IOP_MODULE_LABEL
Definition imageop.h:107
@ IOP_MODULE_MASK
Definition imageop.h:108
@ IOP_MODULE_LAST
Definition imageop.h:112
@ IOP_MODULE_SWITCH
Definition imageop.h:105
@ IOP_MODULE_INSTANCE
Definition imageop.h:109
static void dt_iop_gui_enter_critical_section(dt_iop_module_t *const module) ACQUIRE(&module -> gui_lock)
Definition imageop.h:413
gboolean dt_iop_is_hidden(dt_iop_module_t *module)
Definition imageop.c:1127
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:3141
GtkWidget * dt_iop_gui_get_widget(dt_iop_module_t *module)
Definition imageop.c:2888
gboolean dt_iop_so_is_hidden(dt_iop_module_so_t *module)
Definition imageop.c:1112
dt_iop_flags_t
Definition imageop.h:162
@ IOP_FLAGS_HIDDEN
Definition imageop.h:170
@ IOP_FLAGS_INCLUDE_IN_STYLES
Definition imageop.h:166
@ IOP_FLAGS_INTERNAL_MASKS
Definition imageop.h:179
@ IOP_FLAGS_PREVIEW_NON_OPENCL
Definition imageop.h:173
@ IOP_FLAGS_DEPRECATED
Definition imageop.h:168
@ IOP_FLAGS_SUPPORTS_BLENDING
Definition imageop.h:167
@ IOP_FLAGS_TAKE_NO_INPUT
Definition imageop.h:176
@ IOP_FLAGS_ALLOW_TILING
Definition imageop.h:169
@ IOP_FLAGS_UNSAFE_COPY
Definition imageop.h:177
@ IOP_FLAGS_NONE
Definition imageop.h:163
@ IOP_FLAGS_ONE_INSTANCE
Definition imageop.h:172
@ IOP_FLAGS_NO_MASKS
Definition imageop.h:175
@ IOP_FLAGS_CPU_WRITES_OPENCL
Definition imageop.h:180
@ IOP_FLAGS_GUIDES_SPECIAL_DRAW
Definition imageop.h:178
@ IOP_FLAGS_TILING_FULL_ROI
Definition imageop.h:171
@ IOP_FLAGS_NO_HISTORY_STACK
Definition imageop.h:174
void dt_iop_global_data_t
Definition imageop.h:191
static void dt_iop_gui_leave_critical_section(dt_iop_module_t *const module) RELEASE(&module -> gui_lock)
Definition imageop.h:419
int dt_iop_get_module_flags(const char *op)
Definition imageop.c:2960
gboolean dt_iop_gui_move_module_before(dt_iop_module_t *module, dt_iop_module_t *module_next, const char *reason)
Move a module before another one and commit the GUI-side effects.
Definition imageop.c:754
void dt_bauhaus_value_changed_default_callback(GtkWidget *widget)
Definition imageop.c:3226
dt_iop_module_t * dt_iop_get_colorout_module(void)
Definition imageop.c:2933
gboolean dt_iop_check_modules_equal(dt_iop_module_t *mod_1, dt_iop_module_t *mod_2)
Definition imageop.c:1818
void dt_iop_data_t
Definition imageop.h:190
dt_iop_colorspace_type_t
Definition imageop.h:202
@ IOP_CS_RAW
Definition imageop.h:204
@ IOP_CS_LCH
Definition imageop.h:207
@ IOP_CS_RGB_DISPLAY
Definition imageop.h:210
@ IOP_CS_JZCZHZ
Definition imageop.h:209
@ IOP_CS_RGB
Definition imageop.h:206
@ IOP_CS_HSL
Definition imageop.h:208
@ IOP_CS_LAB
Definition imageop.h:205
@ IOP_CS_NONE
Definition imageop.h:203
void dt_iop_gui_set_expanded(dt_iop_module_t *module, gboolean expanded, gboolean collapse_others)
Definition imageop.c:2321
dt_iop_group_t
Definition imageop.h:135
@ IOP_GROUP_LAST
Definition imageop.h:144
@ IOP_GROUP_EFFECTS
Definition imageop.h:142
@ IOP_GROUP_FILM
Definition imageop.h:138
@ IOP_GROUP_TECHNICAL
Definition imageop.h:143
@ IOP_GROUP_COLOR
Definition imageop.h:139
@ IOP_GROUP_REPAIR
Definition imageop.h:140
@ IOP_GROUP_SHARPNESS
Definition imageop.h:141
@ IOP_GROUP_TONES
Definition imageop.h:137
@ IOP_GROUP_NONE
Definition imageop.h:136
void dt_iop_set_cache_bypass(dt_iop_module_t *module, gboolean state)
Definition imageop.c:2915
gboolean dt_iop_get_cache_bypass(dt_iop_module_t *module)
Definition imageop.c:2910
gboolean dt_iop_gui_move_module_after(dt_iop_module_t *module, dt_iop_module_t *module_prev, const char *reason)
Move a module after another one and commit the GUI-side effects.
Definition imageop.c:761
void dt_iop_set_mask_mode(dt_iop_module_t *module, int mask_mode)
Definition imageop.c:1616
void dt_iop_gui_rename_module(dt_iop_module_t *module)
Definition imageop.c:953
dt_iop_module_t * dt_iop_gui_duplicate(dt_iop_module_t *base, gboolean copy_params)
Definition imageop.c:796
gboolean dt_iop_gui_module_is_visible(dt_iop_module_t *module)
Definition imageop.c:734
dt_iop_module_t * dt_iop_get_module_by_op_priority(GList *modules, const char *operation, const int multi_priority)
Definition imageop.c:3081
static dt_iop_gui_data_t * _iop_gui_alloc(dt_iop_module_t *module, size_t size)
Definition imageop.h:592
void dt_iop_update_multi_priority(dt_iop_module_t *module, int new_priority)
Definition imageop.c:3043
dt_iop_tags_t
Definition imageop.h:149
@ IOP_TAG_DECORATION
Definition imageop.h:152
@ IOP_TAG_CLIPPING
Definition imageop.h:153
@ IOP_TAG_DISTORT
Definition imageop.h:151
@ IOP_TAG_NONE
Definition imageop.h:150
void dt_iop_unload_modules_so(void)
Definition imageop.c:1598
size_t size
Definition mipmap_cache.c:3
float dt_aligned_pixel_t[4]
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
const float uint32_t state[4]
unsigned __int64 uint64_t
Definition strptime.c:75
struct dt_iop_module_t *void * data
The dt_gui_module_t type is the intersection between a dt_lib_module_t and a dt_iop_module_t structur...
GModule *dt_dev_operation_t op
Definition imageop.h:230
dt_gui_module_t common_fields
Definition imageop.h:222
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:238
dt_iop_global_data_t * data
Definition imageop.h:233
gboolean have_introspection
Definition imageop.h:242
dt_dev_request_colorpick_flags_t request_color_pick
Definition imageop.h:264
GtkDarktableToggleButton * off
Definition imageop.h:339
int32_t hide_enable_button
Definition imageop.h:262
gpointer blend_data
Definition imageop.h:318
struct dt_iop_module_t * source
Definition imageop.h:332
dt_iop_params_t * default_params
Definition imageop.h:307
GHashTable * masks
Definition imageop.h:328
struct dt_develop_blend_params_t * blend_params
Definition imageop.h:316
dt_aligned_pixel_t picked_output_color_min
Definition imageop.h:274
uint64_t hash
Definition imageop.h:380
struct dt_iop_module_t::@31 raster_mask
GtkWidget * widget
Definition imageop.h:337
char multi_name[128]
Definition imageop.h:363
dt_gui_module_t common_fields
Definition imageop.h:248
struct dt_develop_t * dev
Definition imageop.h:296
GtkWidget * mask_indicator
Definition imageop.h:343
dt_iop_gui_data_t * gui_data
Definition imageop.h:311
uint64_t blendop_hash
Definition imageop.h:387
gboolean default_enabled
Definition imageop.h:303
GModule *dt_dev_operation_t op
Definition imageop.h:256
dt_dev_request_flags_t request_histogram
Definition imageop.h:266
gboolean have_introspection
Definition imageop.h:377
GtkWidget * guides_toggle
Definition imageop.h:355
GtkWidget * fusion_slider
Definition imageop.h:352
gboolean expanded
Definition imageop.h:346
GtkWidget * multimenu_button
Definition imageop.h:368
gboolean multi_show_close
Definition imageop.h:364
dt_dev_histogram_stats_t histogram_stats
Definition imageop.h:278
dt_aligned_pixel_t picked_output_color_max
Definition imageop.h:274
int32_t instance
Definition imageop.h:258
gboolean multi_show_up
Definition imageop.h:365
gboolean bypass_cache
Definition imageop.h:270
GtkWidget * presets_button
Definition imageop.h:350
uint32_t histogram_max[4]
Definition imageop.h:280
dt_iop_global_data_t * global_data
Definition imageop.h:314
gboolean multi_show_new
Definition imageop.h:367
gboolean multi_show_down
Definition imageop.h:366
gboolean workflow_enabled
Definition imageop.h:305
dt_aligned_pixel_t picked_output_color
Definition imageop.h:274
gboolean enabled
Definition imageop.h:298
GtkWidget * reset_button
Definition imageop.h:348
dt_iop_module_so_t * so
Definition imageop.h:359
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:373
GtkWidget * expander
Definition imageop.h:345
dt_aligned_pixel_t picked_color_min
Definition imageop.h:272
int request_mask_display
Definition imageop.h:268
dt_pthread_mutex_t gui_lock
Definition imageop.h:312
dt_aligned_pixel_t picked_color_max
Definition imageop.h:272
int histogram_middle_grey
Definition imageop.h:287
GHashTable * users
Definition imageop.h:324
struct dt_develop_blend_params_t * default_blendop_params
Definition imageop.h:316
GtkWidget * header
Definition imageop.h:341
int32_t params_size
Definition imageop.h:309
uint32_t * histogram
Definition imageop.h:276
dt_iop_colorspace_type_t histogram_cst
Definition imageop.h:285
guint timeout_handle
Definition imageop.h:371
dt_aligned_pixel_t picked_color
Definition imageop.h:272
GtkWidget * guides_combo
Definition imageop.h:356
dt_iop_params_t * params
Definition imageop.h:307
Region of interest passed through the pixelpipe.
Definition imageop.h:72
double scale
Definition imageop.h:74