Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
imageop.h File Reference
#include <gmodule.h>
#include <gtk/gtk.h>
#include <sched.h>
#include <stddef.h>
#include <stdint.h>
#include "common/darktable.h"
#include "common/introspection.h"
#include "common/gui_module_api.h"
#include "common/opencl.h"
#include "control/settings.h"
#include "develop/pixelpipe.h"
#include "dtgtk/togglebutton.h"
#include "gui/gtk.h"
#include "gui/gui_throttle.h"
#include "iop/iop_api.h"
+ Include dependency graph for imageop.h:

Go to the source code of this file.

Data Structures

struct  dt_iop_roi_t
 Region of interest passed through the pixelpipe. More...
 
struct  dt_iop_gui_data_t
 
struct  dt_iop_module_so_t
 
struct  dt_iop_module_t
 

Macros

#define INCLUDE_API_FROM_MODULE_H
 
#define INCLUDE_API_FROM_MODULE_H
 
#define dt_iop_fmt_log(module, fmt, ...)    dt_print(DT_DEBUG_PIPE, "[iop-fmt] %-14s " fmt "\n", (module)->op, ##__VA_ARGS__)
 Debug helper to trace a module's input-format-driven decisions on the -d pipe channel (DT_DEBUG_PIPE). Use it at every spot where a module branches on the image or buffer type — self enable/disable, code-path selection, descriptor choice — so the heuristics are readable from logs instead of having to be reverse-engineered from pixel outputs. The first argument is the module (dt_iop_module_t* or dt_iop_module_so_t*, both expose op); the rest is a printf format and its arguments. A trailing newline is added.
 
#define IOP_GUI_ALLOC(module)    (dt_iop_##module##_gui_data_t *)_iop_gui_alloc(self,sizeof(dt_iop_##module##_gui_data_t))
 
#define IOP_GUI_FREE
 
#define dt_omploop_sfence()   dt_sfence()
 

Typedefs

typedef struct dt_iop_roi_t dt_iop_roi_t
 Region of interest passed through the pixelpipe.
 
typedef enum dt_iop_module_header_icons_t dt_iop_module_header_icons_t
 
typedef enum dt_iop_group_t dt_iop_group_t
 
typedef enum dt_iop_tags_t dt_iop_tags_t
 
typedef enum dt_iop_flags_t dt_iop_flags_t
 
typedef struct dt_iop_gui_data_t dt_iop_gui_data_t
 
typedef void dt_iop_data_t
 
typedef void dt_iop_global_data_t
 
typedef enum dt_dev_request_colorpick_flags_t dt_dev_request_colorpick_flags_t
 
typedef enum dt_iop_colorspace_type_t dt_iop_colorspace_type_t
 
typedef struct dt_iop_module_so_t dt_iop_module_so_t
 
typedef struct dt_iop_module_t dt_iop_module_t
 

Enumerations

enum  dt_iop_module_header_icons_t {
  IOP_MODULE_SWITCH = 0 ,
  IOP_MODULE_ICON ,
  IOP_MODULE_LABEL ,
  IOP_MODULE_MASK ,
  IOP_MODULE_INSTANCE ,
  IOP_MODULE_RESET ,
  IOP_MODULE_PRESETS ,
  IOP_MODULE_LAST
}
 
enum  dt_iop_group_t {
  IOP_GROUP_NONE = 0 ,
  IOP_GROUP_TONES = 1 ,
  IOP_GROUP_FILM = 2 ,
  IOP_GROUP_COLOR = 3 ,
  IOP_GROUP_REPAIR = 4 ,
  IOP_GROUP_SHARPNESS = 5 ,
  IOP_GROUP_EFFECTS = 6 ,
  IOP_GROUP_TECHNICAL = 7 ,
  IOP_GROUP_LAST
}
 
enum  dt_iop_tags_t {
  IOP_TAG_NONE = 0 ,
  IOP_TAG_DISTORT = 1 << 0 ,
  IOP_TAG_DECORATION = 1 << 1 ,
  IOP_TAG_CLIPPING = 1 << 2
}
 
enum  dt_iop_flags_t {
  IOP_FLAGS_NONE = 0 ,
  IOP_FLAGS_INCLUDE_IN_STYLES = 1 << 0 ,
  IOP_FLAGS_SUPPORTS_BLENDING = 1 << 1 ,
  IOP_FLAGS_DEPRECATED = 1 << 2 ,
  IOP_FLAGS_ALLOW_TILING = 1 << 3 ,
  IOP_FLAGS_HIDDEN = 1 << 4 ,
  IOP_FLAGS_TILING_FULL_ROI = 1 << 5 ,
  IOP_FLAGS_ONE_INSTANCE = 1 << 6 ,
  IOP_FLAGS_PREVIEW_NON_OPENCL = 1 << 7 ,
  IOP_FLAGS_NO_HISTORY_STACK = 1 << 8 ,
  IOP_FLAGS_NO_MASKS = 1 << 9 ,
  IOP_FLAGS_TAKE_NO_INPUT = 1 << 10 ,
  IOP_FLAGS_UNSAFE_COPY = 1 << 11 ,
  IOP_FLAGS_GUIDES_SPECIAL_DRAW = 1 << 12 ,
  IOP_FLAGS_INTERNAL_MASKS = 1 << 13 ,
  IOP_FLAGS_CPU_WRITES_OPENCL = 1 << 14
}
 
