Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
iop_order.h File Reference
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  dt_iop_order_entry_t
 
struct  dt_iop_order_rule_t
 

Typedefs

typedef enum dt_iop_order_t dt_iop_order_t
 
typedef struct dt_iop_order_entry_t dt_iop_order_entry_t
 
typedef struct dt_iop_order_rule_t dt_iop_order_rule_t
 

Enumerations

enum  dt_iop_order_t {
  DT_IOP_ORDER_CUSTOM = 0 ,
  DT_IOP_ORDER_LEGACY = 1 ,
  DT_IOP_ORDER_V30 = 2 ,
  DT_IOP_ORDER_V30_JPG = 3 ,
  DT_IOP_ORDER_LAST = 4
}
 

Functions

const char * dt_iop_order_string (const dt_iop_order_t order)
 Return the human-readable name for an IOP order enum value.
 
dt_iop_order_t dt_ioppr_get_iop_order_version (const int32_t imgid)
 Fetch the IOP order version stored for an image.
 
dt_iop_order_t dt_ioppr_get_iop_order_list_kind (GList *iop_order_list)
 Determine the kind of an order list by inspecting its content.
 
gboolean dt_ioppr_has_iop_order_list (int32_t imgid)
 Check whether the image has an explicit order list stored in DB.
 
GList * dt_ioppr_get_iop_order_list (int32_t imgid, gboolean sorted)
 Load the order list for an image from the DB.
 
GList * dt_ioppr_get_iop_order_list_version (dt_iop_order_t version)
 Return the built-in order list for a given version.
 
GList * dt_ioppr_get_iop_order_link (GList *iop_order_list, const char *op_name, const int multi_priority)
 Find a list link matching an operation and instance.
 
gboolean dt_ioppr_has_multiple_instances (GList *iop_order_list)
 Detect whether multiple instances are grouped for a non-custom order.
 
int dt_ioppr_get_iop_order (GList *iop_order_list, const char *op_name, const int multi_priority)
 Return the iop_order for a given operation/instance pair.
 
gboolean dt_ioppr_write_iop_order_list (GList *iop_order_list, const int32_t imgid)
 Persist an order list to the DB for a given image.
 
voiddt_ioppr_serialize_iop_order_list (GList *iop_order_list, size_t *size)
 Serialize an order list into a binary blob (used for presets).
 
GList * dt_ioppr_deserialize_iop_order_list (const char *buf, size_t size)
 Deserialize an order list from a binary blob.
 
char * dt_ioppr_serialize_text_iop_order_list (GList *iop_order_list)
 Serialize an order list to a text representation.
 
GList * dt_ioppr_deserialize_text_iop_order_list (const char *buf)
 Deserialize an order list from a text representation.
 
void dt_ioppr_insert_module_instance (struct dt_develop_t *dev, struct dt_iop_module_t *module)
 Ensure a module instance has an entry in dev->iop_order_list.
 
void dt_ioppr_resync_modules_order (struct dt_develop_t *dev)
 Update dev->iop module order values from dev->iop_order_list.
 
void dt_ioppr_resync_pipeline (struct dt_develop_t *dev, const int32_t imgid, const char *msg, gboolean check_duplicates)
 Resynchronize pipeline order and related structures.
 
void dt_ioppr_rebuild_iop_order_from_modules (struct dt_develop_t *dev, GList *ordered_modules)
 Rebuild dev->iop_order_list from a list of ordered modules.
 
void dt_ioppr_update_for_style_items (struct dt_develop_t *dev, GList *st_items, gboolean append)
 Update dev->iop_order_list with modules referenced by style items.
 
void dt_ioppr_update_for_modules (struct dt_develop_t *dev, GList *modules, gboolean append)
 Update dev->iop_order_list with modules from a module list.
 
void dt_ioppr_set_default_iop_order (struct dt_develop_t *dev, const int32_t imgid)
 Set dev->iop_order_list to the default order for a given image.
 
void dt_ioppr_change_iop_order (struct dt_develop_t *dev, const int32_t imgid, GList *new_iop_list)
 Replace the current order list with a new one and persist it.
 
int dt_ioppr_check_so_iop_order (GList *iop_list, GList *iop_order_list)
 Check whether any module .so is missing an iop_order entry.
 
