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
161uint32_t dt_dev_get_roi_filters(const struct dt_dev_pixelpipe_iop_t *piece, const dt_iop_roi_t *roi_in);
162
176
178typedef enum dt_iop_tags_t
179{
184
185 // might be some other filters togglable by user?
186 // IOP_TAG_SLOW = 1<<3,
187 // IOP_TAG_DETAIL_FIX = 1<<3,
189
191typedef enum dt_iop_flags_t
192{
194
197 IOP_FLAGS_SUPPORTS_BLENDING = 1 << 1, // Does provide blending modes
199 IOP_FLAGS_ALLOW_TILING = 1 << 3, // Does allow tile-wise processing (valid for CPU and GPU processing)
200 IOP_FLAGS_HIDDEN = 1 << 4, // Hide the iop from userinterface
201 IOP_FLAGS_TILING_FULL_ROI = 1 << 5, // Tiling code has to expect arbitrary roi's for this module (incl. flipping, mirroring etc.)
202 IOP_FLAGS_ONE_INSTANCE = 1 << 6, // The module doesn't support multiple instances
203 IOP_FLAGS_PREVIEW_NON_OPENCL = 1 << 7, // Preview pixelpipe of this module must not run on GPU but always on CPU
204 IOP_FLAGS_NO_HISTORY_STACK = 1 << 8, // This iop will never show up in the history stack
205 IOP_FLAGS_NO_MASKS = 1 << 9, // The module doesn't support masks (used with SUPPORT_BLENDING)
206 IOP_FLAGS_TAKE_NO_INPUT = 1 << 10, // The module doesn't use input
207 IOP_FLAGS_UNSAFE_COPY = 1 << 11, // Unsafe to copy as part of history
208 IOP_FLAGS_GUIDES_SPECIAL_DRAW = 1 << 12, // handle the grid drawing directly
209 IOP_FLAGS_INTERNAL_MASKS = 1 << 13, // Module uses masks internally, outside of blendops. This advertises the need to commit them to history unconditionnaly.
210 IOP_FLAGS_CPU_WRITES_OPENCL = 1 << 14 // Special case where the process() CPU path inits OpenCL vRAM output cache too
212
213typedef struct dt_iop_gui_data_t
214{
215 // "base type" for all dt_iop_XXXX_gui_data_t types used by iops
216 // to avoid compiler error about different sizes of empty structs between C and C++, we need at least one member
217 int dummy;
219
220typedef void dt_iop_data_t;
222
225{
227 DT_REQUEST_COLORPICK_MODULE = 1 // requested by module (should take precedence)
229
242
243static inline gboolean dt_iop_colorspace_is_rgb(const dt_iop_colorspace_type_t cst)
244{
245 return cst == IOP_CS_RGB || cst == IOP_CS_RGB_DISPLAY;
246}
247
249typedef struct dt_iop_module_so_t
250{
251 // Needs to stay on top for casting
253
254#define INCLUDE_API_FROM_MODULE_H
255#include "iop/iop_api.h"
256
258 GModule *module;
265// dt_iop_gui_data_t *gui_data;
268 int (*process_plain)(struct dt_iop_module_t *self, const struct dt_dev_pixelpipe_t *pipe,
269 const struct dt_dev_pixelpipe_iop_t *piece, const void *const i, void *const o);
270
271 // introspection related data
274
275typedef struct dt_iop_module_t
276{
277 // Needs to stay on top for casting
279
280#define INCLUDE_API_FROM_MODULE_H
281#include "iop/iop_api.h"
282
284 GModule *module;
288 int32_t instance;
300 gboolean bypass_cache;
313 uint32_t *histogram;
317 uint32_t histogram_max[4];
326 // FIXME: this should disappear from there.
327 // To access the develop object from backend (pipeline threads), we already have pipe->dev
328 // referenced in the pipeline object.
329 // To access the develop object from frontend (GUI), we have the global darktable.develop reference.
330 // Splitting like this between frontend/backend makes things clear and legible.
331 // This internal reference can be either, and used for writes and reads alike,
332 // which is impossible to track across the program.
335 gboolean enabled;
341
346 int32_t params_size;
349 dt_pthread_mutex_t gui_lock;
355 gpointer blend_data;
356 struct {
357 struct {
361 GHashTable *users;
365 GHashTable *masks;
366 } source;
367 struct {
370 int id;
371 } sink;
383 gboolean expanded;
390
394
397
399 int multi_priority; // user may change this
400 char multi_name[128]; // user may change this name
406
409
410 int (*process_plain)(struct dt_iop_module_t *self, const struct dt_dev_pixelpipe_t *pipe,
411 const struct dt_dev_pixelpipe_iop_t *piece, const void *const i, void *const o);
412
413 // introspection related data
415
416 // parameters hash
418
419 // blendop hash
420 // Ideally, this would be added to struct dt_develop_blend_params_t *blendop
421 // but since blendops are dumped to DB as a memory blob, we can't change their length
422 // without updating version (aka breaking backwards compatibility), and this minor
423 // stuff is not worth it.
425
427
429void dt_iop_load_modules_so(void);
431void dt_iop_unload_modules_so(void);
434int dt_iop_load_module(dt_iop_module_t *module, dt_iop_module_so_t *module_so, struct dt_develop_t *dev);
438void dt_iop_init_pipe(struct dt_iop_module_t *module, struct dt_dev_pixelpipe_t *pipe,
439 struct dt_dev_pixelpipe_iop_t *piece);
440void dt_iop_cleanup_pipe(struct dt_iop_module_t *module, struct dt_dev_pixelpipe_t *pipe,
441 struct dt_dev_pixelpipe_iop_t *piece);
444gboolean dt_iop_is_hidden(dt_iop_module_t *module);
445
447gboolean dt_iop_is_visible(dt_iop_module_t *module);
448
450static inline void dt_iop_gui_enter_critical_section(dt_iop_module_t *const module)
451 ACQUIRE(&module->gui_lock)
452{
453 dt_pthread_mutex_lock(&module->gui_lock);
454}
456static inline void dt_iop_gui_leave_critical_section(dt_iop_module_t *const module)
457 RELEASE(&module->gui_lock)
458{
459 dt_pthread_mutex_unlock(&module->gui_lock);
460}
470void dt_iop_gui_set_expanded(dt_iop_module_t *module, gboolean expanded, gboolean collapse_others);
473/* duplicate module and return new instance */
474dt_iop_module_t *dt_iop_gui_duplicate(dt_iop_module_t *base, gboolean copy_params);
475
477
490#define dt_iop_fmt_log(module, fmt, ...) \
491 dt_print(DT_DEBUG_PIPE, "[iop-fmt] %-14s " fmt "\n", (module)->op, ##__VA_ARGS__)
492
495 struct dt_develop_blend_params_t *blendop_params, struct dt_dev_pixelpipe_t *pipe,
496 struct dt_dev_pixelpipe_iop_t *piece);
497void dt_iop_commit_blend_params(dt_iop_module_t *module, const struct dt_develop_blend_params_t *blendop_params);
499void dt_iop_set_mask_mode(dt_iop_module_t *module, int mask_mode);
506
519void dt_iop_gui_init(dt_iop_module_t *module);
522
524void dt_iop_nap(int32_t usec);
525
528/* returns the iop-module found in list with the given name */
529dt_iop_module_t *dt_iop_get_module_from_list(GList *iop_list, const char *op);
530dt_iop_module_t *dt_iop_get_module(const char *op);
533dt_iop_module_t *dt_iop_get_module_by_op_priority(GList *modules, const char *operation, const int multi_priority);
536dt_iop_module_t *dt_iop_get_module_by_instance_name(GList *modules, const char *operation, const char *multi_name);
537
539gboolean dt_iop_is_first_instance(GList *modules, dt_iop_module_t *module);
540
541
543int dt_iop_get_module_flags(const char *op);
544
546const gchar *dt_iop_get_localized_name(const gchar *op);
547const gchar *dt_iop_get_localized_aliases(const gchar *op);
548
550void dt_iop_update_multi_priority(dt_iop_module_t *module, int new_priority);
551
553gboolean dt_iop_module_has_raster_mask(const dt_iop_module_t *module);
557gboolean dt_iop_module_needs_mask_history_ext(const dt_iop_module_t *module, gboolean *raster, gboolean *drawn, gboolean *parametric);
558
560gboolean dt_iop_is_raster_mask_used(dt_iop_module_t *module, int id);
561
582 const char *reason);
600 gboolean enable, gboolean write_history, const char *reason);
615 const char *reason);
616
617// initializes memory.darktable_iop_names
619
622
625
626// format modules description going in tooltips
627const char **dt_iop_set_description(dt_iop_module_t *module, const char *main_text,
628 const char *purpose, const char *input,
629 const char *process, const char *output);
630
632{
633 // Align so that DT_ALIGNED_ARRAY may be used within gui_data struct
634 module->gui_data = (dt_iop_gui_data_t*)dt_calloc_align(size);
635 dt_pthread_mutex_init(&module->gui_lock,NULL);
636 return module->gui_data;
637}
638#define IOP_GUI_ALLOC(module) \
639 (dt_iop_##module##_gui_data_t *)_iop_gui_alloc(self,sizeof(dt_iop_##module##_gui_data_t))
640
641#define IOP_GUI_FREE \
642 dt_pthread_mutex_destroy(&self->gui_lock); \
643 if(self->gui_data){ \
644 dt_free_align(self->gui_data); \
645 self->gui_data = NULL; \
646 } \
647 self->gui_data = NULL;
648
649/* bring up module rename dialog */
651
652/* dispatch post-value-changed GUI events within module and commit changes to history */
653void dt_iop_gui_changed(dt_iop_module_t *module, GtkWidget *widget, gpointer data);
654
655// update all bauhaus widgets in an iop module from their params fields
657
658// default callback to connect to value-changed signal for bauhaus widgets
659// it will automatically call dt_iop_changed for the right module.
661
662
683void dt_iop_compute_module_hash(dt_iop_module_t *module, GList *masks);
684
685// Use module fingerprints to determine if two instances are actually the same
687
688
713void dt_iop_set_cache_bypass(dt_iop_module_t *module, gboolean state);
714
719void dt_iop_set_cache_bypass_variant(dt_iop_module_t *module, int variant);
720
721// after writing data using copy_pixel_nontemporal, it is necessary to
722// ensure that the writes have completed before attempting reads from
723// a different core. This function produces the required memory
724// fence to ensure proper visibility
725static inline void dt_sfence()
726{
727#if defined(__x86_64__) || defined(__i386__)
728 _mm_sfence();
729#else
730 // the following generates an MFENCE instruction on x86/x64. We
731 // only really need SFENCE, which is less expensive, but none of the
732 // other memory orders generate *any* fence instructions on x64.
733 __atomic_thread_fence(__ATOMIC_SEQ_CST);
734#endif
735}
736
737// if the copy_pixel_nontemporal() writes were inside an OpenMP
738// parallel loop, the OpenMP parallelization will have performed a
739// memory fence before resuming single-threaded operation, so a
740// dt_sfence would be superfluous. But if compiled without OpenMP
741// parallelization, we should play it safe and emit a memory fence.
742// This function should be used right after a parallelized for loop,
743// where it will produce a barrier only if needed.
744#ifdef _OPENMP
745#define dt_omploop_sfence()
746#else
747#define dt_omploop_sfence() dt_sfence()
748#endif
749
750#ifdef __cplusplus
751}
752#endif
753
754// clang-format off
755// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
756// vim: shiftwidth=2 expandtab tabstop=2 cindent
757// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
758// 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:42
static int dt_pthread_mutex_unlock(dt_pthread_mutex_t *mutex) RELEASE(mutex) NO_THREAD_SAFETY_ANALYSIS
Definition dtpthread.h:384
static int dt_pthread_mutex_init(dt_pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)
Definition dtpthread.h:369
static int dt_pthread_mutex_lock(dt_pthread_mutex_t *mutex) ACQUIRE(mutex) NO_THREAD_SAFETY_ANALYSIS
Definition dtpthread.h:374
static gboolean enable(dt_image_t *image)
Definition highlights.c:653
dt_iop_module_t * dt_iop_get_module_from_list(GList *iop_list, const char *op)
Definition imageop.c:3017
dt_dev_request_colorpick_flags_t
Definition imageop.h:225
@ DT_REQUEST_COLORPICK_OFF
Definition imageop.h:226
@ DT_REQUEST_COLORPICK_MODULE
Definition imageop.h:227
dt_iop_module_t * dt_iop_get_module(const char *op)
Definition imageop.c:3034
void dt_iop_set_darktable_iop_table()
Definition imageop.c:3052
gboolean dt_iop_module_needs_mask_history_ext(const dt_iop_module_t *module, gboolean *raster, gboolean *drawn, gboolean *parametric)
Definition imageop.c:1676
void dt_iop_gui_cleanup_module(dt_iop_module_t *module)
Definition imageop.c:2036
uint32_t dt_dev_get_roi_filters(const struct dt_dev_pixelpipe_iop_t *piece, const dt_iop_roi_t *roi_in)
Get this piece's raw CFA filters descriptor, phase-corrected for its current crop.
void dt_iop_load_default_params(dt_iop_module_t *module)
Definition imageop.c:142
dt_iop_module_t * dt_iop_get_module_by_instance_name(GList *modules, const char *operation, const char *multi_name)
Definition imageop.c:3178
GtkWidget * dt_iop_gui_get_pluginui(dt_iop_module_t *module)
Definition imageop.c:2967
gboolean dt_iop_is_raster_mask_used(dt_iop_module_t *module, int id)
Definition imageop.c:3146
void dt_iop_compute_module_hash(dt_iop_module_t *module, GList *masks)
Definition imageop.c:1928
void dt_iop_add_remove_mask_indicator(dt_iop_module_t *module)
Definition imageop.c:2701
void dt_iop_reload_defaults(dt_iop_module_t *module)
Definition imageop.c:1278
static void dt_sfence()
Definition imageop.h:725
void dt_iop_gui_set_expander(dt_iop_module_t *module)
Definition imageop.c:2793
void dt_iop_throttled_history_update(gpointer data)
Definition imageop.c:3214
dt_iop_module_t * dt_iop_gui_get_next_visible_module(dt_iop_module_t *module)
Definition imageop.c:788
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:564
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:1567
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:746
gboolean dt_iop_is_first_instance(GList *modules, dt_iop_module_t *module)
Definition imageop.c:3196
void dt_iop_gui_init(dt_iop_module_t *module)
Definition imageop.c:1235
void dt_iop_cleanup_module(dt_iop_module_t *module)
Definition imageop.c:1578
gboolean dt_iop_module_has_raster_mask(const dt_iop_module_t *module)
Definition imageop.c:1665
void dt_iop_gui_update(dt_iop_module_t *module)
Definition imageop.c:2133
const gchar * dt_iop_get_localized_aliases(const gchar *op)
Definition imageop.c:3100
const gchar * dt_iop_get_localized_name(const gchar *op)
Definition imageop.c:3078
void dt_bauhaus_update_module(dt_iop_module_t *self)
Definition imageop.c:3252
void dt_iop_set_cache_bypass_variant(dt_iop_module_t *module, int variant)
Definition imageop.c:3006
static gboolean dt_iop_colorspace_is_rgb(const dt_iop_colorspace_type_t cst)
Definition imageop.h:243
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:1951
void dt_iop_gui_reset(dt_iop_module_t *module)
Definition imageop.c:2153
gboolean dt_iop_module_needs_mask_history(const dt_iop_module_t *module)
Definition imageop.c:1699
void dt_iop_load_modules_so(void)
Definition imageop.c:1558
void dt_iop_nap(int32_t usec)
Definition imageop.c:2973
void dt_iop_default_init(dt_iop_module_t *module)
Definition imageop.c:321
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:3234
void dt_iop_gui_update_expanded(dt_iop_module_t *module)
Definition imageop.c:2398
void dt_iop_gui_update_header(dt_iop_module_t *module)
Definition imageop.c:1183
void dt_iop_gui_set_enable_button(dt_iop_module_t *module)
Definition imageop.c:1211
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:582
gboolean dt_iop_is_visible(dt_iop_module_t *module)
Definition imageop.c:1138
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:471
void dt_iop_request_focus(dt_iop_module_t *module)
Definition imageop.c:2221
dt_iop_module_t * dt_iop_gui_get_previous_visible_module(dt_iop_module_t *module)
Definition imageop.c:774
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:450
gboolean dt_iop_is_hidden(dt_iop_module_t *module)
Definition imageop.c:1133
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:3220
GtkWidget * dt_iop_gui_get_widget(dt_iop_module_t *module)
Definition imageop.c:2962
gboolean dt_iop_so_is_hidden(dt_iop_module_so_t *module)
Definition imageop.c:1118
dt_iop_flags_t
Definition imageop.h:192
@ IOP_FLAGS_HIDDEN
Definition imageop.h:200
@ IOP_FLAGS_INCLUDE_IN_STYLES
Definition imageop.h:196
@ IOP_FLAGS_INTERNAL_MASKS
Definition imageop.h:209
@ IOP_FLAGS_PREVIEW_NON_OPENCL
Definition imageop.h:203
@ IOP_FLAGS_DEPRECATED
Definition imageop.h:198
@ IOP_FLAGS_SUPPORTS_BLENDING
Definition imageop.h:197
@ IOP_FLAGS_TAKE_NO_INPUT
Definition imageop.h:206
@ IOP_FLAGS_ALLOW_TILING
Definition imageop.h:199
@ IOP_FLAGS_UNSAFE_COPY
Definition imageop.h:207
@ IOP_FLAGS_NONE
Definition imageop.h:193
@ IOP_FLAGS_ONE_INSTANCE
Definition imageop.h:202
@ IOP_FLAGS_NO_MASKS
Definition imageop.h:205
@ IOP_FLAGS_CPU_WRITES_OPENCL
Definition imageop.h:210
@ IOP_FLAGS_GUIDES_SPECIAL_DRAW
Definition imageop.h:208
@ IOP_FLAGS_TILING_FULL_ROI
Definition imageop.h:201
@ IOP_FLAGS_NO_HISTORY_STACK
Definition imageop.h:204
void dt_iop_global_data_t
Definition imageop.h:221
static void dt_iop_gui_leave_critical_section(dt_iop_module_t *const module) RELEASE(&module -> gui_lock)
Definition imageop.h:456
int dt_iop_get_module_flags(const char *op)
Definition imageop.c:3039
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:760
void dt_bauhaus_value_changed_default_callback(GtkWidget *widget)
Definition imageop.c:3305
dt_iop_module_t * dt_iop_get_colorout_module(void)
Definition imageop.c:3012
gboolean dt_iop_check_modules_equal(dt_iop_module_t *mod_1, dt_iop_module_t *mod_2)
Definition imageop.c:1856
void dt_iop_data_t
Definition imageop.h:220
dt_iop_colorspace_type_t
Definition imageop.h:232
@ IOP_CS_RAW
Definition imageop.h:234
@ IOP_CS_LCH
Definition imageop.h:237
@ IOP_CS_RGB_DISPLAY
Definition imageop.h:240
@ IOP_CS_JZCZHZ
Definition imageop.h:239
@ IOP_CS_RGB
Definition imageop.h:236
@ IOP_CS_HSL
Definition imageop.h:238
@ IOP_CS_LAB
Definition imageop.h:235
@ IOP_CS_NONE
Definition imageop.h:233
void dt_iop_gui_set_expanded(dt_iop_module_t *module, gboolean expanded, gboolean collapse_others)
Definition imageop.c:2381
dt_iop_group_t
Definition imageop.h:165
@ IOP_GROUP_LAST
Definition imageop.h:174
@ IOP_GROUP_EFFECTS
Definition imageop.h:172
@ IOP_GROUP_FILM
Definition imageop.h:168
@ IOP_GROUP_TECHNICAL
Definition imageop.h:173
@ IOP_GROUP_COLOR
Definition imageop.h:169
@ IOP_GROUP_REPAIR
Definition imageop.h:170
@ IOP_GROUP_SHARPNESS
Definition imageop.h:171
@ IOP_GROUP_TONES
Definition imageop.h:167
@ IOP_GROUP_NONE
Definition imageop.h:166
void dt_iop_set_cache_bypass(dt_iop_module_t *module, gboolean state)
Definition imageop.c:2989
gboolean dt_iop_get_cache_bypass(dt_iop_module_t *module)
Definition imageop.c:2984
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:767
void dt_iop_set_mask_mode(dt_iop_module_t *module, int mask_mode)
Definition imageop.c:1645
void dt_iop_gui_rename_module(dt_iop_module_t *module)
Definition imageop.c:959
dt_iop_module_t * dt_iop_gui_duplicate(dt_iop_module_t *base, gboolean copy_params)
Definition imageop.c:802
gboolean dt_iop_gui_module_is_visible(dt_iop_module_t *module)
Definition imageop.c:740
dt_iop_module_t * dt_iop_get_module_by_op_priority(GList *modules, const char *operation, const int multi_priority)
Definition imageop.c:3160
static dt_iop_gui_data_t * _iop_gui_alloc(dt_iop_module_t *module, size_t size)
Definition imageop.h:631
void dt_iop_update_multi_priority(dt_iop_module_t *module, int new_priority)
Definition imageop.c:3122
dt_iop_tags_t
Definition imageop.h:179
@ IOP_TAG_DECORATION
Definition imageop.h:182
@ IOP_TAG_CLIPPING
Definition imageop.h:183
@ IOP_TAG_DISTORT
Definition imageop.h:181
@ IOP_TAG_NONE
Definition imageop.h:180
void dt_iop_unload_modules_so(void)
Definition imageop.c:1627
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:260
dt_gui_module_t common_fields
Definition imageop.h:252
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:268
dt_iop_global_data_t * data
Definition imageop.h:263
gboolean have_introspection
Definition imageop.h:272
dt_dev_request_colorpick_flags_t request_color_pick
Definition imageop.h:294
GtkDarktableToggleButton * off
Definition imageop.h:376
int32_t hide_enable_button
Definition imageop.h:292
gpointer blend_data
Definition imageop.h:355
struct dt_iop_module_t * source
Definition imageop.h:369
dt_iop_params_t * default_params
Definition imageop.h:344
GHashTable * masks
Definition imageop.h:365
struct dt_develop_blend_params_t * blend_params
Definition imageop.h:353
dt_aligned_pixel_t picked_output_color_min
Definition imageop.h:311
uint64_t hash
Definition imageop.h:417
GtkWidget * widget
Definition imageop.h:374
char multi_name[128]
Definition imageop.h:400
dt_gui_module_t common_fields
Definition imageop.h:278
struct dt_develop_t * dev
Definition imageop.h:333
GtkWidget * mask_indicator
Definition imageop.h:380
dt_iop_gui_data_t * gui_data
Definition imageop.h:348
uint64_t blendop_hash
Definition imageop.h:424
gboolean default_enabled
Definition imageop.h:340
GModule *dt_dev_operation_t op
Definition imageop.h:286
dt_dev_request_flags_t request_histogram
Definition imageop.h:296
gboolean have_introspection
Definition imageop.h:414
GtkWidget * guides_toggle
Definition imageop.h:392
GtkWidget * fusion_slider
Definition imageop.h:389
gboolean expanded
Definition imageop.h:383
GtkWidget * multimenu_button
Definition imageop.h:405
gboolean multi_show_close
Definition imageop.h:401
dt_dev_histogram_stats_t histogram_stats
Definition imageop.h:315
dt_aligned_pixel_t picked_output_color_max
Definition imageop.h:311
int32_t instance
Definition imageop.h:288
gboolean multi_show_up
Definition imageop.h:402
gboolean bypass_cache
Definition imageop.h:300
struct dt_iop_module_t::@29 raster_mask
GtkWidget * presets_button
Definition imageop.h:387
uint32_t histogram_max[4]
Definition imageop.h:317
dt_iop_global_data_t * global_data
Definition imageop.h:351
gboolean multi_show_new
Definition imageop.h:404
gboolean multi_show_down
Definition imageop.h:403
gboolean workflow_enabled
Definition imageop.h:342
dt_aligned_pixel_t picked_output_color
Definition imageop.h:311
gboolean enabled
Definition imageop.h:335
GtkWidget * reset_button
Definition imageop.h:385
dt_iop_module_so_t * so
Definition imageop.h:396
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:410
GtkWidget * expander
Definition imageop.h:382
dt_aligned_pixel_t picked_color_min
Definition imageop.h:309
int request_mask_display
Definition imageop.h:298
dt_pthread_mutex_t gui_lock
Definition imageop.h:349
dt_aligned_pixel_t picked_color_max
Definition imageop.h:309
int histogram_middle_grey
Definition imageop.h:324
GHashTable * users
Definition imageop.h:361
struct dt_develop_blend_params_t * default_blendop_params
Definition imageop.h:353
GtkWidget * header
Definition imageop.h:378
int32_t params_size
Definition imageop.h:346
uint32_t * histogram
Definition imageop.h:313
dt_iop_colorspace_type_t histogram_cst
Definition imageop.h:322
guint timeout_handle
Definition imageop.h:408
dt_aligned_pixel_t picked_color
Definition imageop.h:309
GtkWidget * guides_combo
Definition imageop.h:393
int bypass_cache_variant
Definition imageop.h:307
dt_iop_params_t * params
Definition imageop.h:344
Region of interest passed through the pixelpipe.
Definition imageop.h:72
double scale
Definition imageop.h:74