enum  dt_dev_request_colorpick_flags_t {
  DT_REQUEST_COLORPICK_OFF = 0 ,
  DT_REQUEST_COLORPICK_MODULE = 1
}
 
enum  dt_iop_colorspace_type_t {
  IOP_CS_NONE = -1 ,
  IOP_CS_RAW = 0 ,
  IOP_CS_LAB = 1 ,
  IOP_CS_RGB = 2 ,
  IOP_CS_LCH = 3 ,
  IOP_CS_HSL = 4 ,
  IOP_CS_JZCZHZ = 5 ,
  IOP_CS_RGB_DISPLAY = 6
}
 

Functions

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.
 
static gboolean dt_iop_colorspace_is_rgb (const dt_iop_colorspace_type_t cst)
 
void dt_iop_load_modules_so (void)
 
void dt_iop_unload_modules_so (void)
 
int dt_iop_load_module_by_so (dt_iop_module_t *module, dt_iop_module_so_t *so, struct dt_develop_t *dev)
 
int dt_iop_load_module (dt_iop_module_t *module, dt_iop_module_so_t *module_so, struct dt_develop_t *dev)
 
void dt_iop_cleanup_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)
 
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.
 
gboolean dt_iop_so_is_hidden (dt_iop_module_so_t *module)
 
gboolean dt_iop_is_hidden (dt_iop_module_t *module)
 
gboolean dt_iop_is_visible (dt_iop_module_t *module)
 
static void dt_iop_gui_enter_critical_section (dt_iop_module_t *const module) ACQUIRE(&module -> gui_lock)
 
static void dt_iop_gui_leave_critical_section (dt_iop_module_t *const module) RELEASE(&module -> gui_lock)
 
void dt_iop_gui_cleanup_module (dt_iop_module_t *module)
 
void dt_iop_gui_set_enable_button (dt_iop_module_t *module)
 
void dt_iop_gui_update (dt_iop_module_t *module)
 
void dt_iop_gui_reset (dt_iop_module_t *module)
 
void dt_iop_gui_set_expanded (dt_iop_module_t *module, gboolean expanded, gboolean collapse_others)
 
void dt_iop_gui_update_expanded (dt_iop_module_t *module)
 
dt_iop_module_tdt_iop_gui_duplicate (dt_iop_module_t *base, gboolean copy_params)
 
void dt_iop_gui_update_header (dt_iop_module_t *module)
 
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)
 
void dt_iop_commit_blend_params (dt_iop_module_t *module, const struct dt_develop_blend_params_t *blendop_params)
 
void dt_iop_set_mask_mode (dt_iop_module_t *module, int mask_mode)
 
void dt_iop_gui_set_expander (dt_iop_module_t *module)
 
GtkWidgetdt_iop_gui_get_widget (dt_iop_module_t *module)
 
GtkWidgetdt_iop_gui_get_pluginui (dt_iop_module_t *module)
 
void dt_iop_request_focus (dt_iop_module_t *module)
 
void dt_iop_default_init (dt_iop_module_t *module)
 
void dt_iop_load_default_params (dt_iop_module_t *module)
 
void dt_iop_gui_init (dt_iop_module_t *module)
 
void dt_iop_reload_defaults (dt_iop_module_t *module)
 
void dt_iop_nap (int32_t usec)
 
dt_iop_module_tdt_iop_get_colorout_module (void)
 
dt_iop_module_tdt_iop_get_module_from_list (GList *iop_list, const char *op)
 
dt_iop_module_tdt_iop_get_module (const char *op)
 
dt_iop_module_tdt_iop_get_module_by_op_priority (GList *modules, const char *operation, const int multi_priority)
 
dt_iop_module_tdt_iop_get_module_by_instance_name (GList *modules, const char *operation, const char *multi_name)
 
gboolean dt_iop_is_first_instance (GList *modules, dt_iop_module_t *module)
 
int dt_iop_get_module_flags (const char *op)
 
const gchar * dt_iop_get_localized_name (const gchar *op)
 
const gchar * dt_iop_get_localized_aliases (const gchar *op)
 
void dt_iop_update_multi_priority (dt_iop_module_t *module, int new_priority)
 
gboolean dt_iop_module_has_raster_mask (const dt_iop_module_t *module)
 
gboolean dt_iop_module_needs_mask_history (const dt_iop_module_t *module)
 
gboolean dt_iop_is_raster_mask_used (dt_iop_module_t *module, int id)
 
dt_iop_module_tdt_iop_gui_get_previous_visible_module (dt_iop_module_t *module)
 
dt_iop_module_tdt_iop_gui_get_next_visible_module (dt_iop_module_t *module)
 
gboolean dt_iop_gui_module_is_visible (dt_iop_module_t *module)
 
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.
 
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.
 
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.
 
void dt_iop_set_darktable_iop_table ()
 
void dt_iop_throttled_history_update (gpointer data)
 
void dt_iop_add_remove_mask_indicator (dt_iop_module_t *module)
 
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)
 
static dt_iop_gui_data_t_iop_gui_alloc (dt_iop_module_t *module, size_t size)
 
void dt_iop_gui_rename_module (dt_iop_module_t *module)
 
void dt_iop_gui_changed (dt_iop_module_t *module, GtkWidget *widget, gpointer data)
 
void dt_bauhaus_update_module (dt_iop_module_t *self)
 
void dt_bauhaus_value_changed_default_callback (GtkWidget *widget)
 