GList * dt_ioppr_get_iop_order_rules ()
 Return the list of ordering rules (prev/next constraints).
 
GList * dt_ioppr_iop_order_copy_deep (GList *iop_order_list)
 Deep-copy an order list.
 
gint dt_sort_iop_by_order (gconstpointer a, gconstpointer b)
 Compare two module instances by iop_order for sorting.
 
gint dt_sort_iop_list_by_order_f (gconstpointer a, gconstpointer b)
 Compare two list nodes holding modules by iop_order.
 
gboolean dt_ioppr_check_can_move_before_iop (GList *iop_list, struct dt_iop_module_t *module, struct dt_iop_module_t *module_next)
 Validate whether module can be moved before module_next.
 
gboolean dt_ioppr_check_can_move_after_iop (GList *iop_list, struct dt_iop_module_t *module, struct dt_iop_module_t *module_prev)
 Validate whether module can be moved after module_prev.
 
gboolean dt_ioppr_move_iop_before (struct dt_develop_t *dev, struct dt_iop_module_t *module, struct dt_iop_module_t *module_next)
 Move a module instance before another module in the pipe.
 
gboolean dt_ioppr_move_iop_after (struct dt_develop_t *dev, struct dt_iop_module_t *module, struct dt_iop_module_t *module_prev)
 Move a module instance after another module in the pipe.
 
int dt_ioppr_check_iop_order (struct dt_develop_t *dev, const int32_t imgid, const char *msg)
 Debug helper to validate the current order for a develop context.
 

Typedef Documentation

◆ dt_iop_order_entry_t

◆ dt_iop_order_rule_t

◆ dt_iop_order_t

Enumeration Type Documentation

◆ dt_iop_order_t

Enumerator
DT_IOP_ORDER_CUSTOM 
DT_IOP_ORDER_LEGACY 
DT_IOP_ORDER_V30 
DT_IOP_ORDER_V30_JPG 
DT_IOP_ORDER_LAST 

Function Documentation

◆ dt_iop_order_string()

const char * dt_iop_order_string ( const dt_iop_order_t  order)

Return the human-readable name for an IOP order enum value.

This is mostly used for debug strings, logs, and UI messages.

Parameters
orderIOP order enum value.
Returns
Static string describing the order.

References DT_IOP_ORDER_LAST, and iop_order_string.

Referenced by _gui_styles_dialog_run(), get_query_string(), list_view(), and update().

◆ dt_ioppr_change_iop_order()

void dt_ioppr_change_iop_order ( struct dt_develop_t dev,
const int32_t  imgid,
GList *  new_iop_list 
)

Replace the current order list with a new one and persist it.

Parameters
devDevelop context.
imgidImage id.
new_iop_listNew order list (ownership remains with caller).

References darktable, darktable_t::develop, dt_dev_write_history(), dt_free_gpointer(), DT_IOP_ORDER_CUSTOM, dt_ioppr_extract_multi_instances_list(), dt_ioppr_iop_order_copy_deep(), dt_ioppr_merge_multi_instance_iop_order_list(), dt_ioppr_migrate_iop_order(), dt_ioppr_write_iop_order(), and dt_develop_t::iop_order_list.

Referenced by gui_reset(), and set_params().

◆ dt_ioppr_check_can_move_after_iop()

gboolean dt_ioppr_check_can_move_after_iop ( GList *  iop_list,
struct dt_iop_module_t module,
struct dt_iop_module_t module_prev 
)

Validate whether module can be moved after module_prev.

Parameters
iop_listCurrent module list.
moduleModule to move.
module_prevTarget module that should precede.
Returns
TRUE if move is allowed, FALSE otherwise.

References dt_ioppr_check_can_move_before_iop(), FALSE, dt_iop_module_t::iop_order, dt_iop_module_t::multi_name, dt_iop_module_t::op, dt_iop_module_t::raster_mask, dt_iop_module_t::sink, and dt_iop_module_t::source.

Referenced by _dev_module_update_multishow(), and _on_drag_motion().

◆ dt_ioppr_check_can_move_before_iop()

