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;
272 gboolean bypass_cache;
278 uint32_t *histogram;
282 uint32_t histogram_max[4];
291 // FIXME: this should disappear from there.
292 // To access the develop object from backend (pipeline threads), we already have pipe->dev
293 // referenced in the pipeline object.
294 // To access the develop object from frontend (GUI), we have the global darktable.develop reference.
295 // Splitting like this between frontend/backend makes things clear and legible.
296 // This internal reference can be either, and used for writes and reads alike,
297 // which is impossible to track across the program.
300 gboolean enabled;
306
311 int32_t params_size;
314 dt_pthread_mutex_t gui_lock;
320 gpointer blend_data;
321 struct {
322 struct {
326 GHashTable *users;
330 GHashTable *masks;
331 } source;
332 struct {
335 int id;
336 } sink;
348 gboolean expanded;
355
359
362
364 int multi_priority; // user may change this
365 char multi_name[128]; // user may change this name
371
374
375 int (*process_plain)(struct dt_iop_module_t *self, const struct dt_dev_pixelpipe_t *pipe,
376 const struct dt_dev_pixelpipe_iop_t *piece, const void *const i, void *const o);
377
378 // introspection related data
380
381 // parameters hash
383
384 // blendop hash
385 // Ideally, this would be added to struct dt_develop_blend_params_t *blendop
386 // but since blendops are dumped to DB as a memory blob, we can't change their length
387 // without updating version (aka breaking backwards compatibility), and this minor
388 // stuff is not worth it.
390
392
394void dt_iop_load_modules_so(void);
396void dt_iop_unload_modules_so(void);
399int dt_iop_load_module(dt_iop_module_t *module, dt_iop_module_so_t *module_so, struct dt_develop_t *dev);
403void dt_iop_init_pipe(struct dt_iop_module_t *module, struct dt_dev_pixelpipe_t *pipe,
404 struct dt_dev_pixelpipe_iop_t *piece);
405void dt_iop_cleanup_pipe(struct dt_iop_module_t *module, struct dt_dev_pixelpipe_t *pipe,
406 struct dt_dev_pixelpipe_iop_t *piece);
409gboolean dt_iop_is_hidden(dt_iop_module_t *module);
410
412gboolean dt_iop_is_visible(dt_iop_module_t *module);
413
415static inline void dt_iop_gui_enter_critical_section(dt_iop_module_t *const module)
416 ACQUIRE(&module->gui_lock)
417{
418 dt_pthread_mutex_lock(&module->gui_lock);
419}
421static inline void dt_iop_gui_leave_critical_section(dt_iop_module_t *const module)
422 RELEASE(&module->gui_lock)
423{
424 dt_pthread_mutex_unlock(&module->gui_lock);
425}
435void dt_iop_gui_set_expanded(dt_iop_module_t *module, gboolean expanded, gboolean collapse_others);
438/* duplicate module and return new instance */
439dt_iop_module_t *dt_iop_gui_duplicate(dt_iop_module_t *base, gboolean copy_params);
440
442
445 struct dt_develop_blend_params_t *blendop_params, struct dt_dev_pixelpipe_t *pipe,
446 struct dt_dev_pixelpipe_iop_t *piece);
447void dt_iop_commit_blend_params(dt_iop_module_t *module, const struct dt_develop_blend_params_t *blendop_params);
449void dt_iop_set_mask_mode(dt_iop_module_t *module, int mask_mode);
456
469void dt_iop_gui_init(dt_iop_module_t *module);
472
474void dt_iop_nap(int32_t usec);
475
478/* returns the iop-module found in list with the given name */
479dt_iop_module_t *dt_iop_get_module_from_list(GList *iop_list, const char *op);
480dt_iop_module_t *dt_iop_get_module(const char *op);
483dt_iop_module_t *dt_iop_get_module_by_op_priority(GList *modules, const char *operation, const int multi_priority);
486dt_iop_module_t *dt_iop_get_module_by_instance_name(GList *modules, const char *operation, const char *multi_name);
487
489gboolean dt_iop_is_first_instance(GList *modules, dt_iop_module_t *module);
490
491
493int dt_iop_get_module_flags(const char *op);
494
496const gchar *dt_iop_get_localized_name(const gchar *op);
497const gchar *dt_iop_get_localized_aliases(const gchar *op);
498
500void dt_iop_update_multi_priority(dt_iop_module_t *module, int new_priority);
501
503gboolean dt_iop_module_has_raster_mask(const dt_iop_module_t *module);
506
508gboolean dt_iop_is_raster_mask_used(dt_iop_module_t *module, int id);
509
530 const char *reason);
548 gboolean enable, gboolean write_history, const char *reason);
563 const char *reason);
564
565// initializes memory.darktable_iop_names
567
570
573
574// format modules description going in tooltips
575const char **dt_iop_set_description(dt_iop_module_t *module, const char *main_text,
576 const char *purpose, const char *input,
577 const char *process, const char *output);
578
580{
581 // Align so that DT_ALIGNED_ARRAY may be used within gui_data struct
582 module->gui_data = (dt_iop_gui_data_t*)dt_calloc_align(size);
583 dt_pthread_mutex_init(&module->gui_lock,NULL);
584 return module->gui_data;
585}
586#define IOP_GUI_ALLOC(module) \
587 (dt_iop_##module##_gui_data_t *)_iop_gui_alloc(self,sizeof(dt_iop_##module##_gui_data_t))
588
589#define IOP_GUI_FREE \
590 dt_pthread_mutex_destroy(&self->gui_lock); \
591 if(self->gui_data){ \
592 dt_free_align(self->gui_data); \
593 self->gui_data = NULL; \
594 } \
595 self->gui_data = NULL;
596
597/* bring up module rename dialog */
599
600/* dispatch post-value-changed GUI events within module and commit changes to history */
601void dt_iop_gui_changed(dt_iop_module_t *module, GtkWidget *widget, gpointer data);
602
603// update all bauhaus widgets in an iop module from their params fields
605
606// default callback to connect to value-changed signal for bauhaus widgets
607// it will automatically call dt_iop_changed for the right module.
609
610
631void dt_iop_compute_module_hash(dt_iop_module_t *module, GList *masks);
632
633// Use module fingerprints to determine if two instances are actually the same
635
636
661void dt_iop_set_cache_bypass(dt_iop_module_t *module, gboolean state);
662
663// after writing data using copy_pixel_nontemporal, it is necessary to
664// ensure that the writes have completed before attempting reads from
665// a different core. This function produces the required memory
666// fence to ensure proper visibility
667static inline void dt_sfence()
668{
669#if defined(__x86_64__) || defined(__i386__)
670 _mm_sfence();
671#else
672 // the following generates an MFENCE instruction on x86/x64. We
673 // only really need SFENCE, which is less expensive, but none of the
674 // other memory orders generate *any* fence instructions on x64.
675 __atomic_thread_fence(__ATOMIC_SEQ_CST);
676#endif
677}
678
679// if the copy_pixel_nontemporal() writes were inside an OpenMP
680// parallel loop, the OpenMP parallelization will have performed a
681// memory fence before resuming single-threaded operation, so a
682// dt_sfence would be superfluous. But if compiled without OpenMP
683// parallelization, we should play it safe and emit a memory fence.
684// This function should be used right after a parallelized for loop,
685// where it will produce a barrier only if needed.
686#ifdef _OPENMP
687#define dt_omploop_sfence()
688#else
689#define dt_omploop_sfence() dt_sfence()
690#endif
691
692#ifdef __cplusplus
693}
694#endif
695
696// clang-format off
697// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
698// vim: shiftwidth=2 expandtab tabstop=2 cindent
699// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
700// 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:3325
dt_iop_colorspace_type_t
Definition color_conversion.h:30
@ ACQUIRE
Definition colormapping.c:94
const float i
Definition colorspaces_inline_conversions.h:440
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)
Definition highlights.c:2827
dt_iop_module_t * dt_iop_get_module_from_list(GList *iop_list, const char *op)
Definition imageop.c:2583
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:2600
void dt_iop_set_darktable_iop_table()
Definition imageop.c:2618
void dt_iop_gui_cleanup_module(dt_iop_module_t *module)
Definition imageop.c:1807
void dt_iop_load_default_params(dt_iop_module_t *module)
Definition imageop.c:129
dt_iop_module_t * dt_iop_get_module_by_instance_name(GList *modules, const char *operation, const char *multi_name)
Definition imageop.c:2744
GtkWidget * dt_iop_gui_get_pluginui(dt_iop_module_t *module)
Definition imageop.c:2538
gboolean dt_iop_is_raster_mask_used(dt_iop_module_t *module, int id)
Definition imageop.c:2712
void dt_iop_compute_module_hash(dt_iop_module_t *module, GList *masks)
Definition imageop.c:1720
void dt_iop_add_remove_mask_indicator(dt_iop_module_t *module)
Definition imageop.c:2294
void dt_iop_reload_defaults(dt_iop_module_t *module)
Definition imageop.c:1118
static void dt_sfence()
Definition imageop.h:667
void dt_iop_gui_set_expander(dt_iop_module_t *module)
Definition imageop.c:2384
void dt_iop_throttled_history_update(gpointer data)
Definition imageop.c:2780
dt_iop_module_t * dt_iop_gui_get_next_visible_module(dt_iop_module_t *module)
Definition imageop.c:691
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:526
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:1399
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:649
gboolean dt_iop_is_first_instance(GList *modules, dt_iop_module_t *module)
Definition imageop.c:2762
void dt_iop_gui_init(dt_iop_module_t *module)
Definition imageop.c:1079
void dt_iop_cleanup_module(dt_iop_module_t *module)
Definition imageop.c:1410
gboolean dt_iop_module_has_raster_mask(const dt_iop_module_t *module)
Definition imageop.c:1468
void dt_iop_gui_update(dt_iop_module_t *module)
Definition imageop.c:1854
const gchar * dt_iop_get_localized_aliases(const gchar *op)
Definition imageop.c:2666
const gchar * dt_iop_get_localized_name(const gchar *op)
Definition imageop.c:2644
void dt_bauhaus_update_module(dt_iop_module_t *self)
Definition imageop.c:2815
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:1743
void dt_iop_gui_reset(dt_iop_module_t *module)
Definition imageop.c:1874
gboolean dt_iop_module_needs_mask_history(const dt_iop_module_t *module)
Definition imageop.c:1479
void dt_iop_load_modules_so(void)
Definition imageop.c:1390
void dt_iop_nap(int32_t usec)
Definition imageop.c:2544
void dt_iop_default_init(dt_iop_module_t *module)
Definition imageop.c:308
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:2800
void dt_iop_gui_update_expanded(dt_iop_module_t *module)
Definition imageop.c:2082
void dt_iop_gui_update_header(dt_iop_module_t *module)
Definition imageop.c:1027
void dt_iop_gui_set_enable_button(dt_iop_module_t *module)
Definition imageop.c:1055
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:533
gboolean dt_iop_is_visible(dt_iop_module_t *module)
Definition imageop.c:982
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:446
void dt_iop_request_focus(dt_iop_module_t *module)
Definition imageop.c:1924
dt_iop_module_t * dt_iop_gui_get_previous_visible_module(dt_iop_module_t *module)
Definition imageop.c:677
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:415
gboolean dt_iop_is_hidden(dt_iop_module_t *module)
Definition imageop.c:977
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:2786
GtkWidget * dt_iop_gui_get_widget(dt_iop_module_t *module)
Definition imageop.c:2533
gboolean dt_iop_so_is_hidden(dt_iop_module_so_t *module)
Definition imageop.c:962
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:421
int dt_iop_get_module_flags(const char *op)
Definition imageop.c:2605
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:663
void dt_bauhaus_value_changed_default_callback(GtkWidget *widget)
Definition imageop.c:2868
dt_iop_module_t * dt_iop_get_colorout_module(void)
Definition imageop.c:2578
gboolean dt_iop_check_modules_equal(dt_iop_module_t *mod_1, dt_iop_module_t *mod_2)
Definition imageop.c:1648
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:2065
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:2560
gboolean dt_iop_get_cache_bypass(dt_iop_module_t *module)
Definition imageop.c:2555
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:670
void dt_iop_set_mask_mode(dt_iop_module_t *module, int mask_mode)
Definition imageop.c:1454
void dt_iop_gui_rename_module(dt_iop_module_t *module)
Definition imageop.c:839
dt_iop_module_t * dt_iop_gui_duplicate(dt_iop_module_t *base, gboolean copy_params)
Definition imageop.c:705
gboolean dt_iop_gui_module_is_visible(dt_iop_module_t *module)
Definition imageop.c:643
dt_iop_module_t * dt_iop_get_module_by_op_priority(GList *modules, const char *operation, const int multi_priority)
Definition imageop.c:2726
static dt_iop_gui_data_t * _iop_gui_alloc(dt_iop_module_t *module, size_t size)
Definition imageop.h:579
void dt_iop_update_multi_priority(dt_iop_module_t *module, int new_priority)
Definition imageop.c:2688
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:1436
size_t size
Definition mipmap_cache.c:3
float dt_aligned_pixel_t[4]
Definition noiseprofile.c:28
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]
Definition src/develop/noise_generator.h:72
unsigned __int64 uint64_t
Definition strptime.c:75
Definition togglebutton.h:43
Definition pixelpipe.h:65
Definition pixelpipe_hb.h:96
struct dt_iop_module_t *void * data
Definition pixelpipe_hb.h:97
Definition pixelpipe_hb.h:218
Definition blend.h:198
Definition develop.h:159
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:184
int dummy
Definition imageop.h:187
Definition imageop.h:220
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
Definition imageop.h:246
dt_dev_request_colorpick_flags_t request_color_pick
Definition imageop.h:264
GtkDarktableToggleButton * off
Definition imageop.h:341
int32_t hide_enable_button
Definition imageop.h:262
gpointer blend_data
Definition imageop.h:320
struct dt_iop_module_t * source
Definition imageop.h:334
dt_iop_params_t * default_params
Definition imageop.h:309
GHashTable * masks
Definition imageop.h:330
struct dt_develop_blend_params_t * blend_params
Definition imageop.h:318
dt_aligned_pixel_t picked_output_color_min
Definition imageop.h:276
uint64_t hash
Definition imageop.h:382
int32_t suppress_mask
Definition imageop.h:270
GtkWidget * widget
Definition imageop.h:339
int multi_priority
Definition imageop.h:364
char multi_name[128]
Definition imageop.h:365
dt_gui_module_t common_fields
Definition imageop.h:248
struct dt_develop_t * dev
Definition imageop.h:298
GtkWidget * mask_indicator
Definition imageop.h:345
dt_iop_gui_data_t * gui_data
Definition imageop.h:313
uint64_t blendop_hash
Definition imageop.h:389
gboolean default_enabled
Definition imageop.h:305
GModule *dt_dev_operation_t op
Definition imageop.h:256
dt_dev_request_flags_t request_histogram
Definition imageop.h:266
int iop_order
Definition imageop.h:260
gboolean have_introspection
Definition imageop.h:379
GtkWidget * guides_toggle
Definition imageop.h:357
GtkWidget * fusion_slider
Definition imageop.h:354
gboolean expanded
Definition imageop.h:348
GtkWidget * multimenu_button
Definition imageop.h:370
gboolean multi_show_close
Definition imageop.h:366
dt_dev_histogram_stats_t histogram_stats
Definition imageop.h:280
dt_aligned_pixel_t picked_output_color_max
Definition imageop.h:276
int32_t instance
Definition imageop.h:258
gboolean multi_show_up
Definition imageop.h:367
gboolean bypass_cache
Definition imageop.h:272
struct dt_iop_module_t::@29 raster_mask
GtkWidget * presets_button
Definition imageop.h:352
uint32_t histogram_max[4]
Definition imageop.h:282
dt_iop_global_data_t * global_data
Definition imageop.h:316
gboolean multi_show_new
Definition imageop.h:369
gboolean multi_show_down
Definition imageop.h:368
int id
Definition imageop.h:335
gboolean workflow_enabled
Definition imageop.h:307
dt_aligned_pixel_t picked_output_color
Definition imageop.h:276
gboolean enabled
Definition imageop.h:300
GtkWidget * reset_button
Definition imageop.h:350
dt_iop_module_so_t * so
Definition imageop.h:361
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:375
GtkWidget * expander
Definition imageop.h:347
dt_aligned_pixel_t picked_color_min
Definition imageop.h:274
int request_mask_display
Definition imageop.h:268
dt_pthread_mutex_t gui_lock
Definition imageop.h:314
dt_aligned_pixel_t picked_color_max
Definition imageop.h:274
int histogram_middle_grey
Definition imageop.h:289
GHashTable * users
Definition imageop.h:326
struct dt_develop_blend_params_t * default_blendop_params
Definition imageop.h:318
GtkWidget * header
Definition imageop.h:343
int32_t params_size
Definition imageop.h:311
uint32_t * histogram
Definition imageop.h:278
dt_iop_colorspace_type_t histogram_cst
Definition imageop.h:287
guint timeout_handle
Definition imageop.h:373
dt_aligned_pixel_t picked_color
Definition imageop.h:274
GtkWidget * guides_combo
Definition imageop.h:358
dt_iop_params_t * params
Definition imageop.h:309
Region of interest passed through the pixelpipe.
Definition imageop.h:72
int x
Definition imageop.h:73
double scale
Definition imageop.h:74
int width
Definition imageop.h:73
int height
Definition imageop.h:73
int y
Definition imageop.h:73