void dt_iop_compute_module_hash (dt_iop_module_t *module, GList *masks)
 
gboolean dt_iop_check_modules_equal (dt_iop_module_t *mod_1, dt_iop_module_t *mod_2)
 
gboolean dt_iop_get_cache_bypass (dt_iop_module_t *module)
 
void dt_iop_set_cache_bypass (dt_iop_module_t *module, gboolean state)
 
static void dt_sfence ()
 

Macro Definition Documentation

◆ dt_iop_fmt_log

#define dt_iop_fmt_log (   module,
  fmt,
  ... 
)     dt_print(DT_DEBUG_PIPE, "[iop-fmt] %-14s " fmt "\n", (module)->op, ##__VA_ARGS__)

Debug helper to trace a module's input-format-driven decisions on the -d pipe channel (DT_DEBUG_PIPE). Use it at every spot where a module branches on the image or buffer type — self enable/disable, code-path selection, descriptor choice — so the heuristics are readable from logs instead of having to be reverse-engineered from pixel outputs. The first argument is the module (dt_iop_module_t* or dt_iop_module_so_t*, both expose op); the rest is a printf format and its arguments. A trailing newline is added.

Example: dt_iop_fmt_log(self, "enable=%d needs_demosaic=%d filters=%u", enabled, dt_image_needs_demosaic(img), img->dsc.filters);

Definition at line 453 of file imageop.h.

◆ dt_omploop_sfence

#define dt_omploop_sfence ( )    dt_sfence()

Definition at line 702 of file imageop.h.

◆ INCLUDE_API_FROM_MODULE_H [1/2]

#define INCLUDE_API_FROM_MODULE_H

Definition at line 224 of file imageop.h.

◆ INCLUDE_API_FROM_MODULE_H [2/2]

#define INCLUDE_API_FROM_MODULE_H

Definition at line 224 of file imageop.h.

◆ IOP_GUI_ALLOC

#define IOP_GUI_ALLOC (   module)     (dt_iop_##module##_gui_data_t *)_iop_gui_alloc(self,sizeof(dt_iop_##module##_gui_data_t))

Definition at line 599 of file imageop.h.

◆ IOP_GUI_FREE

#define IOP_GUI_FREE
Value:
dt_pthread_mutex_destroy(&self->gui_lock); \
if(self->gui_data){ \
dt_free_align(self->gui_data); \
self->gui_data = NULL; \
} \
self->gui_data = NULL;
static int dt_pthread_mutex_destroy(dt_pthread_mutex_t *mutex)
Definition dtpthread.h:379

Definition at line 602 of file imageop.h.

Typedef Documentation

◆ dt_dev_request_colorpick_flags_t

◆ dt_iop_colorspace_type_t

colorspace enums, must be in synch with dt_iop_colorspace_type_t in color_conversion.cl

◆ dt_iop_data_t

Definition at line 190 of file imageop.h.

◆ dt_iop_flags_t

module tags

◆ dt_iop_global_data_t

Definition at line 191 of file imageop.h.

◆ dt_iop_group_t

module group

◆ dt_iop_gui_data_t

◆ dt_iop_module_header_icons_t

◆ dt_iop_module_so_t

part of the module which only contains the cached dlopen stuff.

◆ dt_iop_module_t

◆ dt_iop_roi_t

typedef struct dt_iop_roi_t dt_iop_roi_t

Region of interest passed through the pixelpipe.

scale must stay consistent with x, y, width and height, which all describe the same raster ROI seen by the current pipeline stage.

◆ dt_iop_tags_t

module tags

Enumeration Type Documentation

◆ dt_dev_request_colorpick_flags_t

color picker request

Enumerator
DT_REQUEST_COLORPICK_OFF 
DT_REQUEST_COLORPICK_MODULE 

Definition at line 194 of file imageop.h.

◆ dt_iop_colorspace_type_t

colorspace enums, must be in synch with dt_iop_colorspace_type_t in color_conversion.cl

Enumerator
IOP_CS_NONE 
IOP_CS_RAW 
IOP_CS_LAB 
IOP_CS_RGB 
IOP_CS_LCH 
IOP_CS_HSL 
IOP_CS_JZCZHZ 
IOP_CS_RGB_DISPLAY 

Definition at line 201 of file imageop.h.

◆ dt_iop_flags_t

module tags

Enumerator
IOP_FLAGS_NONE 
IOP_FLAGS_INCLUDE_IN_STYLES 

Flag for the iop module to be enabled/included by default when creating a style

IOP_FLAGS_SUPPORTS_BLENDING 
IOP_FLAGS_DEPRECATED 
IOP_FLAGS_ALLOW_TILING 
IOP_FLAGS_HIDDEN 
IOP_FLAGS_TILING_FULL_ROI 
IOP_FLAGS_ONE_INSTANCE 
IOP_FLAGS_PREVIEW_NON_OPENCL 
IOP_FLAGS_NO_HISTORY_STACK 
IOP_FLAGS_NO_MASKS 
IOP_FLAGS_TAKE_NO_INPUT 
IOP_FLAGS_UNSAFE_COPY 
IOP_FLAGS_GUIDES_SPECIAL_DRAW 
IOP_FLAGS_INTERNAL_MASKS 
IOP_FLAGS_CPU_WRITES_OPENCL 

Definition at line 161 of file imageop.h.

◆ dt_iop_group_t

module group

Enumerator
IOP_GROUP_NONE 
IOP_GROUP_TONES 
IOP_GROUP_FILM 
IOP_GROUP_COLOR 
IOP_GROUP_REPAIR 
IOP_GROUP_SHARPNESS 
IOP_GROUP_EFFECTS 
IOP_GROUP_TECHNICAL 
IOP_GROUP_LAST 

Definition at line 134 of file imageop.h.

◆ dt_iop_module_header_icons_t

Enumerator
IOP_MODULE_SWITCH 
IOP_MODULE_ICON 
IOP_MODULE_LABEL 
IOP_MODULE_MASK 
IOP_MODULE_INSTANCE 
IOP_MODULE_RESET 
IOP_MODULE_PRESETS 
IOP_MODULE_LAST 

Definition at line 103 of file imageop.h.

◆ dt_iop_tags_t

module tags

Enumerator
IOP_TAG_NONE 
IOP_TAG_DISTORT 
IOP_TAG_DECORATION 
IOP_TAG_CLIPPING 

Definition at line 148 of file imageop.h.

Function Documentation

◆ _iop_gui_alloc()

static dt_iop_gui_data_t * _iop_gui_alloc ( dt_iop_module_t module,
size_t  size 
)
inlinestatic

Definition at line 592 of file imageop.h.

References dt_pthread_mutex_init(), and dt_iop_module_t::gui_lock.

◆ dt_bauhaus_update_module()

◆ dt_bauhaus_value_changed_default_callback()

◆ dt_dev_get_module_scale()

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.

pipe->iscale tracks how much the pipeline input was already downsampled when the mipmap cache selected the source buffer. roi_in->scale then applies the per-module raster scaling on top of that buffer. Modules that author radii or frequencies in original-image pixels should derive their current working scale from this ratio and clamp it locally only when they explicitly want to avoid magnifying the effect above 100%.

Parameters
pipecurrent pixelpipe input contract.
roi_ininput ROI currently processed by the module.
Returns
float current-grid pixel footprint expressed in full-resolution image pixels.

◆ dt_iop_add_remove_mask_indicator()

void dt_iop_add_remove_mask_indicator ( dt_iop_module_t module)

◆ dt_iop_check_modules_equal()

gboolean dt_iop_check_modules_equal ( dt_iop_module_t mod_1,
dt_iop_module_t mod_2 
)

Definition at line 1818 of file imageop.c.

References dt_iop_roi_t::y.

Referenced by dt_dev_add_history_item_ext().

◆ dt_iop_cleanup_module()

◆ dt_iop_cleanup_pipe()

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.

The instance callback is an immutable copy of the callback stored in the loaded shared-object descriptor. Pixelpipes can retain removed module instances until their next topology rebuild, so validate both the descriptor lifetime and that callback identity before calling through the instance. A mismatch means the instance storage is no longer trustworthy; calling the descriptor callback with that same instance would only move the use-after-free into the module cleanup code.

Definition at line 576 of file imageop.c.

References dt_dev_pixelpipe_iop_t::blendop_data, darktable, DT_DEBUG_ALWAYS, dt_free_align, dt_print(), FALSE, darktable_t::iop, IS_NULL_PTR, TRUE, and dt_iop_roi_t::y.

Referenced by dt_dev_pixelpipe_cleanup_nodes().

◆ dt_iop_colorspace_is_rgb()

◆ dt_iop_commit_blend_params()

void dt_iop_commit_blend_params ( dt_iop_module_t module,
const struct dt_develop_blend_params_t blendop_params 
)

◆ dt_iop_commit_params()

◆ dt_iop_compute_module_hash()

void dt_iop_compute_module_hash ( dt_iop_module_t module,
GList *  masks 
)

Uniform way of getting the full state hash of user-defined parameters, including masks and blending. Writes the value in module->hash, also writes the module->blendop_hash for masking and blending.

WARNING: doesn't take into account parameters dynamically set at runtime.

WARNING: if computing module hash in HISTORY order, there is no guaranty that previous modules in PIPELINE are also previous modules in HISTORY, so their blendops & masks may not be inited yet, meaning the blendop_hash we compute here will be garbage. In particular, (legacy) history compression algo can mess with history order, such that history entries of raster mask providers can end up after history entries of raster mask consumers. Our current history compression does a pipeline snapshot in pipeline order, for user-changed modules. (Raster masks providers and consumers will all be user-changed modules).

IF COMPUTING HASHES FOR PIPE CACHE INVALIDATION, that means we need to redo blendop/module hash recomputation at commit_params time, when pushing history to pipeline (but mandatorily in pipeline order).

IF COMPUTING HASHES FOR HISTORY CONSISTENCY (auto-saving when needed), since all we care is user params, it doesn't matter.

Definition at line 1890 of file imageop.c.

References dt_hash(), dt_iop_compute_blendop_hash(), and dt_iop_roi_t::y.

Referenced by _dt_dev_modules_reload_defaults(), _history_to_module(), _process_history_db_entry(), commit_params(), dt_dev_history_item_update_from_params(), dt_iop_commit_params(), and dt_iop_load_default_params().

◆ dt_iop_default_init()

◆ dt_iop_get_cache_bypass()

gboolean dt_iop_get_cache_bypass ( dt_iop_module_t module)

Set bypass to TRUE if the pipeline cache should be bypassed temporarily for this module and the next, for example doing interactive GUI operations.

Pipeline cache consistency is ensured by hashing the internal module params and comparing that hash with the previously-known one from the cache line. If something outside the module is making the cache temporarily invalid, this is the way to go. The previous module's output may be fetched from cache if available, which is faster than simply disabling cache at all.

This is designed for mask previews, which have a special handling, in pipeline, where modules between the mask preview requesting module and the gamma.c module are bypassed, so the alpha channel is passed-through to be rendered by gamma.c without processing intermediate modules. This doesn't work if cache is enabled.

The pixelpipe code will propagate the bypass state to downstream pipe->pieces, so all modules coming later than this one in the pipeline will also have their cache disabled. That's how mask preview can work, because the pipeline is called in a recursive way, starting from the end.

Only one module from dev->iop list (modules tied to GUI) is allowed to bypass the cache at a time, other modules will lose their bypass flag if set.

Definition at line 2910 of file imageop.c.

Referenced by dt_dev_pixelpipe_activemodule_disables_currentmodule().

◆ dt_iop_get_colorout_module()

dt_iop_module_t * dt_iop_get_colorout_module ( void  )

get module by name and colorout, works only with a dev mode

Definition at line 2933 of file imageop.c.

References darktable, darktable_t::develop, dt_iop_get_module_from_list(), and dt_develop_t::iop.

◆ dt_iop_get_localized_aliases()

const gchar * dt_iop_get_localized_aliases ( const gchar *  op)

Definition at line 3021 of file imageop.c.

References darktable, darktable_t::iop, IS_NULL_PTR, and dt_iop_roi_t::y.

◆ dt_iop_get_localized_name()

const gchar * dt_iop_get_localized_name ( const gchar *  op)

returns the localized plugin name for a given op name. must not be freed.

Definition at line 2999 of file imageop.c.

References darktable, darktable_t::iop, IS_NULL_PTR, and dt_iop_roi_t::y.

Referenced by dt_add_hist(), dt_history_get_items(), dt_history_get_items_as_string(), and dt_styles_get_item_list().

◆ dt_iop_get_module()

dt_iop_module_t * dt_iop_get_module ( const char *  op)

◆ dt_iop_get_module_by_instance_name()

dt_iop_module_t * dt_iop_get_module_by_instance_name ( GList *  modules,
const char *  operation,
const char *  multi_name 
)

returns module with op + multi_name or NULL if not found on the list, if IS_NULL_PTR(multi_name) do not check for it

Definition at line 3099 of file imageop.c.

References IS_NULL_PTR, m, and dt_iop_roi_t::y.

Referenced by _hm_module_from_id(), and dt_ioppr_update_for_entries().

◆ dt_iop_get_module_by_op_priority()

dt_iop_module_t * dt_iop_get_module_by_op_priority ( GList *  modules,
const char *  operation,
const int  multi_priority 
)

returns module with op + multi_priority or NULL if not found on the list, if multi_priority == -1 do not check for it

Definition at line 3081 of file imageop.c.

References m, and dt_iop_roi_t::y.

Referenced by _dt_styles_tmp_module_from_style_item(), _history_merge_resolve_dest_instance(), _hm_module_from_id(), _lib_snapshot_capture_state(), _refresh_global_histogram_backbuf_for_hash(), _refresh_preview_histograms(), dt_dev_create_module_instance(), dt_history_merge(), and dt_ioppr_resync_iop_list().

◆ dt_iop_get_module_flags()

int dt_iop_get_module_flags ( const char *  op)

get module flags, works in dev and lt mode

Definition at line 2960 of file imageop.c.

References darktable, darktable_t::iop, and dt_iop_roi_t::y.

Referenced by dt_gui_hist_dialog_new().

◆ dt_iop_get_module_from_list()

dt_iop_module_t * dt_iop_get_module_from_list ( GList *  iop_list,
const char *  op 
)

◆ dt_iop_gui_changed()

◆ dt_iop_gui_cleanup_module()

◆ dt_iop_gui_commit_iop_order_change()

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.

Order changes may come from drag-and-drop, context-menu move commands or preset application. The low-level order code only mutates dt_develop_t::iop and the serialized order list; this function updates module headers, rebuilds the pipes, stores the history item when requested and broadcasts the GUI change signal.

Parameters
devDevelop instance owning the reordered modules.
moduleModule to record in history, or NULL for whole-pipeline changes.
enableHistory enable state passed to dt_dev_add_history_item.
write_historyTRUE to record a history item, FALSE to skip it.
reasonDebug string used in IOP-order checks.
Returns
TRUE when the GUI refresh completed, FALSE if dev was NULL.

Definition at line 740 of file imageop.c.

References dt_dev_add_history_item, dt_dev_pixelpipe_rebuild_all, dt_dev_signal_modules_moved(), dt_ioppr_check_iop_order(), enable(), FALSE, IS_NULL_PTR, TRUE, and dt_iop_roi_t::y.

Referenced by _ioporder_apply_preset(), dt_iop_gui_move_module_after(), dt_iop_gui_move_module_before(), gui_reset(), and set_params().

◆ dt_iop_gui_duplicate()

◆ dt_iop_gui_enter_critical_section()

static void dt_iop_gui_enter_critical_section ( dt_iop_module_t *const  module) & -> gui_lock)
inlinestatic