gboolean dt_ioppr_check_can_move_before_iop ( GList *  iop_list,
struct dt_iop_module_t module,
struct dt_iop_module_t module_next 
)

Validate whether module can be moved before module_next.

Parameters
iop_listCurrent module list.
moduleModule to move.
module_nextTarget module that should follow.
Returns
TRUE if move is allowed, FALSE otherwise.

References darktable, FALSE, IOP_FLAGS_FENCE, dt_iop_module_t::iop_order, darktable_t::iop_order_rules, dt_iop_module_t::multi_name, dt_iop_module_t::op, dt_iop_module_t::raster_mask, dt_iop_module_t::sink, dt_iop_module_t::source, and TRUE.

Referenced by _dev_module_update_multishow(), _on_drag_motion(), and dt_ioppr_check_can_move_after_iop().

◆ dt_ioppr_check_iop_order()

int dt_ioppr_check_iop_order ( struct dt_develop_t dev,
const int32_t  imgid,
const char *  msg 
)

Debug helper to validate the current order for a develop context.

Logs inconsistencies and optionally reports the state with msg.

Parameters
devDevelop context.
imgidImage id (for diagnostics).
msgOptional debug message.
Returns
0 on success, non-zero if issues were detected.

References _ioppr_check_rules(), DT_DEBUG_PARAMS, dt_print(), dt_develop_t::history, dt_develop_t::iop, dt_iop_module_t::iop_order, dt_iop_module_t::multi_name, dt_iop_module_t::multi_priority, and dt_iop_module_t::op.

Referenced by _apply_style_before_export(), _gui_movedown_callback(), _gui_moveup_callback(), _on_drag_data_received(), dt_dev_modules_update_multishow(), and dt_ioppr_resync_pipeline().

◆ dt_ioppr_check_so_iop_order()

int dt_ioppr_check_so_iop_order ( GList *  iop_list,
GList *  iop_order_list 
)

Check whether any module .so is missing an iop_order entry.

Parameters
iop_listList of module .so entries.
iop_order_listCurrent order list.
Returns
1 if any module is missing an entry, 0 otherwise.

References dt_ioppr_get_iop_order_entry().

Referenced by dt_init().

◆ dt_ioppr_deserialize_iop_order_list()

GList * dt_ioppr_deserialize_iop_order_list ( const char *  buf,
size_t  size 
)

Deserialize an order list from a binary blob.

Parameters
bufSerialized buffer.
sizeBuffer size in bytes.
Returns
Newly-allocated order list or NULL on error.

References _ioppr_reset_iop_order(), dt_free, dt_free_gpointer(), error(), dt_iop_order_entry_t::instance, dt_iop_order_entry_t::iop_order, dt_iop_order_entry_t::o, dt_iop_order_entry_t::operation, and size.

Referenced by _dev_auto_apply_presets(), set_params(), and update().

◆ dt_ioppr_deserialize_text_iop_order_list()

GList * dt_ioppr_deserialize_text_iop_order_list ( const char *  buf)

◆ dt_ioppr_get_iop_order()

int dt_ioppr_get_iop_order ( GList *  iop_order_list,
const char *  op_name,
const int  multi_priority 
)

Return the iop_order for a given operation/instance pair.

Parameters
iop_order_listOrder list to search.
op_nameOperation name.
multi_priorityInstance priority.
Returns
The iop_order value, or 0 if not found.

References dt_ioppr_get_iop_order_entry().

Referenced by _process_history_db_entry(), _show_hide_colorspace(), default_input_format(), default_output_format(), default_tiling_callback(), dt_ioppr_get_pipe_current_profile_info(), dt_ioppr_resync_modules_order(), dt_ioppr_update_for_modules(), dt_ioppr_update_for_style_items(), and sanity_check().

◆ dt_ioppr_get_iop_order_link()

GList * dt_ioppr_get_iop_order_link ( GList *  iop_order_list,
const char *  op_name,
const int  multi_priority 
)

Find a list link matching an operation and instance.

Parameters
iop_order_listOrder list to search.
op_nameOperation name.
multi_priorityInstance priority.
Returns
The matching list node or NULL if not found.

References dt_iop_order_entry_t::instance, and dt_iop_order_entry_t::operation.

