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#ifndef DT_DEVELOP_IMAGEOP_H
54#define DT_DEVELOP_IMAGEOP_H
55
56#include <gmodule.h>
57#include <gtk/gtk.h>
58#include <sched.h>
59#include <stddef.h>
60#include <stdint.h>
61
62#include "system/dtpthread.h"
63#include "common/logging.h"
64#include "system/mem_alloc.h"
65#include "system/simd.h"
66
69#include "common/opencl.h"
70
71#include "history/history.h" // dt_dev_operation_t, both structs' `op` member
72#include "pixel/format.h"
74
75#ifdef __cplusplus
76extern "C" {
77#endif
78
79struct dt_develop_t;
85/* develop/geometry/geometry.h -- named by the geometry_record() vtable entry. Declared HERE,
86 * not only in iop_api.h: that header's forward declarations live inside its FULL_API_H block,
87 * which the struct-body expansion of the X-macro does not compile, so the first mention would
88 * otherwise be inside a function prototype -- C scopes that to the prototype and the resulting
89 * type is distinct from every other declaration of the same name. */
91
103
120float dt_dev_get_module_scale(const struct dt_dev_pixelpipe_t *pipe, const dt_iop_roi_t *roi_in);
121
150uint32_t dt_dev_get_roi_filters(const struct dt_dev_pixelpipe_iop_t *piece, const dt_iop_roi_t *roi_in);
151
165
167typedef enum dt_iop_tags_t
168{
173
174 // might be some other filters togglable by user?
175 // IOP_TAG_SLOW = 1<<3,
176 // IOP_TAG_DETAIL_FIX = 1<<3,
178
180typedef enum dt_iop_flags_t
181{
183
186 IOP_FLAGS_SUPPORTS_BLENDING = 1 << 1, // Does provide blending modes
188 IOP_FLAGS_ALLOW_TILING = 1 << 3, // Does allow tile-wise processing (valid for CPU and GPU processing)
189 IOP_FLAGS_HIDDEN = 1 << 4, // Hide the iop from userinterface
190 IOP_FLAGS_TILING_FULL_ROI = 1 << 5, // Tiling code has to expect arbitrary roi's for this module (incl. flipping, mirroring etc.)
191 IOP_FLAGS_ONE_INSTANCE = 1 << 6, // The module doesn't support multiple instances
192 IOP_FLAGS_PREVIEW_NON_OPENCL = 1 << 7, // Preview pixelpipe of this module must not run on GPU but always on CPU
193 IOP_FLAGS_NO_HISTORY_STACK = 1 << 8, // This iop will never show up in the history stack
194 IOP_FLAGS_NO_MASKS = 1 << 9, // The module doesn't support masks (used with SUPPORT_BLENDING)
195 IOP_FLAGS_TAKE_NO_INPUT = 1 << 10, // The module doesn't use input
196 IOP_FLAGS_UNSAFE_COPY = 1 << 11, // Unsafe to copy as part of history
197 IOP_FLAGS_GUIDES_SPECIAL_DRAW = 1 << 12, // handle the grid drawing directly
198 IOP_FLAGS_INTERNAL_MASKS = 1 << 13, // Module uses masks internally, outside of blendops. This advertises the need to commit them to history unconditionnaly.
199 IOP_FLAGS_CPU_WRITES_OPENCL = 1 << 14 // Special case where the process() CPU path inits OpenCL vRAM output cache too
201
202typedef struct dt_iop_gui_data_t
203{
204 // "base type" for all dt_iop_XXXX_gui_data_t types used by iops
205 // to avoid compiler error about different sizes of empty structs between C and C++, we need at least one member
206 int dummy;
208
209typedef void dt_iop_data_t;
211
214{
216 DT_REQUEST_COLORPICK_MODULE = 1 // requested by module (should take precedence)
218
219/* dt_iop_colorspace_type_t moved to pixel/format.h: it tags a pixel buffer's colour
220 * space, which is a layer-2 concept, and colorprofiles/iop_profile.h needs it. */
221
222
226typedef struct dt_iop_module_so_t
227{
228 // Needs to stay on top for casting
230
231#define INCLUDE_API_FROM_MODULE_H
232#include "iop/iop_api.h"
233
240// dt_iop_gui_data_t *gui_data;
243 int (*process_plain)(struct dt_iop_module_t *self, const struct dt_dev_pixelpipe_t *pipe,
244 const struct dt_dev_pixelpipe_iop_t *piece, const void *const i, void *const o);
245
246 // introspection related data
249
250typedef struct dt_iop_module_t
251{
252 // Needs to stay on top for casting
254
255#define INCLUDE_API_FROM_MODULE_H
256#include "iop/iop_api.h"
257
266 int32_t instance;
278 gboolean bypass_cache;
291 uint32_t *histogram;
295 uint32_t histogram_max[4];
304 // FIXME: this should disappear from there.
305 // To access the develop object from backend (pipeline threads), we already have pipe->dev
306 // referenced in the pipeline object.
307 // To access the develop object from frontend (GUI), we have the global darktable.develop reference.
308 // Splitting like this between frontend/backend makes things clear and legible.
309 // This internal reference can be either, and used for writes and reads alike,
310 // which is impossible to track across the program.
313 gboolean enabled;
319
335 int32_t params_size;
338
347
350 struct {
351 struct {
358 GHashTable *users;
362 GHashTable *masks;
363 } source;
364 struct {
367 int id;
368 } sink;
370
371
377
382 int multi_priority; // user may change this
383
387 char multi_name[128]; // user may change this name
388
389
390 int (*process_plain)(struct dt_iop_module_t *self, const struct dt_dev_pixelpipe_t *pipe,
391 const struct dt_dev_pixelpipe_iop_t *piece, const void *const i, void *const o);
392
393 // introspection related data
395
396 // parameters hash
398
399 // blendop hash
400 // Ideally, this would be added to struct dt_develop_blend_params_t *blendop
401 // but since blendops are dumped to DB as a memory blob, we can't change their length
402 // without updating version (aka breaking backwards compatibility), and this minor
403 // stuff is not worth it.
405
407
422
424extern const int dt_iop_static_modules_count;
425
427void dt_iop_load_modules_so(void);
429void dt_iop_unload_modules_so(void);
432int dt_iop_load_module(dt_iop_module_t *module, dt_iop_module_so_t *module_so, struct dt_develop_t *dev);
436void dt_iop_init_pipe(struct dt_iop_module_t *module, struct dt_dev_pixelpipe_t *pipe,
437 struct dt_dev_pixelpipe_iop_t *piece);
438void dt_iop_cleanup_pipe(struct dt_iop_module_t *module, struct dt_dev_pixelpipe_t *pipe,
439 struct dt_dev_pixelpipe_iop_t *piece);
442gboolean dt_iop_is_hidden(dt_iop_module_t *module);
443
451
456
460
462gboolean dt_iop_is_visible(dt_iop_module_t *module);
463
480
483
488gboolean dt_iop_gui_owns_widget(const dt_iop_module_t *module, const GtkWidget *target);
489
499void dt_iop_gui_set_expanded(dt_iop_module_t *module, gboolean expanded, gboolean collapse_others);
502/* duplicate module and return new instance */
519dt_iop_module_t *dt_iop_gui_duplicate(dt_iop_module_t *base, gboolean copy_params);
520
522
535#define dt_iop_fmt_log(module, fmt, ...) \
536 dt_print(DT_DEBUG_PIPE, "[iop-fmt] %-14s " fmt "\n", (module)->op, ##__VA_ARGS__)
537
552 struct dt_develop_blend_params_t *blendop_params, struct dt_dev_pixelpipe_t *pipe,
553 struct dt_dev_pixelpipe_iop_t *piece);
554void dt_iop_commit_blend_params(dt_iop_module_t *module, const struct dt_develop_blend_params_t *blendop_params);
556void dt_iop_set_mask_mode(dt_iop_module_t *module, int mask_mode);
563
588void dt_iop_gui_init(dt_iop_module_t *module);
591
593void dt_iop_nap(int32_t usec);
594
597/* returns the iop-module found in list with the given name */
598dt_iop_module_t *dt_iop_get_module_from_list(GList *iop_list, const char *op);
599dt_iop_module_t *dt_iop_get_module(const char *op);
602dt_iop_module_t *dt_iop_get_module_by_op_priority(GList *modules, const char *operation, const int multi_priority);
605dt_iop_module_t *dt_iop_get_module_by_instance_name(GList *modules, const char *operation, const char *multi_name);
606
608gboolean dt_iop_is_first_instance(GList *modules, dt_iop_module_t *module);
609
610
612int dt_iop_get_module_flags(const char *op);
613
615const gchar *dt_iop_get_localized_name(const gchar *op);
616const gchar *dt_iop_get_localized_aliases(const gchar *op);
617
619void dt_iop_update_multi_priority(dt_iop_module_t *module, int new_priority);
620
622gboolean dt_iop_module_has_raster_mask(const dt_iop_module_t *module);
626gboolean dt_iop_module_needs_mask_history_ext(const dt_iop_module_t *module, gboolean *raster, gboolean *drawn, gboolean *parametric);
627
629gboolean dt_iop_is_raster_mask_used(dt_iop_module_t *module, int id);
630
651 const char *reason);
669 gboolean enable, gboolean write_history, const char *reason);
684 const char *reason);
685
686// initializes memory.darktable_iop_names
688
691
692// format modules description going in tooltips
693const char **dt_iop_set_description(dt_iop_module_t *module, const char *main_text,
694 const char *purpose, const char *input,
695 const char *process, const char *output);
696
697/* _iop_gui_alloc and IOP_GUI_ALLOC/IOP_GUI_FREE live in imageop_gui.h, with the
698 * dt_iop_module_gui_t they operate on. */
699
700/* bring up module rename dialog */
702
703/* dispatch post-value-changed GUI events within module and commit changes to history */
704void dt_iop_gui_changed(dt_iop_module_t *module, GtkWidget *widget, gpointer data);
705
706// update all bauhaus widgets in an iop module from their params fields
708
709// default callback to connect to value-changed signal for bauhaus widgets
710// it will automatically call dt_iop_changed for the right module.
712
713
734void dt_iop_compute_module_hash(dt_iop_module_t *module, GList *masks);
735
736// Use module fingerprints to determine if two instances are actually the same
738
739
764void dt_iop_set_cache_bypass(dt_iop_module_t *module, gboolean state);
765
770void dt_iop_set_cache_bypass_variant(dt_iop_module_t *module, int variant);
771
776GList *dt_iop_get_modules_so(void);
777
778
779/* Defaults an IOP's input_format()/output_format()/blend_colorspace() callbacks can delegate
780 * to. Defined in develop/format.c. They were declared in pixel/format.h, which is layer 2 and
781 * had to forward-declare dt_iop_module_t and dt_dev_pixelpipe_t just to say this -- so they
782 * moved here, to the module API every caller already includes. */
783void default_input_format(struct dt_iop_module_t *self, struct dt_dev_pixelpipe_t *pipe,
784 struct dt_dev_pixelpipe_iop_t *piece, struct dt_iop_buffer_dsc_t *dsc);
785
786void default_output_format(struct dt_iop_module_t *self, struct dt_dev_pixelpipe_t *pipe,
787 struct dt_dev_pixelpipe_iop_t *piece, struct dt_iop_buffer_dsc_t *dsc);
788
790 const struct dt_dev_pixelpipe_iop_t *piece);
791
792#ifdef __cplusplus
793}
794#endif
795
796
797#endif // DT_DEVELOP_IMAGEOP_H
798
799// clang-format off
800// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
801// vim: shiftwidth=2 expandtab tabstop=2 cindent
802// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
803// 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:3179
typedef void((*dt_cache_allocate_t)(void *userdata, dt_cache_entry_t *entry))
dt_iop_colorspace_type_t
struct _GtkWidget GtkWidget
GtkWidget, opaque, spelled exactly as GTK spells it.
Definition colorspaces.h:98
void dt_iop_params_t
Definition dev_history.h:43
static gboolean enable(const dt_image_t *image)
Definition highlights.c:879
char dt_dev_operation_t[20]
The string identifying an operation in the history stack ("exposure", "colorbalancergb",...
Definition history.h:50
dt_iop_module_t * dt_iop_get_module_from_list(GList *iop_list, const char *op)
Definition imageop.c:1697
dt_dev_request_colorpick_flags_t
Definition imageop.h:214
@ DT_REQUEST_COLORPICK_OFF
Definition imageop.h:215
@ DT_REQUEST_COLORPICK_MODULE
Definition imageop.h:216
void default_input_format(struct dt_iop_module_t *self, struct dt_dev_pixelpipe_t *pipe, struct dt_dev_pixelpipe_iop_t *piece, struct dt_iop_buffer_dsc_t *dsc)
dt_iop_module_t * dt_iop_get_module(const char *op)
Definition imageop.c:1714
void dt_iop_set_darktable_iop_table()
Definition imageop.c:1732
gboolean dt_iop_module_needs_mask_history_ext(const dt_iop_module_t *module, gboolean *raster, gboolean *drawn, gboolean *parametric)
Definition imageop.c:1205
void dt_iop_gui_cleanup_module(dt_iop_module_t *module)
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.
int default_blend_colorspace(struct dt_iop_module_t *self, struct dt_dev_pixelpipe_t *pipe, const struct dt_dev_pixelpipe_iop_t *piece)
void dt_iop_load_default_params(dt_iop_module_t *module)
Definition imageop.c:145
dt_iop_module_t * dt_iop_get_module_by_instance_name(GList *modules, const char *operation, const char *multi_name)
Definition imageop.c:1857
GtkWidget * dt_iop_gui_get_pluginui(dt_iop_module_t *module)
gboolean dt_iop_is_raster_mask_used(dt_iop_module_t *module, int id)
Definition imageop.c:1825
void dt_iop_compute_module_hash(dt_iop_module_t *module, GList *masks)
Definition imageop.c:1461
void dt_iop_add_remove_mask_indicator(dt_iop_module_t *module)
void dt_iop_reload_defaults(dt_iop_module_t *module)
Definition imageop.c:792
gboolean dt_iop_module_supports_drawn_mask(dt_iop_module_t *iop)
Definition imageop.c:785
void dt_iop_gui_set_expander(dt_iop_module_t *module)
dt_iop_module_t * dt_iop_gui_get_next_visible_module(dt_iop_module_t *module)
void dt_iop_init_pipe(struct dt_iop_module_t *module, struct dt_dev_pixelpipe_t *pipe, struct dt_dev_pixelpipe_iop_t *piece)
Build one pixelpipe node's module-owned storage.
Definition imageop.c:604
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:1102
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.
void default_output_format(struct dt_iop_module_t *self, struct dt_dev_pixelpipe_t *pipe, struct dt_dev_pixelpipe_iop_t *piece, struct dt_iop_buffer_dsc_t *dsc)
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:693
gboolean dt_iop_is_first_instance(GList *modules, dt_iop_module_t *module)
Definition imageop.c:1875
GList * dt_iop_get_modules_so(void)
Definition darktable.c:533
void dt_iop_gui_init(dt_iop_module_t *module)
void dt_iop_cleanup_module(dt_iop_module_t *module)
Definition imageop.c:1113
const dt_iop_module_static_entry_t dt_iop_static_modules[]
gboolean dt_iop_module_has_raster_mask(const dt_iop_module_t *module)
Definition imageop.c:1194
void dt_iop_gui_update(dt_iop_module_t *module)
const gchar * dt_iop_get_localized_aliases(const gchar *op)
Definition imageop.c:1779
const gchar * dt_iop_get_localized_name(const gchar *op)
Definition imageop.c:1757
void dt_bauhaus_update_module(dt_iop_module_t *self)
void dt_iop_set_cache_bypass_variant(dt_iop_module_t *module, int variant)
Definition imageop.c:1686
const int dt_iop_static_modules_count
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)
Copy params into the pipeline piece, so the next render uses them.
Definition imageop.c:1565
void dt_iop_gui_leave_critical_section(dt_iop_module_t *const module)
Release what dt_iop_gui_enter_critical_section() took. Also a no-op headless.
void dt_iop_gui_reset(dt_iop_module_t *module)
Definition imageop.c:1646
gboolean dt_iop_module_needs_mask_history(const dt_iop_module_t *module)
Definition imageop.c:1228
void dt_iop_load_modules_so(void)
Definition imageop.c:1073
void dt_iop_nap(int32_t usec)
Definition imageop.c:1653
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)
void dt_iop_gui_update_expanded(dt_iop_module_t *module)
void dt_iop_gui_update_header(dt_iop_module_t *module)
void dt_iop_gui_set_enable_button(dt_iop_module_t *module)
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:641
gboolean dt_iop_is_visible(dt_iop_module_t *module)
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:510
void dt_iop_request_focus(dt_iop_module_t *module)
Move darkroom focus to module, or clear it with NULL.
dt_iop_module_t * dt_iop_gui_get_previous_visible_module(dt_iop_module_t *module)
dt_iop_module_header_icons_t
Definition imageop.h:93
@ IOP_MODULE_ICON
Definition imageop.h:95
@ IOP_MODULE_PRESETS
Definition imageop.h:100
@ IOP_MODULE_RESET
Definition imageop.h:99
@ IOP_MODULE_LABEL
Definition imageop.h:96
@ IOP_MODULE_MASK
Definition imageop.h:97
@ IOP_MODULE_LAST
Definition imageop.h:101
@ IOP_MODULE_SWITCH
Definition imageop.h:94
@ IOP_MODULE_INSTANCE
Definition imageop.h:98
gboolean dt_iop_module_is_in_pipeline(dt_iop_module_t *iop)
Definition imageop.c:778
gboolean dt_iop_is_hidden(dt_iop_module_t *module)
Definition imageop.c:736
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:1893
GtkWidget * dt_iop_gui_get_widget(dt_iop_module_t *module)
gboolean dt_iop_so_is_hidden(dt_iop_module_so_t *module)
Definition imageop.c:721
dt_iop_flags_t
Definition imageop.h:181
@ IOP_FLAGS_HIDDEN
Definition imageop.h:189
@ IOP_FLAGS_INCLUDE_IN_STYLES
Definition imageop.h:185
@ IOP_FLAGS_INTERNAL_MASKS
Definition imageop.h:198
@ IOP_FLAGS_PREVIEW_NON_OPENCL
Definition imageop.h:192
@ IOP_FLAGS_DEPRECATED
Definition imageop.h:187
@ IOP_FLAGS_SUPPORTS_BLENDING
Definition imageop.h:186
@ IOP_FLAGS_TAKE_NO_INPUT
Definition imageop.h:195
@ IOP_FLAGS_ALLOW_TILING
Definition imageop.h:188
@ IOP_FLAGS_UNSAFE_COPY
Definition imageop.h:196
@ IOP_FLAGS_NONE
Definition imageop.h:182
@ IOP_FLAGS_ONE_INSTANCE
Definition imageop.h:191
@ IOP_FLAGS_NO_MASKS
Definition imageop.h:194
@ IOP_FLAGS_CPU_WRITES_OPENCL
Definition imageop.h:199
@ IOP_FLAGS_GUIDES_SPECIAL_DRAW
Definition imageop.h:197
@ IOP_FLAGS_TILING_FULL_ROI
Definition imageop.h:190
@ IOP_FLAGS_NO_HISTORY_STACK
Definition imageop.h:193
void dt_iop_global_data_t
Definition imageop.h:210
int dt_iop_get_module_flags(const char *op)
Definition imageop.c:1719
gboolean dt_iop_gui_owns_widget(const dt_iop_module_t *module, const GtkWidget *target)
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:707
void dt_bauhaus_value_changed_default_callback(GtkWidget *widget)
dt_iop_module_t * dt_iop_get_colorout_module(void)
Definition imageop.c:1692
void dt_iop_gui_enter_critical_section(dt_iop_module_t *const module)
Take the module's GUI lock, serialising access to its dt_iop_gui_data_t.
gboolean dt_iop_check_modules_equal(dt_iop_module_t *mod_1, dt_iop_module_t *mod_2)
Definition imageop.c:1382
void dt_iop_data_t
Definition imageop.h:209
gboolean dt_iop_module_instance_exists(dt_iop_module_t *iop)
Definition imageop.c:741
void dt_iop_gui_set_expanded(dt_iop_module_t *module, gboolean expanded, gboolean collapse_others)
dt_iop_group_t
Definition imageop.h:154
@ IOP_GROUP_LAST
Definition imageop.h:163
@ IOP_GROUP_EFFECTS
Definition imageop.h:161
@ IOP_GROUP_FILM
Definition imageop.h:157
@ IOP_GROUP_TECHNICAL
Definition imageop.h:162
@ IOP_GROUP_COLOR
Definition imageop.h:158
@ IOP_GROUP_REPAIR
Definition imageop.h:159
@ IOP_GROUP_SHARPNESS
Definition imageop.h:160
@ IOP_GROUP_TONES
Definition imageop.h:156
@ IOP_GROUP_NONE
Definition imageop.h:155
void dt_iop_set_cache_bypass(dt_iop_module_t *module, gboolean state)
Definition imageop.c:1669
gboolean dt_iop_get_cache_bypass(dt_iop_module_t *module)
Definition imageop.c:1664
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:714
void dt_iop_set_mask_mode(dt_iop_module_t *module, int mask_mode)
Definition imageop.c:1174
void dt_iop_gui_rename_module(dt_iop_module_t *module)
dt_iop_module_t * dt_iop_gui_duplicate(dt_iop_module_t *base, gboolean copy_params)
Create another instance of base, insert it into dev->iop and give it a GUI.
gboolean dt_iop_gui_module_is_visible(dt_iop_module_t *module)
dt_iop_module_t * dt_iop_get_module_by_op_priority(GList *modules, const char *operation, const int multi_priority)
Definition imageop.c:1839
GtkWidget * dt_iop_gui_get_off(dt_iop_module_t *module)
void dt_iop_update_multi_priority(dt_iop_module_t *module, int new_priority)
Definition imageop.c:1801
dt_iop_tags_t
Definition imageop.h:168
@ IOP_TAG_DECORATION
Definition imageop.h:171
@ IOP_TAG_CLIPPING
Definition imageop.h:172
@ IOP_TAG_DISTORT
Definition imageop.h:170
@ IOP_TAG_NONE
Definition imageop.h:169
void dt_iop_unload_modules_so(void)
Definition imageop.c:1163
dt_dev_request_flags_t
Definition pixelpipe.h:50
DT_ALIGNED_PIXEL float dt_aligned_pixel_t[4]
Definition simd.h:53
const float uint32_t state[4]
unsigned __int64 uint64_t
Definition strptime.c:75
One module instance's contribution, as data.
Definition geometry.h:99
The dt_gui_module_t type is the intersection between a dt_lib_module_t and a dt_iop_module_t structur...
The interactive half of a module instance, owned by the GUI.
Definition imageop_gui.h:40
dt_gui_module_t common_fields
Definition imageop.h:229
dt_dev_operation_t op
Definition imageop.h:235
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:243
dt_iop_global_data_t * data
Definition imageop.h:238
gboolean have_introspection
Definition imageop.h:247
One IOP module built into this binary, and the generated function that binds it.
Definition imageop.h:418
void(* fill_so)(dt_iop_module_so_t *module)
Definition imageop.h:420
const char * op
Definition imageop.h:419
dt_dev_request_colorpick_flags_t request_color_pick
Definition imageop.h:272
int32_t hide_enable_button
Definition imageop.h:270
struct dt_iop_module_t * source
Definition imageop.h:366
dt_iop_params_t * default_params
Definition imageop.h:333
GHashTable * masks
Definition imageop.h:362
struct dt_develop_blend_params_t * blend_params
Definition imageop.h:349
dt_aligned_pixel_t picked_output_color_min
Definition imageop.h:289
uint64_t hash
Definition imageop.h:397
struct dt_iop_module_gui_t * gui
Definition imageop.h:346
char multi_name[128]
Definition imageop.h:387
dt_gui_module_t common_fields
Definition imageop.h:253
struct dt_develop_t * dev
Definition imageop.h:311
uint64_t blendop_hash
Definition imageop.h:404
gboolean default_enabled
Definition imageop.h:318
dt_dev_request_flags_t request_histogram
Definition imageop.h:274
gboolean have_introspection
Definition imageop.h:394
dt_dev_histogram_stats_t histogram_stats
Definition imageop.h:293
dt_aligned_pixel_t picked_output_color_max
Definition imageop.h:289
int32_t instance
Definition imageop.h:266
gboolean bypass_cache
Definition imageop.h:278
uint32_t histogram_max[4]
Definition imageop.h:295
dt_iop_global_data_t * global_data
Definition imageop.h:337
gboolean workflow_enabled
Definition imageop.h:320
dt_aligned_pixel_t picked_output_color
Definition imageop.h:289
gboolean enabled
Definition imageop.h:313
dt_iop_module_so_t * so
Definition imageop.h:376
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:390
dt_aligned_pixel_t picked_color_min
Definition imageop.h:287
int request_mask_display
Definition imageop.h:276
dt_aligned_pixel_t picked_color_max
Definition imageop.h:287
int histogram_middle_grey
Definition imageop.h:302
GHashTable * users
Definition imageop.h:358
struct dt_develop_blend_params_t * default_blendop_params
Definition imageop.h:349
struct dt_iop_module_t::@23 raster_mask
int32_t params_size
Definition imageop.h:335
uint32_t * histogram
Definition imageop.h:291
dt_iop_colorspace_type_t histogram_cst
Definition imageop.h:300
dt_dev_operation_t op
Definition imageop.h:259
dt_aligned_pixel_t picked_color
Definition imageop.h:287
int bypass_cache_variant
Definition imageop.h:285
dt_iop_params_t * params
Definition imageop.h:333
Region of interest passed through the pixelpipe.
Definition format.h:49