enter a GUI critical section by acquiring gui_data->lock

Definition at line 413 of file imageop.h.

References dt_pthread_mutex_lock().

Referenced by __attribute__(), __attribute__(), _auto_levels_callback(), _auto_levels_callback(), _auto_set_exposure(), _auto_set_illuminant(), _develop_cacheline_ready_callback(), _develop_history_resync_callback(), _develop_ui_pipe_finished_callback(), _develop_ui_pipe_finished_callback(), _develop_ui_pipe_finished_callback(), _do_get_structure_auto(), _draw(), _event_draw(), _get_structure(), _history_resync_callback(), _preview_pipe_finished_callback(), _process_common_setup(), _refresh_module_histogram(), _select_region_toggled_callback(), _select_region_toggled_callback(), _spot_settings_changed_callback(), button_pressed(), button_pressed(), button_released(), button_released(), checker_changed_callback(), checker_color_changed_callback(), color_picker_apply(), commit_profile_callback(), corrections_done(), dt_drawlayer_begin_gui_stroke_capture(), dt_drawlayer_commit_dabs(), dt_iop_autoset_advance(), dt_iop_levels_compute_levels_automatic(), dt_iop_zonesystem_preview_draw(), gui_cache_init(), gui_cleanup(), gui_focus(), gui_init(), gui_init(), gui_post_expose(), gui_post_expose(), gui_update(), gui_update(), invalidate_luminance_cache(), key_pressed(), masks_selection_changed(), mouse_moved(), mouse_moved(), optimize_changed_callback(), process(), process(), process(), process_cl(), process_cl(), process_clusters(), process_common_cleanup(), process_drago(), process_internal(), reload_defaults(), rt_auto_levels_callback(), rt_curr_scale_update(), rt_develop_ui_pipe_finished_callback(), rt_display_wavelet_scale_callback(), run_profile_callback(), run_validation_callback(), safety_changed_callback(), scrolled(), start_profiling_callback(), and update_histogram().