Referenced by dt_exif_xmp_read(), dt_ioppr_get_iop_order_entry(), dt_ioppr_merge_module_multi_instance_iop_order_list(), dt_ioppr_move_iop_after(), and dt_ioppr_move_iop_before().

◆ dt_ioppr_get_iop_order_list()

GList * dt_ioppr_get_iop_order_list ( int32_t  imgid,
gboolean  sorted 
)

◆ dt_ioppr_get_iop_order_list_kind()

dt_iop_order_t dt_ioppr_get_iop_order_list_kind ( GList *  iop_order_list)

Determine the kind of an order list by inspecting its content.

Compares the list ordering to the known built-in lists to decide whether this is a built-in version or a custom order.

Parameters
iop_order_listList of dt_iop_order_entry_t.
Returns
A built-in order version or DT_IOP_ORDER_CUSTOM.

References DT_IOP_ORDER_CUSTOM, DT_IOP_ORDER_LEGACY, DT_IOP_ORDER_V30, DT_IOP_ORDER_V30_JPG, FALSE, legacy_order, TRUE, v30_jpg_order, and v30_order.

Referenced by _upgrade_library_schema_step(), dt_ioppr_write_iop_order_list(), and update().

◆ dt_ioppr_get_iop_order_list_version()

GList * dt_ioppr_get_iop_order_list_version ( dt_iop_order_t  version)

Return the built-in order list for a given version.

Parameters
versionBuilt-in order version.
Returns
A newly-allocated list of dt_iop_order_entry_t.

References _table_to_list(), DT_IOP_ORDER_LEGACY, DT_IOP_ORDER_V30, DT_IOP_ORDER_V30_JPG, legacy_order, v30_jpg_order, and v30_order.

Referenced by _dev_auto_apply_presets(), _upgrade_data_schema_step(), _upgrade_library_schema_step(), dt_exif_xmp_read(), gui_reset(), and init_presets().

◆ dt_ioppr_get_iop_order_rules()

GList * dt_ioppr_get_iop_order_rules ( )

Return the list of ordering rules (prev/next constraints).

Returns
List of dt_iop_order_rule_t.

References i, dt_iop_order_rule_t::op_next, and dt_iop_order_rule_t::op_prev.

Referenced by dt_init().

◆ dt_ioppr_get_iop_order_version()

dt_iop_order_t dt_ioppr_get_iop_order_version ( const int32_t  imgid)

Fetch the IOP order version stored for an image.

If the image has no stored order, this falls back to the default (currently DT_IOP_ORDER_V30).

Parameters
imgidImage id.
Returns
Stored order version or the default built-in order.

References darktable, darktable_t::db, dt_database_get(), DT_DEBUG_SQLITE3_BIND_INT, DT_DEBUG_SQLITE3_PREPARE_V2, and DT_IOP_ORDER_V30.

Referenced by _exif_xmp_read_data(), _exif_xmp_read_data_export(), and _gui_styles_dialog_run().

◆ dt_ioppr_has_iop_order_list()

gboolean dt_ioppr_has_iop_order_list ( int32_t  imgid)

Check whether the image has an explicit order list stored in DB.

Parameters
imgidImage id.
Returns
TRUE if an order list exists, FALSE otherwise.

References darktable, darktable_t::db, dt_database_get(), DT_DEBUG_SQLITE3_BIND_INT, DT_DEBUG_SQLITE3_PREPARE_V2, and FALSE.

Referenced by _dev_auto_apply_presets().

◆ dt_ioppr_has_multiple_instances()

gboolean dt_ioppr_has_multiple_instances ( GList *  iop_order_list)

Detect whether multiple instances are grouped for a non-custom order.

Used to decide if a list follows the built-in ordering conventions.

Parameters
iop_order_listOrder list to inspect.
Returns
TRUE if instances are grouped together, FALSE otherwise.

References FALSE, and TRUE.

Referenced by _exif_xmp_read_data(), _exif_xmp_read_data_export(), and dt_ioppr_write_iop_order().

◆ dt_ioppr_insert_module_instance()

void dt_ioppr_insert_module_instance ( struct dt_develop_t dev,
struct dt_iop_module_t module 
)

Ensure a module instance has an entry in dev->iop_order_list.