◆ dt_iop_gui_get_next_visible_module()

dt_iop_module_t * dt_iop_gui_get_next_visible_module ( dt_iop_module_t module)

returns the next visible module on the module list

Definition at line 782 of file imageop.c.

References dt_iop_gui_module_is_visible(), and dt_iop_roi_t::y.

◆ dt_iop_gui_get_pluginui()

GtkWidget * dt_iop_gui_get_pluginui ( dt_iop_module_t module)

get the eventbox of plugin ui in expander

Definition at line 2893 of file imageop.c.

References DTGTK_EXPANDER, dtgtk_expander_get_frame(), and dt_iop_roi_t::y.

Referenced by _iop_dim_all_but(), and dt_iop_request_focus().

◆ dt_iop_gui_get_previous_visible_module()

dt_iop_module_t * dt_iop_gui_get_previous_visible_module ( dt_iop_module_t module)

returns the previous visible module on the module list

Definition at line 768 of file imageop.c.

References dt_iop_gui_module_is_visible(), and dt_iop_roi_t::y.

◆ dt_iop_gui_get_widget()

GtkWidget * dt_iop_gui_get_widget ( dt_iop_module_t module)

get the widget of plugin ui in expander

Definition at line 2888 of file imageop.c.

References DTGTK_EXPANDER, dtgtk_expander_get_body(), and dt_iop_roi_t::y.

◆ dt_iop_gui_init()

◆ dt_iop_gui_leave_critical_section()

static void dt_iop_gui_leave_critical_section ( dt_iop_module_t *const  module) & -> gui_lock)
inlinestatic

leave a GUI critical section by releasing gui_data->lock

Definition at line 419 of file imageop.h.

References dt_pthread_mutex_unlock().

Referenced by __attribute__(), __attribute__(), _auto_levels_callback(), _auto_levels_callback(), _auto_set_exposure(), _auto_set_illuminant(), _develop_cacheline_ready_callback(), _develop_history_resync_callback(), _develop_ui_pipe_finished_callback(), _develop_ui_pipe_finished_callback(), _develop_ui_pipe_finished_callback(), _do_get_structure_auto(), _draw(), _event_draw(), _get_structure(), _history_resync_callback(), _preview_pipe_finished_callback(), _process_common_setup(), _refresh_module_histogram(), _select_region_toggled_callback(), _select_region_toggled_callback(), _spot_settings_changed_callback(), button_pressed(), button_pressed(), button_released(), button_released(), checker_changed_callback(), checker_color_changed_callback(), color_picker_apply(), commit_profile_callback(), corrections_done(), dt_drawlayer_begin_gui_stroke_capture(), dt_drawlayer_commit_dabs(), dt_iop_autoset_advance(), dt_iop_levels_compute_levels_automatic(), dt_iop_zonesystem_preview_draw(), gui_cache_init(), gui_cleanup(), gui_focus(), gui_init(), gui_init(), gui_post_expose(), gui_post_expose(), gui_update(), gui_update(), invalidate_luminance_cache(), key_pressed(), masks_selection_changed(), mouse_moved(), mouse_moved(), optimize_changed_callback(), process(), process(), process(), process_cl(), process_cl(), process_clusters(), process_common_cleanup(), process_drago(), process_internal(), reload_defaults(), rt_auto_levels_callback(), rt_curr_scale_update(), rt_develop_ui_pipe_finished_callback(), rt_display_wavelet_scale_callback(), run_profile_callback(), run_validation_callback(), safety_changed_callback(), scrolled(), start_profiling_callback(), and update_histogram().

◆ dt_iop_gui_module_is_visible()

gboolean dt_iop_gui_module_is_visible ( dt_iop_module_t module)

◆ dt_iop_gui_move_module_after()

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.