Inserts a new entry if missing, keeping list consistency for subsequent reordering or serialization.

Parameters
devDevelop context.
moduleModule instance to insert.

References dt_iop_order_entry_t::instance, dt_iop_order_entry_t::iop_order, dt_develop_t::iop_order_list, dt_iop_order_entry_t::o, and dt_iop_order_entry_t::operation.

Referenced by dt_dev_module_duplicate().

◆ dt_ioppr_iop_order_copy_deep()

GList * dt_ioppr_iop_order_copy_deep ( GList *  iop_order_list)

Deep-copy an order list.

Parameters
iop_order_listSource list.
Returns
Newly-allocated list with duplicated entries.

References _dup_iop_order_entry().

Referenced by _hm_backup_dest(), _pop_undo(), dt_dev_history_undo_end_record_locked(), dt_dev_history_undo_start_record_locked(), dt_dev_pixelpipe_create_nodes(), dt_ioppr_change_iop_order(), and dt_ioppr_merge_multi_instance_iop_order_list().

◆ dt_ioppr_move_iop_after()

gboolean dt_ioppr_move_iop_after ( struct dt_develop_t dev,
struct dt_iop_module_t module,
struct dt_iop_module_t module_prev 
)

Move a module instance after another module in the pipe.

Updates module ordering and related lists.

Parameters
devDevelop context.
moduleModule to move.
module_prevModule that should precede after move.
Returns
TRUE if move succeeded, FALSE otherwise.

References dt_ioppr_get_iop_order_link(), dt_ioppr_resync_modules_order(), FALSE, dt_develop_t::iop_order_list, dt_iop_module_t::multi_priority, dt_iop_module_t::op, and TRUE.

Referenced by _gui_moveup_callback(), _on_drag_data_received(), and dt_dev_module_duplicate().

◆ dt_ioppr_move_iop_before()

gboolean dt_ioppr_move_iop_before ( struct dt_develop_t dev,
struct dt_iop_module_t module,
struct dt_iop_module_t module_next 
)

Move a module instance before another module in the pipe.

Updates module ordering and related lists.

Parameters
devDevelop context.
moduleModule to move.
module_nextModule that should follow after move.
Returns
TRUE if move succeeded, FALSE otherwise.

References dt_ioppr_get_iop_order_link(), dt_ioppr_resync_modules_order(), FALSE, dt_develop_t::iop_order_list, dt_iop_module_t::multi_priority, dt_iop_module_t::op, and TRUE.

Referenced by _gui_movedown_callback(), and _on_drag_data_received().

◆ dt_ioppr_rebuild_iop_order_from_modules()

void dt_ioppr_rebuild_iop_order_from_modules ( struct dt_develop_t dev,
GList *  ordered_modules 
)

◆ dt_ioppr_resync_modules_order()

void dt_ioppr_resync_modules_order ( struct dt_develop_t dev)

◆ dt_ioppr_resync_pipeline()

void dt_ioppr_resync_pipeline ( struct dt_develop_t dev,
const int32_t  imgid,
const char *  msg,
gboolean  check_duplicates 
)

Resynchronize pipeline order and related structures.

Rebuilds ordering for modules/history and optionally checks for duplicate iop_order values.

Parameters
devDevelop context.
imgidImage id (for diagnostics).
msgOptional debug message.
check_duplicatesWhether to validate duplicate iop_order entries.

References dt_ioppr_check_duplicate_iop_order(), dt_ioppr_check_iop_order(), dt_ioppr_resync_iop_list(), dt_ioppr_resync_modules_order(), dt_develop_t::history, and dt_develop_t::iop.

Referenced by _styles_init_source_dev(), _styles_sync_pipeline_from_items(), dt_dev_pop_history_items_ext(), dt_dev_read_history_ext(), dt_dev_replace_history_on_image(), dt_history_merge(), and dt_styles_apply_style_item().

◆ dt_ioppr_serialize_iop_order_list()

void * dt_ioppr_serialize_iop_order_list ( GList *  iop_order_list,
size_t *  size 
)

Serialize an order list into a binary blob (used for presets).

Parameters
iop_order_listOrder list to serialize.
sizeOutput size of the serialized blob.
Returns
Allocated buffer to be freed by the caller.