This is the GUI boundary for module reordering: dt_ioppr_move_iop_after only mutates the pipeline list and order list, while this function is responsible for updating visible headers, rebuilding the pipes, recording the history step and notifying GUI listeners.

Parameters
moduleModule being moved.
module_prevModule that should end up immediately before module.
reasonDebug string used in IOP-order checks.
Returns
TRUE if the move was applied, FALSE otherwise.

Definition at line 761 of file imageop.c.

References dt_iop_gui_commit_iop_order_change(), dt_ioppr_move_iop_after(), FALSE, TRUE, and dt_iop_roi_t::y.

Referenced by _ioporder_drag_data_received(), and _modulegroups_drag_data_received().

◆ dt_iop_gui_move_module_before()

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.

This is the GUI boundary for module reordering: dt_ioppr_move_iop_before only mutates the pipeline list and order list, while this function is responsible for updating visible headers, rebuilding the pipes, recording the history step and notifying GUI listeners.

Parameters
moduleModule being moved.
module_nextModule that should end up immediately after module.
reasonDebug string used in IOP-order checks.
Returns
TRUE if the move was applied, FALSE otherwise.

Definition at line 754 of file imageop.c.

References dt_iop_gui_commit_iop_order_change(), dt_ioppr_move_iop_before(), FALSE, TRUE, and dt_iop_roi_t::y.

Referenced by _ioporder_drag_data_received(), and _modulegroups_drag_data_received().

◆ dt_iop_gui_rename_module()

◆ dt_iop_gui_reset()

void dt_iop_gui_reset ( dt_iop_module_t module)

reset the ui to its defaults

Definition at line 2111 of file imageop.c.

References darktable, dt_iop_is_hidden(), darktable_t::gui, dt_gui_gtk_t::reset, and dt_iop_roi_t::y.

Referenced by _gui_reset_callback().

◆ dt_iop_gui_set_enable_button()

void dt_iop_gui_set_enable_button ( dt_iop_module_t module)

updates the enable button state. (take into account module->enabled and module->hide_enable_button

Definition at line 1205 of file imageop.c.

References dt_gui_add_class(), dt_gui_remove_class(), dt_iop_gui_set_enable_button_icon(), FALSE, IS_NULL_PTR, TRUE, and dt_iop_roi_t::y.

Referenced by dt_dev_add_history_item_real(), dt_iop_gui_changed(), and dt_iop_gui_update_header().

◆ dt_iop_gui_set_expanded()

◆ dt_iop_gui_set_expander()

void dt_iop_gui_set_expander ( dt_iop_module_t module)

◆ dt_iop_gui_update()

◆ dt_iop_gui_update_expanded()

void dt_iop_gui_update_expanded ( dt_iop_module_t module)

refresh iop according to set expanded state

Definition at line 2338 of file imageop.c.

References DTGTK_EXPANDER, dtgtk_expander_set_expanded(), IS_NULL_PTR, and dt_iop_roi_t::y.

Referenced by dt_iop_gui_update(), and enter().

◆ dt_iop_gui_update_header()

◆ dt_iop_init_pipe()

void dt_iop_init_pipe ( struct dt_iop_module_t module,
struct dt_dev_pixelpipe_t pipe,
struct dt_dev_pixelpipe_iop_t piece 
)

initialize pipe.

Definition at line 558 of file imageop.c.

References dt_dev_pixelpipe_iop_t::blendop_data, and dt_calloc_align().

Referenced by dt_dev_pixelpipe_create_nodes().

◆ dt_iop_is_first_instance()

gboolean dt_iop_is_first_instance ( GList *  modules,
dt_iop_module_t module 
)

returns true if module is the first instance of this operation in the pipe

Definition at line 3117 of file imageop.c.

References m, TRUE, and dt_iop_roi_t::y.

Referenced by declare_cat_on_pipe().

◆ dt_iop_is_hidden()

◆ dt_iop_is_raster_mask_used()

gboolean dt_iop_is_raster_mask_used ( dt_iop_module_t module,
int  id 
)

iterates over the users hash table and checks if a specific mask is being used

Definition at line 3067 of file imageop.c.

References FALSE, key, TRUE, value, and dt_iop_roi_t::y.

Referenced by dt_dev_pixelpipe_process(), dt_develop_blend_process(), dt_develop_blend_process_cl(), and process().

◆ dt_iop_is_visible()

gboolean dt_iop_is_visible ( dt_iop_module_t module)

Check if the module is currently visible in GUI

Definition at line 1132 of file imageop.c.

References dt_iop_is_hidden(), IS_NULL_PTR, and dt_iop_roi_t::y.

◆ dt_iop_load_default_params()

◆ dt_iop_load_module()

◆ dt_iop_load_module_by_so()

int dt_iop_load_module_by_so ( dt_iop_module_t module,
dt_iop_module_so_t so,
struct dt_develop_t dev 
)

◆ dt_iop_load_modules_so()

void dt_iop_load_modules_so ( void  )

◆ dt_iop_module_has_raster_mask()

gboolean dt_iop_module_has_raster_mask ( const dt_iop_module_t module)

returns TRUE if module consumes a raster mask

Definition at line 1636 of file imageop.c.

References FALSE, IS_NULL_PTR, and dt_iop_roi_t::y.

◆ dt_iop_module_needs_mask_history()

◆ dt_iop_nap()

void dt_iop_nap ( int32_t  usec)

allow plugins to relinquish CPU and go to sleep for some time

Definition at line 2899 of file imageop.c.

References dt_iop_roi_t::y.

Referenced by dt_dev_darkroom_pipeline(), dt_opencl_lock_device(), and nlmeans_denoise_cl().

◆ dt_iop_reload_defaults()

◆ dt_iop_request_focus()

void dt_iop_request_focus ( dt_iop_module_t module)

requests the focus for this plugin (to draw overlays over the center image) NOTE: this sets the current module expander as the scroll reference, which is handled when the parent panel changes size, which happens when uncollapsing the module. So dt_iop_request_focus() needs to be called before expanding modules (dt_iop_set_expanded) for auto-scroll to work properly.

Definition at line 2169 of file imageop.c.

References darktable_t::collection, darktable, darktable_t::develop, dt_collection_hint_message(), dt_control_queue_cursor, dt_control_queue_redraw_center(), DT_DEBUG_CONTROL_SIGNAL_RAISE, dt_dev_modulegroups_switch_tab(), dt_gui_add_class(), dt_gui_refocus_center(), dt_gui_remove_class(), dt_iop_color_picker_reset(), dt_iop_gui_blending_lose_focus(), dt_iop_gui_get_pluginui(), dt_masks_reset_form_gui(), DT_SIGNAL_DEVELOP_MASKS_GUI_CHANGED, FALSE, darktable_t::gui, dt_develop_t::gui_module, dt_gui_gtk_t::has_scroll_focus, IS_NULL_PTR, dt_gui_gtk_t::reset, dt_gui_gtk_t::scroll_to, dt_gui_gtk_t::scroll_to_header_once, darktable_t::signals, TRUE, and dt_iop_roi_t::y.

Referenced by _action_request_focus(), _add_shape(), _area_button_press_callback(), _area_scroll_callback(), _auto_levels_callback(), _auto_levels_callback(), _blendop_blendif_channel_display_toggled(), _blendop_blendif_key_press(), _blendop_blendif_showmask_clicked(), _blendop_masks_shape_can_start(), _blendop_masks_show_and_edit(), _check_deleted_instances(), _color_picker_callback_button_press(), _darkroom_image_loaded_callback(), _display_mask_callback(), _display_mask_indicator_callback(), _edit_masks(), _enter_edit_mode(), _enter_edit_mode(), _event_fit_both_button_clicked(), _event_fit_h_button_clicked(), _event_fit_v_button_clicked(), _event_structure_auto_clicked(), _event_structure_lines_clicked(), _event_structure_quad_clicked(), _focus_module(), _gui_delete_callback(), _gui_set_single_expanded(), _history_show_module_for_end(), _iop_plugin_body_button_press(), _iop_plugin_enable_accel(), _iop_plugin_header_button_release(), _modulegroups_switch_tab_next(), _modulegroups_switch_tab_previous(), _raster_combo_populate(), _scroll_event(), _select_region_toggled_callback(), _select_region_toggled_callback(), _update_iop_visibility(), acquire_source_button_pressed(), acquire_target_button_pressed(), area_button_press(), area_button_press(), area_button_release(), btn_make_radio_callback(), button_pressed(), button_pressed(), default_iop_focus(), dt_iop_gui_duplicate(), dt_iop_levels_button_press(), dt_iop_levels_scroll(), dt_masks_creation_mode_enter(), dt_masks_iop_combo_populate(), gui_reset(), key_pressed(), mask_callback(), notebook_button_press(), profile_changed(), rt_auto_levels_callback(), rt_display_wavelet_scale_callback(), rt_edit_masks_callback(), rt_select_algorithm_callback(), rt_shape_buttons_can_start(), rt_showmask_callback(), rt_suppress_callback(), rt_wdbar_button_press(), rt_wdbar_scrolled(), show_luminance_mask_callback(), start_profiling_callback(), and workicc_changed().

◆ dt_iop_set_cache_bypass()

◆ dt_iop_set_darktable_iop_table()

◆ dt_iop_set_description()

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 at line 3141 of file imageop.c.

References process(), and dt_iop_roi_t::y.

Referenced by description().

◆ dt_iop_set_mask_mode()

void dt_iop_set_mask_mode ( dt_iop_module_t module,
int  mask_mode 
)

make sure the raster mask is advertised if available

Definition at line 1616 of file imageop.c.

References dt_develop_blend_get_mask_usage(), dt_history_item_get_name(), FALSE, key, void(), and dt_iop_roi_t::y.

Referenced by _blendop_masks_mode_callback(), and dt_iop_commit_blend_params().

◆ dt_iop_so_is_hidden()

gboolean dt_iop_so_is_hidden ( dt_iop_module_so_t module)

checks if iop do have an ui

Definition at line 1112 of file imageop.c.

References FALSE, IOP_FLAGS_HIDDEN, IS_NULL_PTR, TRUE, and dt_iop_roi_t::y.

Referenced by dt_iop_is_hidden().

◆ dt_iop_throttled_history_update()

◆ dt_iop_unload_modules_so()

void dt_iop_unload_modules_so ( void  )

cleans up the dlopen refs.

Definition at line 1598 of file imageop.c.

References _iop_presets_select_stmt, darktable, dt_free, darktable_t::iop, IS_NULL_PTR, and dt_iop_roi_t::y.

Referenced by dt_cleanup().

◆ dt_iop_update_multi_priority()

◆ dt_sfence()

static void dt_sfence ( )
inlinestatic

Definition at line 680 of file imageop.h.