References size.

Referenced by get_params(), and init_presets().

◆ dt_ioppr_serialize_text_iop_order_list()

char * dt_ioppr_serialize_text_iop_order_list ( GList *  iop_order_list)

Serialize an order list to a text representation.

Parameters
iop_order_listOrder list to serialize.
Returns
Newly-allocated NUL-terminated string.

Referenced by _dt_style_update_iop_order(), _exif_xmp_read_data(), _exif_xmp_read_data_export(), _upgrade_library_schema_step(), dt_ioppr_write_iop_order(), dt_styles_create_style_header(), dt_styles_save_to_file(), and update().

◆ dt_ioppr_set_default_iop_order()

void dt_ioppr_set_default_iop_order ( struct dt_develop_t dev,
const int32_t  imgid 
)

Set dev->iop_order_list to the default order for a given image.

Uses the image type/workflow to pick an appropriate built-in list.

Parameters
devDevelop context.
imgidImage id.

References _ioppr_reset_iop_order(), dt_free_gpointer(), dt_ioppr_get_iop_order_list(), dt_ioppr_resync_modules_order(), FALSE, and dt_develop_t::iop_order_list.

Referenced by _dev_auto_apply_presets(), _styles_init_source_dev(), dt_dev_read_history_ext(), and dt_ioppr_migrate_iop_order().

◆ dt_ioppr_update_for_modules()

void dt_ioppr_update_for_modules ( struct dt_develop_t dev,
GList *  modules,
gboolean  append 
)

Update dev->iop_order_list with modules from a module list.

Parameters
devDevelop context.
modulesList of module instances.
appendWhether to append new entries at the end (TRUE) or merge into list order (FALSE).

References dt_free_gpointer(), dt_ioppr_get_iop_order(), dt_ioppr_update_for_entries(), dt_iop_order_entry_t::instance, dt_iop_module_t::iop_order, dt_develop_t::iop_order_list, dt_iop_module_t::multi_priority, n, and dt_iop_module_t::op.

◆ dt_ioppr_update_for_style_items()

void dt_ioppr_update_for_style_items ( struct dt_develop_t dev,
GList *  st_items,
gboolean  append 
)

Update dev->iop_order_list with modules referenced by style items.

Parameters
devDevelop context.
st_itemsStyle items list.
appendWhether to append new entries at the end (TRUE) or merge into list order (FALSE).

References dt_ioppr_get_iop_order(), dt_ioppr_update_for_entries(), dt_style_item_t::iop_order, dt_develop_t::iop_order_list, dt_style_item_t::multi_priority, n, and dt_style_item_t::operation.

Referenced by _apply_style_before_export(), and _styles_sync_pipeline_from_items().

◆ dt_ioppr_write_iop_order_list()

gboolean dt_ioppr_write_iop_order_list ( GList *  iop_order_list,
const int32_t  imgid 
)

Persist an order list to the DB for a given image.

Parameters
iop_order_listOrder list to store.
imgidImage id.
Returns
TRUE on success, FALSE on error.

References dt_ioppr_get_iop_order_list_kind(), dt_ioppr_write_iop_order(), and kind.

Referenced by _dev_auto_apply_presets(), dt_dev_write_history_ext(), and dt_exif_xmp_read().

◆ dt_sort_iop_by_order()

gint dt_sort_iop_by_order ( gconstpointer  a,
gconstpointer  b 
)

Compare two module instances by iop_order for sorting.

Parameters
aFirst module pointer.
bSecond module pointer.
Returns
Sorting comparison result.

References a, and b.

Referenced by _check_deleted_instances(), _create_deleted_modules(), dt_dev_history_refresh_nodes_ext(), dt_dev_load_modules(), dt_dev_module_duplicate(), and dt_ioppr_resync_modules_order().

◆ dt_sort_iop_list_by_order_f()

gint dt_sort_iop_list_by_order_f ( gconstpointer  a,
gconstpointer  b 
)

Compare two list nodes holding modules by iop_order.

Parameters
aGList node containing a module.
bGList node containing a module.
Returns
Sorting comparison result.

References a, and b.

Referenced by _upgrade_library_schema_step(), and dt_exif_xmp_read().