![]() |
Ansel 0.0
A darktable fork - bloat + design vision
|
#include "common/darktable.h"#include "common/history.h"#include "common/undo.h"#include "common/history_snapshot.h"#include "common/image_cache.h"#include "common/history_merge.h"#include "common/iop_order.h"#include "develop/dev_history.h"#include "develop/blend.h"#include "develop/develop.h"#include "develop/imageop.h"#include "develop/masks.h"#include "gui/presets.h"#include <inttypes.h>#include <glib.h>
Include dependency graph for dev_history.c:Data Structures | |
| struct | dt_dev_history_db_ctx_t |
| struct | dt_undo_history_t |
| struct | _cb_data |
Typedefs | |
| typedef struct dt_dev_history_db_ctx_t | dt_dev_history_db_ctx_t |
| typedef struct dt_undo_history_t | dt_undo_history_t |
| typedef gboolean(* | dt_iop_module_filter_t) (dt_iop_module_t *module) |
Functions | |
| static void | _process_history_db_entry (dt_develop_t *dev, const int32_t imgid, const int id, const int num, const int modversion, const char *operation, const void *module_params, const int param_length, const gboolean enabled, const void *blendop_params, const int bl_length, const int blendop_version, const int multi_priority, const char *multi_name, const char *preset_name, int *legacy_params, const gboolean presets) |
| Build a history item from DB row data and append it to dev->history. | |
| gboolean | dt_dev_init_default_history (dt_develop_t *dev, const int32_t imgid, gboolean apply_auto_presets) |
| Initialize module defaults and insert required default modules. | |
| static void | _dev_history_db_row_cb (void *user_data, const int32_t id, const int num, const int modversion, const char *operation, const void *module_params, const int param_length, const gboolean enabled, const void *blendop_params, const int bl_length, const int blendop_version, const int multi_priority, const char *multi_name, const char *preset_name) |
| Adapter callback for history DB rows. | |
| dt_dev_history_item_t * | dt_dev_history_get_first_item_by_module (GList *history_list, dt_iop_module_t *module) |
| Find the first history item referencing a module. | |
| dt_dev_history_item_t * | dt_dev_history_get_last_item_by_module (GList *history_list, dt_iop_module_t *module, int history_end) |
| Find the last history item referencing a module up to history_end. | |
| gboolean | dt_dev_history_item_update_from_params (dt_develop_t *dev, dt_dev_history_item_t *hist, dt_iop_module_t *module, const gboolean enabled, const void *params, const int32_t params_size, const dt_develop_blend_params_t *blend_params, GList *forms) |
| int | dt_dev_next_multi_priority_for_op (dt_develop_t *dev, const char *op) |
| Return the next available multi_priority for an operation. | |
| dt_iop_module_t * | dt_dev_get_module_instance (dt_develop_t *dev, const char *op, const char *multi_name, const int multi_priority) |
| Find a module instance by op name and instance metadata. | |
| dt_iop_module_t * | dt_dev_create_module_instance (dt_develop_t *dev, const char *op, const char *multi_name, const int multi_priority, gboolean use_next_priority) |
| Create a new module instance from an existing base .so. | |
| int | dt_dev_copy_module_contents (dt_develop_t *dev_dest, dt_develop_t *dev_src, dt_iop_module_t *mod_dest, const dt_iop_module_t *mod_src) |
| int | dt_dev_history_item_from_source_history_item (dt_develop_t *dev_dest, dt_develop_t *dev_src, const dt_dev_history_item_t *hist_src, dt_iop_module_t *mod_dest, dt_dev_history_item_t **out_hist) |
| int | dt_dev_merge_history_into_image (dt_develop_t *dev_src, int32_t dest_imgid, const GList *mod_list, gboolean merge_iop_order, const dt_history_merge_strategy_t mode, const gboolean paste_instances) |
| Merge a list of modules into a destination image history via dt_history_merge(). | |
| static dt_dev_history_item_t * | _search_history_by_op (dt_develop_t *dev, const dt_iop_module_t *module) |
| Find the first history item matching a module operation name. | |
| static dt_iop_module_t * | _history_merge_resolve_dest_instance (dt_develop_t *dev_dest, const dt_iop_module_t *mod_src, gboolean *created, gboolean *reused_base) |
| Resolve or create the destination module instance for history merge. | |
| int | dt_history_merge_module_into_history (dt_develop_t *dev_dest, dt_develop_t *dev_src, dt_iop_module_t *mod_src) |
| Merge a single module instance into a destination history. | |
| GList * | dt_history_duplicate (GList *hist) |
| Deep-copy a history list. | |
| static void | _history_invalidate_cb (gpointer user_data, dt_undo_type_t type, dt_undo_data_t item) |
| Undo iterator callback to invalidate module pointers in snapshots. | |
| void | dt_dev_history_undo_invalidate_module (dt_iop_module_t *module) |
| Invalidate a module pointer inside undo snapshots. | |
| static void | _history_undo_data_free (gpointer data) |
| Free an undo history snapshot structure. | |
| static void | _pop_undo (gpointer user_data, dt_undo_type_t type, dt_undo_data_t data, dt_undo_action_t action, GList **imgs) |
| Apply an undo/redo history snapshot to a develop context. | |
| void | dt_dev_history_undo_start_record (dt_develop_t *dev) |
| Start an undo record for history changes. | |
| void | dt_dev_history_undo_start_record_locked (dt_develop_t *dev) |
| Start an undo record with history_mutex already locked. | |
| void | dt_dev_history_undo_end_record (dt_develop_t *dev) |
| Finish an undo record for history changes. | |
| void | dt_dev_history_undo_end_record_locked (dt_develop_t *dev) |
| Finish an undo record with history_mutex already locked. | |
| static void | _remove_history_leaks (dt_develop_t *dev) |
| Remove history items past history_end when allowed. | |
| gboolean | dt_dev_add_history_item_ext (dt_develop_t *dev, struct dt_iop_module_t *module, gboolean enable, gboolean force_new_item) |
| Append or update a history item for a module. | |
| uint64_t | dt_dev_history_compute_hash (dt_develop_t *dev) |
| Get the integrity checksum of the whole history stack. This should be done ONLY when history is changed, read or written. | |
| void | dt_dev_add_history_item_real (dt_develop_t *dev, dt_iop_module_t *module, gboolean enable, gboolean redraw) |
| Thread-safe wrapper around dt_dev_add_history_item_ext(). | |
| void | dt_dev_free_history_item (gpointer data) |
| Free a single history item (used as GList free callback). | |
| void | dt_dev_history_free_history (dt_develop_t *dev) |
| Free the whole history list attached to dev->history. | |
| void | dt_dev_reload_history_items (dt_develop_t *dev, const int32_t imgid) |
| Reload history from DB and rebuild pipelines/GUI state. | |
| static void | _dt_dev_modules_reload_defaults (dt_develop_t *dev) |
| Reload defaults for all modules in dev->iop. | |
| static void | _history_to_module (const dt_dev_history_item_t *const hist, dt_iop_module_t *module) |
| Apply a history item to a module instance. | |
| void | dt_dev_pop_history_items_ext (dt_develop_t *dev) |
| Apply history items to module params up to dev->history_end. | |
| void | dt_dev_pop_history_items (dt_develop_t *dev) |
| Thread-safe wrapper around dt_dev_pop_history_items_ext(), then update GUI. | |
| void | dt_dev_history_gui_update (dt_develop_t *dev) |
| Apply history-loaded params to module GUIs. | |
| void | dt_dev_history_pixelpipe_update (dt_develop_t *dev, gboolean rebuild) |
| Rebuild or resync pixelpipes after backend history changes. | |
| static void | _cleanup_history (const int32_t imgid) |
| Delete all history entries for an image from the DB. | |
| guint | dt_dev_mask_history_overload (GList *dev_history, guint threshold) |
| void | dt_dev_history_notify_change (dt_develop_t *dev, const int32_t imgid) |
| Notify the rest of the app that history changes were written. | |
| int | dt_dev_write_history_item (const int32_t imgid, dt_dev_history_item_t *h, int32_t num) |
| void | dt_dev_history_cleanup (void) |
| Cleanup cached statements or state used by history I/O. | |
| void | dt_dev_write_history_ext (dt_develop_t *dev, const int32_t imgid) |
| Write dev->history to DB and XMP for a given image id. | |
| void | dt_dev_write_history (dt_develop_t *dev) |
| Thread-safe wrapper around dt_dev_write_history_ext() for dev->image_storage.id. | |
| static gboolean | _dev_auto_apply_presets (dt_develop_t *dev, int32_t imgid) |
| Apply auto-presets and default iop order for a fresh history. | |
| static void | _insert_default_modules (dt_develop_t *dev, dt_iop_module_t *module, gboolean is_inited) |
| Insert default modules into history when needed. | |
| int | dt_dev_replace_history_on_image (dt_develop_t *dev_src, const int32_t dest_imgid, const gboolean reload_defaults, const char *msg) |
Replace an image history with the content of dev_src. | |
| static void | _find_so_for_history_entry (dt_develop_t *dev, dt_dev_history_item_t *hist) |
| Bind a history entry to a module instance (.so) in dev->iop. | |
| static void | _sync_blendop_params (dt_dev_history_item_t *hist, const void *blendop_params, const int bl_length, const int blendop_version, int *legacy_params) |
| Load or convert blendop params into a history item. | |
| static int | _sync_params (dt_dev_history_item_t *hist, const void *module_params, const int param_length, const int modversion, int *legacy_params, const char *preset_name) |
| Load or convert module params into a history item. | |
| gboolean | dt_dev_read_history_ext (dt_develop_t *dev, const int32_t imgid) |
| Read history and masks from DB and populate dev->history. | |
| void | dt_dev_invalidate_history_module (GList *list, dt_iop_module_t *module) |
| Remove a module pointer from a history list. | |
| gboolean | dt_history_module_skip_copy (const int flags) |
| Determine whether a module should be skipped during history copy. | |
| gboolean | _module_leaves_no_history (dt_iop_module_t *module) |
| Return whether a module never writes history entries. | |
| static gboolean | _module_is_default_or_forced_enabled (dt_iop_module_t *module) |
| Check if a module is enabled by default or force-enabled. | |
| static gboolean | _module_params_are_default (dt_iop_module_t *module) |
| Check if module params match defaults. | |
| static gboolean | _module_blend_params_are_default (dt_iop_module_t *module) |
| Check if blend params match defaults. | |
| static gboolean | _module_has_nondefault_internal_params (dt_iop_module_t *module) |
| Check if any module params (including blend params) are non-default. | |
| static void | _dev_history_add_filtered (dt_develop_t *dev, dt_iop_module_filter_t filter) |
| Append history items for modules that pass a filter. | |
| static gboolean | _compress_enabled_default_or_forced (dt_iop_module_t *module) |
| Filter: enabled modules that are default/forced enabled. | |
| static gboolean | _compress_enabled_user_default_params (dt_iop_module_t *module) |
| Filter: enabled modules with default params (user enabled). | |
| static gboolean | _compress_enabled_user_nondefault_params (dt_iop_module_t *module) |
| Filter: enabled modules with non-default params (user edits). | |
| static gboolean | _compress_disabled_with_history (dt_iop_module_t *module) |
| Filter: disabled modules that still need history entries. | |
| static void | _dt_dev_history_compress_internal (dt_develop_t *dev, const gboolean write_history) |
| Rebuild history from current pipeline state. | |
| void | dt_dev_history_compress_ext (dt_develop_t *dev, gboolean write_history) |
| Variant of history compression that optionally skips DB writeback. | |
| void | dt_dev_history_compress (dt_develop_t *dev) |
| Compress an history from a loaded pipeline, aka simply take a snapshot of all modules parameters. This assumes the history end is properly set, which always happens after calling _pop_history_item. | |
| void | dt_dev_history_truncate (dt_develop_t *dev, const int32_t imgid) |
| void | dt_dev_history_compress_or_truncate (dt_develop_t *dev) |
| Compress history if history_end is at top, otherwise truncate. | |
| static int | _check_deleted_instances (dt_develop_t *dev, GList **_iop_list, GList *history_list) |
| Detect and handle module instances that exist in iop list but not in history. | |
| static void | _reorder_gui_module_list (dt_develop_t *dev) |
| Reorder GUI module expanders to match dev->iop order. | |
| static int | _rebuild_multi_priority (GList *history_list) |
| Resync module multi_priority values from history. | |
| static void | _reset_module_instance (GList *hist, dt_iop_module_t *module, int multi_priority) |
| Rebind history items to a module instance after recreation. | |
| static void | _undo_items_cb (gpointer user_data, dt_undo_type_t type, dt_undo_data_t data) |
| Undo iterator callback to fix module pointers in snapshots. | |
| static int | _create_deleted_modules (GList **_iop_list, GList *history_list) |
| Recreate missing module instances referenced by history. | |
| int | dt_dev_history_refresh_nodes_ext (dt_develop_t *dev, GList *iop, GList *history) |
| Refresh GUI module nodes to match history state. | |
| typedef struct dt_dev_history_db_ctx_t dt_dev_history_db_ctx_t |
| typedef gboolean(* dt_iop_module_filter_t) (dt_iop_module_t *module) |
| typedef struct dt_undo_history_t dt_undo_history_t |
|
static |
Detect and handle module instances that exist in iop list but not in history.
| dev | Develop context. |
| _iop_list | Pointer to module list to mutate. |
| history_list | History list. |
References _history_invalidate_cb(), dt_develop_t::alliop, darktable, darktable_t::develop, dt_dev_history_get_first_item_by_module(), dt_iop_gui_cleanup_module(), dt_iop_is_hidden(), dt_iop_request_focus(), dt_sort_iop_by_order(), DT_UNDO_HISTORY, dt_undo_iterate_internal(), dt_iop_module_t::expander, darktable_t::gui, dt_develop_t::gui_module, dt_iop_module_t::multi_name, dt_iop_module_t::multi_priority, dt_iop_module_t::op, dt_gui_gtk_t::reset, darktable_t::undo, and dt_iop_module_t::widget.
Referenced by dt_dev_history_refresh_nodes_ext().
|
static |
Delete all history entries for an image from the DB.
| imgid | Image id. |
References dt_history_db_delete_dev_history().
Referenced by dt_dev_write_history_ext().
|
static |
Filter: disabled modules that still need history entries.
Referenced by _dt_dev_history_compress_internal().
|
static |
Filter: enabled modules that are default/forced enabled.
Referenced by _dt_dev_history_compress_internal().
|
static |
Filter: enabled modules with default params (user enabled).
Referenced by _dt_dev_history_compress_internal().
|
static |
Filter: enabled modules with non-default params (user edits).
Referenced by _dt_dev_history_compress_internal().
|
static |
Recreate missing module instances referenced by history.
This is used during undo/redo when history refers to modules that were deleted from the live module list.
| _iop_list | Pointer to module list to mutate. |
| history_list | History list. |
References _reset_module_instance(), _undo_items_cb(), darktable, dt_iop_module_t::dev, dt_iop_get_module_from_list(), dt_iop_is_hidden(), dt_iop_load_module(), dt_iop_update_multi_priority(), dt_sort_iop_by_order(), DT_UNDO_HISTORY, dt_undo_iterate_internal(), FALSE, darktable_t::gui, dt_dev_history_item_t::multi_name, dt_dev_history_item_t::multi_priority, dt_dev_history_item_t::op_name, dt_gui_gtk_t::reset, dt_iop_module_t::so, TRUE, and darktable_t::undo.
Referenced by dt_dev_history_refresh_nodes_ext().
|
static |
Apply auto-presets and default iop order for a fresh history.
| dev | Develop context. |
| imgid | Image id. |
References _dev_history_db_row_cb(), dt_dev_history_db_ctx_t::dev, dt_free, dt_free_gpointer(), dt_history_db_foreach_auto_preset_row(), dt_history_db_get_autoapply_ioporder_params(), DT_IMAGE_AUTO_PRESETS_APPLIED, dt_image_is_hdr(), dt_image_is_matrix_correction_supported(), dt_image_is_rawprepare_supported(), dt_image_monochrome_flags(), DT_IMAGE_NO_LEGACY_PRESETS, DT_IOP_ORDER_V30, dt_ioppr_deserialize_iop_order_list(), dt_ioppr_get_iop_order_list_version(), dt_ioppr_has_iop_order_list(), dt_ioppr_set_default_iop_order(), dt_ioppr_write_iop_order_list(), dt_image_t::flags, FOR_HDR, FOR_LDR, FOR_NOT_COLOR, FOR_NOT_MONO, FOR_RAW, dt_develop_t::image_storage, legacy_params(), and TRUE.
Referenced by dt_dev_init_default_history().
|
static |
Append history items for modules that pass a filter.
| dev | Develop context. |
| filter | Predicate deciding whether a module should be added. |
References _module_leaves_no_history(), dt_dev_add_history_item_ext(), FALSE, dt_develop_t::iop, and TRUE.
Referenced by _dt_dev_history_compress_internal().
|
static |
Adapter callback for history DB rows.
Converts DB row fields into a history item and appends it to dev->history.
| user_data | Context pointer (dt_dev_history_db_ctx_t). |
| id | Image id from DB row. |
| num | History index. |
| modversion | Module version stored in DB. |
| operation | Operation name. |
| module_params | Module params blob. |
| param_length | Params blob length. |
| enabled | Enabled flag from DB. |
| blendop_params | Blend params blob. |
| bl_length | Blend blob length. |
| blendop_version | Blend params version. |
| multi_priority | Instance priority. |
| multi_name | Instance name. |
| preset_name | Optional preset name (for auto presets). |
References _process_history_db_entry(), dt_dev_history_db_ctx_t::dev, dt_dev_history_db_ctx_t::imgid, dt_dev_history_db_ctx_t::legacy_params, and dt_dev_history_db_ctx_t::presets.
Referenced by _dev_auto_apply_presets(), and dt_dev_read_history_ext().
|
static |
Rebuild history from current pipeline state.
Creates a compact history snapshot and optionally writes it to DB.
| dev | Develop context. |
| write_history | Whether to write to DB/XMP after compression. |
References _compress_disabled_with_history(), _compress_enabled_default_or_forced(), _compress_enabled_user_default_params(), _compress_enabled_user_nondefault_params(), _dev_history_add_filtered(), dt_dev_history_free_history(), dt_dev_pop_history_items_ext(), dt_dev_set_history_end_ext(), dt_dev_write_history_ext(), dt_develop_t::history, dt_image_t::id, and dt_develop_t::image_storage.
Referenced by dt_dev_history_compress(), and dt_dev_history_compress_ext().
|
inlinestatic |
Reload defaults for all modules in dev->iop.
Some modules depend on defaults to initialize GUI state or internal structures.
| dev | Develop context. |
References dt_iop_compute_module_hash(), dt_iop_reload_defaults(), dt_develop_t::forms, and dt_develop_t::iop.
Referenced by dt_dev_pop_history_items_ext().
|
static |
Bind a history entry to a module instance (.so) in dev->iop.
Creates a new instance if a matching one is required but missing.
| dev | Develop context. |
| hist | History item to bind. |
References dt_iop_load_module(), dt_dev_history_item_t::enabled, dt_iop_module_t::instance, dt_develop_t::iop, dt_dev_history_item_t::multi_priority, dt_dev_history_item_t::op_name, and dt_iop_module_t::so.
Referenced by _process_history_db_entry().
|
static |
Undo iterator callback to invalidate module pointers in snapshots.
| user_data | Module pointer to invalidate. |
| type | Undo record type. |
| item | Undo data payload. |
References dt_dev_invalidate_history_module().
Referenced by _check_deleted_instances(), and dt_dev_history_undo_invalidate_module().
|
static |
Resolve or create the destination module instance for history merge.
Attempts to reuse existing instances when possible, otherwise creates a new instance.
| dev_dest | Destination develop context. |
| mod_src | Source module instance. |
| created | Output flag set TRUE if a new instance is created. |
| reused_base | Output flag set TRUE if an existing base instance is reused. |
References _search_history_by_op(), dt_iop_get_module_by_op_priority(), FALSE, dt_develop_t::iop, IOP_FLAGS_ONE_INSTANCE, dt_iop_module_t::op, and TRUE.
|
inlinestatic |
Apply a history item to a module instance.
Copies params/blend params, updates enabled state, and recomputes hashes.
| hist | History item. |
| module | Module instance. |
References dt_dev_history_item_t::blend_params, dt_iop_commit_blend_params(), dt_iop_compute_module_hash(), dt_iop_update_multi_priority(), dt_dev_history_item_t::forms, dt_dev_history_item_t::multi_name, dt_iop_module_t::multi_name, dt_dev_history_item_t::multi_priority, dt_dev_history_item_t::params, dt_iop_module_t::params, and dt_iop_module_t::params_size.
Referenced by dt_dev_pop_history_items_ext(), and dt_dev_read_history_ext().
|
static |
Free an undo history snapshot structure.
| data | Pointer to dt_undo_history_t. |
References dt_undo_history_t::after_iop_order_list, dt_undo_history_t::after_snapshot, dt_undo_history_t::before_iop_order_list, dt_undo_history_t::before_snapshot, dt_dev_free_history_item(), dt_free, and dt_free_gpointer().
Referenced by dt_dev_history_undo_end_record_locked().
|
static |
Insert default modules into history when needed.
Ensures mandatory/default-enabled modules are represented in history, including legacy handling for older histories.
| dev | Develop context. |
| module | Module instance to consider. |
| is_inited | TRUE if auto-presets were already applied. |
References dt_image_t::change_timestamp, dt_iop_module_t::default_enabled, dt_conf_set_string(), DT_DEBUG_HISTORY, dt_dev_add_history_item_ext(), dt_history_check_module_exists(), dt_image_is_matrix_correction_supported(), dt_image_is_raw(), dt_iop_reload_defaults(), dt_print(), FALSE, dt_image_t::id, dt_develop_t::image_storage, IOP_FLAGS_NO_HISTORY_STACK, dt_iop_module_t::op, TRUE, and dt_iop_module_t::workflow_enabled.
Referenced by dt_dev_init_default_history().
|
static |
Check if blend params match defaults.
| module | Module instance. |
References dt_iop_module_t::blend_params, dt_iop_module_t::default_blendop_params, and TRUE.
Referenced by _module_has_nondefault_internal_params().
|
static |
Check if any module params (including blend params) are non-default.
| module | Module instance. |
References _module_blend_params_are_default(), and _module_params_are_default().
|
static |
Check if a module is enabled by default or force-enabled.
| module | Module instance. |
| gboolean _module_leaves_no_history | ( | dt_iop_module_t * | module | ) |
Return whether a module never writes history entries.
| module | Module instance. |
References IOP_FLAGS_NO_HISTORY_STACK.
Referenced by _dev_history_add_filtered().
|
static |
Check if module params match defaults.
| module | Module instance. |
Referenced by _module_has_nondefault_internal_params().
|
static |
Apply an undo/redo history snapshot to a develop context.
Restores history list, history_end, and iop_order_list, then re-populates modules.
| user_data | Develop context. |
| type | Undo record type. |
| data | Undo record payload. |
| action | Undo/redo action. |
| imgs | Unused. |
References dt_undo_history_t::after_end, dt_undo_history_t::after_iop_order_list, dt_undo_history_t::after_snapshot, dt_undo_history_t::before_end, dt_undo_history_t::before_iop_order_list, dt_undo_history_t::before_snapshot, dt_iop_module_t::blend_data, darktable, darktable_t::develop, DT_ACTION_UNDO, DT_DEBUG_CONTROL_SIGNAL_RAISE, dt_dev_history_free_history(), dt_dev_history_gui_update(), dt_dev_history_notify_change(), dt_dev_history_pixelpipe_update(), DT_DEV_PIXELPIPE_DISPLAY_MASK, dt_dev_pop_history_items_ext(), dt_dev_set_history_end_ext(), dt_dev_write_history_ext(), dt_free_gpointer(), dt_history_duplicate(), dt_iop_gui_update_blendif(), dt_ioppr_iop_order_copy_deep(), dt_masks_set_edit_mode(), dt_pthread_rwlock_unlock, dt_pthread_rwlock_wrlock, DT_SIGNAL_DEVELOP_HISTORY_CHANGE, DT_UNDO_HISTORY, darktable_t::gui, dt_develop_t::gui_attached, dt_develop_t::gui_module, dt_develop_t::history, dt_develop_t::history_mutex, dt_image_t::id, dt_develop_t::image_storage, dt_develop_t::iop_order_list, dt_undo_history_t::mask_edit_mode, dt_undo_history_t::request_mask_display, dt_iop_module_t::request_mask_display, dt_iop_gui_blend_data_t::showmask, darktable_t::signals, TRUE, and type.
Referenced by dt_dev_history_undo_end_record_locked().
|
static |
Build a history item from DB row data and append it to dev->history.
Resolves module instance, loads params/blend params, and updates ordering metadata.
| dev | Develop context. |
| imgid | Image id. |
| id | Image id from DB row (sanity-checked). |
| num | History index. |
| modversion | Module version stored in DB. |
| operation | Operation name. |
| module_params | Module params blob. |
| param_length | Module params size. |
| enabled | Enabled flag from DB. |
| blendop_params | Blend params blob. |
| bl_length | Blend params size. |
| blendop_version | Blend params version. |
| multi_priority | Instance priority. |
| multi_name | Instance name. |
| preset_name | Optional preset name (for logging). |
| legacy_params | Output flag set when legacy conversion occurs. |
| presets | TRUE if reading from presets instead of DB history. |
References _find_so_for_history_entry(), _sync_blendop_params(), _sync_params(), DT_DEBUG_HISTORY, dt_free, dt_iop_compute_module_hash(), dt_iop_update_multi_priority(), dt_ioppr_get_iop_order(), dt_print(), dt_dev_history_item_t::enabled, dt_image_t::filename, dt_develop_t::history, dt_develop_t::image_storage, IOP_FLAGS_NO_HISTORY_STACK, dt_dev_history_item_t::iop_order, dt_develop_t::iop_order_list, legacy_params(), dt_dev_history_item_t::multi_name, dt_dev_history_item_t::multi_priority, dt_dev_history_item_t::num, dt_dev_history_item_t::op_name, and TRUE.
Referenced by _dev_history_db_row_cb().
|
static |
Resync module multi_priority values from history.
| history_list | History list. |
References dt_iop_update_multi_priority(), and dt_dev_history_item_t::multi_priority.
Referenced by dt_dev_history_refresh_nodes_ext().
|
static |
Remove history items past history_end when allowed.
Filters out obsolete entries while preserving mandatory modules.
| dev | Develop context. |
References DT_DEBUG_HISTORY, dt_dev_free_history_item(), dt_dev_get_history_end_ext(), dt_print(), FALSE, dt_develop_t::history, and TRUE.
Referenced by dt_dev_add_history_item_ext().
|
static |
Reorder GUI module expanders to match dev->iop order.
| dev | Develop context. |
References darktable, DT_UI_CONTAINER_PANEL_RIGHT_CENTER, dt_ui_get_container(), darktable_t::gui, dt_develop_t::iop, and dt_gui_gtk_t::ui.
Referenced by dt_dev_history_refresh_nodes_ext().
|
static |
Rebind history items to a module instance after recreation.
| hist | History list. |
| module | Module instance. |
| multi_priority | Instance priority to match. |
References dt_dev_history_item_t::multi_priority, dt_iop_module_t::op, and dt_dev_history_item_t::op_name.
Referenced by _create_deleted_modules(), and _undo_items_cb().
|
static |
Find the first history item matching a module operation name.
| dev | Develop context. |
| module | Module instance to match by op name. |
References dt_develop_t::history, and dt_iop_module_t::op.
Referenced by _history_merge_resolve_dest_instance().
|
static |
Load or convert blendop params into a history item.
Handles version mismatch and legacy conversion.
| hist | History item to populate. |
| blendop_params | Raw blend params blob. |
| bl_length | Blob size. |
| blendop_version | Stored version. |
| legacy_params | Output flag set when legacy conversion occurs. |
References dt_dev_history_item_t::blend_params, dt_develop_blend_legacy_params(), dt_develop_blend_version(), legacy_params(), and TRUE.
Referenced by _process_history_db_entry().
|
static |
Load or convert module params into a history item.
Handles version mismatch, legacy conversion and special cases.
| hist | History item to populate. |
| module_params | Raw params blob. |
| param_length | Blob size. |
| modversion | Stored module version. |
| legacy_params | Output flag set when legacy conversion occurs. |
| preset_name | Optional preset name (for logging). |
References dt_dev_history_item_t::blend_params, dt_control_log(), dt_free, dt_dev_history_item_t::enabled, legacy_params(), dt_dev_history_item_t::params, preset, and TRUE.
Referenced by _process_history_db_entry().
|
static |
Undo iterator callback to fix module pointers in snapshots.
| user_data | Callback data (struct _cb_data). |
| type | Undo record type. |
| data | Undo record payload. |
References _reset_module_instance(), dt_undo_history_t::after_snapshot, and _cb_data::multi_priority.
Referenced by _create_deleted_modules().
| gboolean dt_dev_add_history_item_ext | ( | struct dt_develop_t * | dev, |
| struct dt_iop_module_t * | module, | ||
| gboolean | enable, | ||
| gboolean | force_new_item | ||
| ) |
Append or update a history item for a module.
If the last history item matches the module and force_new_item is FALSE, the existing item is reused. Otherwise a new entry is appended. If history items exist after dev->history_end, they may be removed depending on module rules (see dev_history.c).
| dev | |
| module | |
| enable | |
| force_new_item |
References _remove_history_leaks(), dt_iop_module_t::blend_params, DT_DEBUG_HISTORY, dt_dev_history_get_last_item_by_module(), dt_dev_history_item_update_from_params(), dt_dev_set_history_end_ext(), dt_iop_check_modules_equal(), dt_iop_module_needs_mask_history(), dt_masks_snapshot_current_forms(), dt_print(), enable(), dt_dev_history_item_t::enabled, dt_iop_module_t::enabled, FALSE, dt_dev_history_item_t::forms, dt_develop_t::history, dt_dev_history_item_t::num, dt_iop_module_t::params, dt_iop_module_t::params_size, and TRUE.
Referenced by _dev_history_add_filtered(), _insert_default_modules(), _publish_backend_progress(), dt_dev_add_history_item_real(), dt_drawlayer_commit_dabs(), dt_history_merge_module_into_history(), and gui_focus().
| void dt_dev_add_history_item_real | ( | struct dt_develop_t * | dev, |
| struct dt_iop_module_t * | module, | ||
| gboolean | enable, | ||
| gboolean | redraw | ||
| ) |
Thread-safe wrapper around dt_dev_add_history_item_ext().
Locks history mutex, invalidates pipelines, triggers recomputation and schedules history auto-save. This is the typical entry point for GUI actions.
| dev | Develop context. |
| module | Module instance. |
| enable | Enable state. |
| redraw | Whether to force a GUI redraw. |
References darktable, dt_atomic_set_int(), dt_dev_add_history_item_ext(), dt_dev_get_history_end_ext(), dt_dev_get_thumbnail_size(), dt_dev_history_compute_hash(), dt_dev_history_notify_change(), dt_dev_masks_list_update(), dt_dev_pixelpipe_resync_history_all, dt_dev_pixelpipe_update_history_all, dt_dev_set_history_hash(), dt_dev_undo_end_record(), dt_dev_undo_start_record(), dt_dev_write_history(), dt_iop_gui_set_enable_button(), dt_pthread_rwlock_unlock, dt_pthread_rwlock_wrlock, enable(), FALSE, dt_dev_history_item_t::forms, darktable_t::gui, dt_develop_t::gui_attached, dt_develop_t::history, dt_develop_t::history_mutex, dt_image_t::id, dt_develop_t::image_storage, dt_develop_t::pipe, dt_develop_t::preview_pipe, dt_gui_gtk_t::reset, dt_dev_pixelpipe_t::shutdown, TRUE, and dt_develop_t::virtual_pipe.
| int dt_dev_copy_module_contents | ( | dt_develop_t * | dev_dest, |
| dt_develop_t * | dev_src, | ||
| dt_iop_module_t * | mod_dest, | ||
| const dt_iop_module_t * | mod_src | ||
| ) |
| dt_iop_module_t * dt_dev_create_module_instance | ( | struct dt_develop_t * | dev, |
| const char * | op, | ||
| const char * | multi_name, | ||
| const int | multi_priority, | ||
| gboolean | use_next_priority | ||
| ) |
Create a new module instance from an existing base .so.
| dev | Develop context. |
| op | Operation name. |
| multi_name | Instance name (may be NULL/empty). |
| multi_priority | Instance priority. |
| use_next_priority | If TRUE, auto-pick the next priority for this op. |
References dt_free, dt_iop_get_module_by_op_priority(), dt_iop_load_module(), dt_develop_t::iop, IOP_FLAGS_ONE_INSTANCE, and dt_iop_module_t::so.
Referenced by _hm_topo_apply_solution().
| void dt_dev_free_history_item | ( | gpointer | data | ) |
Free a single history item (used as GList free callback).
| data | Pointer to dt_dev_history_item_t. |
References dt_dev_history_item_t::blend_params, dt_free, dt_masks_free_form(), dt_dev_history_item_t::forms, dt_dev_history_item_t::params, and void().
Referenced by _history_undo_data_free(), _hm_backup_cleanup(), _hm_truncate_dest_redo_tail(), _remove_history_leaks(), dt_dev_cleanup(), dt_dev_history_free_history(), dt_dev_history_item_from_source_history_item(), dt_dev_history_truncate(), dt_dev_history_undo_start_record_locked(), and dt_dev_module_remove().
| dt_iop_module_t * dt_dev_get_module_instance | ( | struct dt_develop_t * | dev, |
| const char * | op, | ||
| const char * | multi_name, | ||
| const int | multi_priority | ||
| ) |
Find a module instance by op name and instance metadata.
Tries multi_name first, then falls back to matching multi_priority.
| dev | Develop context. |
| op | Operation name. |
| multi_name | Instance name (may be NULL/empty). |
| multi_priority | Instance priority. |
References name.
Referenced by _hm_topo_apply_solution(), and dt_history_merge().
Cleanup cached statements or state used by history I/O.
Referenced by dt_cleanup().
| void dt_dev_history_compress | ( | struct dt_develop_t * | dev | ) |
Compress an history from a loaded pipeline, aka simply take a snapshot of all modules parameters. This assumes the history end is properly set, which always happens after calling _pop_history_item.
| dev |
References _dt_dev_history_compress_internal(), and TRUE.
Referenced by dt_dev_history_compress_or_truncate().
| void dt_dev_history_compress_ext | ( | struct dt_develop_t * | dev, |
| gboolean | write_history | ||
| ) |
Variant of history compression that optionally skips DB writeback.
| dev | Develop context. |
| write_history | If TRUE, write history to DB/XMP after compression. |
References _dt_dev_history_compress_internal().
Referenced by _styles_rebuild_history_from_items().
| void dt_dev_history_compress_or_truncate | ( | struct dt_develop_t * | dev | ) |
Compress history if history_end is at top, otherwise truncate.
| dev | Develop context. |
References dt_dev_get_history_end_ext(), dt_dev_history_compress(), dt_dev_history_truncate(), dt_develop_t::history, dt_image_t::id, and dt_develop_t::image_storage.
Referenced by _history_compress_apply().
| uint64_t dt_dev_history_compute_hash | ( | struct dt_develop_t * | dev | ) |
Get the integrity checksum of the whole history stack. This should be done ONLY when history is changed, read or written.
| dev |
References DT_DEBUG_HISTORY, dt_dev_get_history_end_ext(), dt_hash(), dt_print(), dt_dev_history_item_t::hash, and dt_develop_t::history.
Referenced by _publish_backend_progress(), dt_dev_add_history_item_real(), dt_dev_pop_history_items_ext(), dt_dev_set_history_end_ext(), dt_dev_write_history_ext(), dt_drawlayer_commit_dabs(), and gui_focus().
| void dt_dev_history_free_history | ( | struct dt_develop_t * | dev | ) |
Free the whole history list attached to dev->history.
Frees each history item and clears the list pointer.
| dev | Develop context. |
References dt_dev_free_history_item(), and dt_develop_t::history.
Referenced by _dt_dev_history_compress_internal(), _hm_restore_dest_from_backup(), _pop_undo(), _styles_rebuild_history_from_items(), dt_dev_read_history_ext(), and leave().
| dt_dev_history_item_t * dt_dev_history_get_first_item_by_module | ( | GList * | history_list, |
| struct dt_iop_module_t * | module | ||
| ) |
Find the first history item referencing a module.
| history_list | History list. |
| module | Module instance. |
Referenced by _check_deleted_instances(), and _get_user_mod_list().
| dt_dev_history_item_t * dt_dev_history_get_last_item_by_module | ( | GList * | history_list, |
| struct dt_iop_module_t * | module, | ||
| int | history_end | ||
| ) |
Find the last history item referencing a module up to history_end.
| history_list | History list. |
| module | Module instance. |
| history_end | Upper bound index (GUI perspective). |
Referenced by _hm_build_last_history_by_id(), _hm_build_override_map(), dt_dev_add_history_item_ext(), and dt_history_merge().
| void dt_dev_history_gui_update | ( | struct dt_develop_t * | dev | ) |
Apply history-loaded params to module GUIs.
Ensures module instances shown in the GUI match the history state.
| dev | Develop context. |
References darktable, dt_dev_history_refresh_nodes_ext(), dt_iop_gui_update(), dt_pthread_rwlock_unlock, dt_pthread_rwlock_wrlock, darktable_t::gui, dt_develop_t::gui_attached, dt_develop_t::history, dt_develop_t::history_mutex, dt_develop_t::iop, and dt_gui_gtk_t::reset.
Referenced by _darkroom_image_loaded_callback(), _history_apply_history_end(), _pop_undo(), dt_ioppr_migrate_iop_order(), dt_lightroom_import(), and dt_menu_apply_dev_history_update().
| int dt_dev_history_item_from_source_history_item | ( | dt_develop_t * | dev_dest, |
| dt_develop_t * | dev_src, | ||
| const dt_dev_history_item_t * | hist_src, | ||
| dt_iop_module_t * | mod_dest, | ||
| dt_dev_history_item_t ** | out_hist | ||
| ) |
References dt_dev_history_item_t::blend_params, dt_dev_free_history_item(), dt_dev_history_item_update_from_params(), dt_iop_module_needs_mask_history(), dt_masks_copy_used_forms_for_module(), dt_masks_snapshot_current_forms(), dt_dev_history_item_t::enabled, FALSE, and dt_dev_history_item_t::params.
Referenced by dt_history_merge().
| gboolean dt_dev_history_item_update_from_params | ( | dt_develop_t * | dev, |
| dt_dev_history_item_t * | hist, | ||
| dt_iop_module_t * | module, | ||
| const gboolean | enabled, | ||
| const void * | params, | ||
| const int32_t | params_size, | ||
| const dt_develop_blend_params_t * | blend_params, | ||
| GList * | forms | ||
| ) |
References dt_dev_history_item_t::blend_params, dt_iop_commit_blend_params(), dt_iop_compute_module_hash(), dt_masks_free_form(), dt_dev_history_item_t::enabled, FALSE, dt_dev_history_item_t::forms, dt_dev_history_item_t::hash, dt_dev_history_item_t::iop_order, MIN, dt_dev_history_item_t::multi_name, dt_iop_module_t::multi_name, dt_dev_history_item_t::multi_priority, dt_iop_module_t::op, dt_dev_history_item_t::op_name, dt_dev_history_item_t::params, dt_iop_module_t::params, dt_iop_module_t::params_size, params_size(), TRUE, and void().
Referenced by _styles_rebuild_history_from_items(), dt_dev_add_history_item_ext(), and dt_dev_history_item_from_source_history_item().
| void dt_dev_history_notify_change | ( | struct dt_develop_t * | dev, |
| const int32_t | imgid | ||
| ) |
Notify the rest of the app that history changes were written.
Updates thumbnails and emits user-visible notices when needed.
| dev | Develop context. |
| imgid | Image id. |
References darktable, darktable_t::develop, dt_dev_mask_history_overload(), dt_thumbtable_refresh_thumbnail, dt_toast_log(), darktable_t::gui, dt_develop_t::gui_attached, dt_develop_t::history, dt_ui_t::thumbtable_lighttable, TRUE, and dt_gui_gtk_t::ui.
Referenced by _gui_delete_callback(), _history_apply_history_end(), _pop_undo(), dt_dev_add_history_item_real(), dt_dev_load_image(), dt_drawlayer_commit_dabs(), dt_ioppr_migrate_iop_order(), dt_lightroom_import(), dt_menu_apply_dev_history_update(), and gui_focus().
| void dt_dev_history_pixelpipe_update | ( | struct dt_develop_t * | dev, |
| gboolean | rebuild | ||
| ) |
Rebuild or resync pixelpipes after backend history changes.
| dev | Develop context. |
| rebuild | TRUE to rebuild pipeline topology, FALSE to resync only. |
References dt_dev_pixelpipe_rebuild_all, dt_dev_pixelpipe_resync_history_all, and dt_develop_t::gui_attached.
Referenced by _history_apply_history_end(), _pop_undo(), dt_ioppr_migrate_iop_order(), dt_lightroom_import(), and dt_menu_apply_dev_history_update().
| int dt_dev_history_refresh_nodes_ext | ( | struct dt_develop_t * | dev, |
| GList * | iop, | ||
| GList * | history | ||
| ) |
Refresh GUI module nodes to match history state.
Removes modules without history, creates missing instances, and reorders the GUI list according to history/pipeline ordering.
| dev | Develop context. |
| iop | Module list. |
| history | History list. |
References _check_deleted_instances(), _create_deleted_modules(), _rebuild_multi_priority(), _reorder_gui_module_list(), and dt_sort_iop_by_order().
Referenced by dt_dev_history_gui_update().
| void dt_dev_history_truncate | ( | struct dt_develop_t * | dev, |
| const int32_t | imgid | ||
| ) |
truncate history stack
References dt_dev_free_history_item(), dt_dev_get_history_end_ext(), dt_dev_pop_history_items_ext(), dt_dev_write_history_ext(), and dt_develop_t::history.
Referenced by dt_dev_history_compress_or_truncate().
| void dt_dev_history_undo_end_record | ( | struct dt_develop_t * | dev | ) |
Finish an undo record for history changes.
| dev | Develop context. |
References dt_dev_history_undo_end_record_locked(), dt_pthread_rwlock_rdlock, dt_pthread_rwlock_unlock, and dt_develop_t::history_mutex.
Referenced by dt_dev_undo_end_record().
| void dt_dev_history_undo_end_record_locked | ( | struct dt_develop_t * | dev | ) |
Finish an undo record with history_mutex already locked.
Caller must hold dev->history_mutex (read or write).
| dev | Develop context. |
References _history_undo_data_free(), _pop_undo(), dt_undo_history_t::after_end, dt_undo_history_t::after_iop_order_list, dt_undo_history_t::after_snapshot, dt_undo_history_t::before_end, dt_undo_history_t::before_iop_order_list, dt_undo_history_t::before_snapshot, darktable, dt_dev_get_history_end_ext(), DT_DEV_PIXELPIPE_DISPLAY_NONE, dt_history_duplicate(), dt_ioppr_iop_order_copy_deep(), DT_MASKS_EDIT_OFF, dt_masks_get_edit_mode(), DT_UNDO_HISTORY, dt_undo_record(), dt_develop_t::gui_module, dt_develop_t::history, dt_develop_t::iop_order_list, dt_undo_history_t::mask_edit_mode, dt_undo_history_t::request_mask_display, dt_iop_module_t::request_mask_display, darktable_t::undo, dt_develop_t::undo_history_before_end, dt_develop_t::undo_history_before_iop_order_list, dt_develop_t::undo_history_before_snapshot, and dt_develop_t::undo_history_depth.
Referenced by dt_dev_history_undo_end_record(), and dt_dev_module_remove().
| void dt_dev_history_undo_invalidate_module | ( | struct dt_iop_module_t * | module | ) |
Invalidate a module pointer inside undo snapshots.
Used when module instances are destroyed or replaced.
| module | Module to invalidate. |
References _history_invalidate_cb(), darktable, DT_UNDO_HISTORY, dt_undo_iterate_internal(), and darktable_t::undo.
Referenced by dt_dev_module_remove().
| void dt_dev_history_undo_start_record | ( | struct dt_develop_t * | dev | ) |
Start an undo record for history changes.
Called by the develop undo framework.
| dev | Develop context. |
References dt_dev_history_undo_start_record_locked(), dt_pthread_rwlock_rdlock, dt_pthread_rwlock_unlock, and dt_develop_t::history_mutex.
Referenced by dt_dev_undo_start_record().
| void dt_dev_history_undo_start_record_locked | ( | struct dt_develop_t * | dev | ) |
Start an undo record with history_mutex already locked.
Caller must hold dev->history_mutex (read or write).
| dev | Develop context. |
References dt_dev_free_history_item(), dt_dev_get_history_end_ext(), dt_free_gpointer(), dt_history_duplicate(), dt_ioppr_iop_order_copy_deep(), dt_develop_t::history, dt_develop_t::iop_order_list, dt_develop_t::undo_history_before_end, dt_develop_t::undo_history_before_iop_order_list, dt_develop_t::undo_history_before_snapshot, and dt_develop_t::undo_history_depth.
Referenced by dt_dev_history_undo_start_record(), and dt_dev_module_remove().
| gboolean dt_dev_init_default_history | ( | struct dt_develop_t * | dev, |
| const int32_t | imgid, | ||
| gboolean | apply_auto_presets | ||
| ) |
Initialize module defaults and insert required default modules.
This does not read the database history. It only loads defaults and optionally applies auto-presets, mirroring the internal init path used by dt_dev_read_history_ext().
| dev | Develop context. |
| imgid | Image id. |
| apply_auto_presets | Whether to apply auto-presets. |
References _dev_auto_apply_presets(), _insert_default_modules(), dt_conf_set_string(), DT_DEBUG_HISTORY, DT_IMAGE_AUTO_PRESETS_APPLIED, dt_iop_reload_defaults(), dt_print(), dt_image_t::flags, dt_develop_t::image_storage, and dt_develop_t::iop.
Referenced by _styles_init_source_dev(), dt_dev_read_history_ext(), and dt_dev_replace_history_on_image().
| void dt_dev_invalidate_history_module | ( | GList * | list, |
| struct dt_iop_module_t * | module | ||
| ) |
Remove a module pointer from a history list.
Used when modules are deleted or re-instantiated.
| list | History list. |
| module | Module to invalidate. |
Referenced by _history_invalidate_cb().
| guint dt_dev_mask_history_overload | ( | GList * | dev_history, |
| guint | threshold | ||
| ) |
References dt_dev_history_item_t::forms, and threshold.
Referenced by dt_dev_history_notify_change().
| int dt_dev_merge_history_into_image | ( | struct dt_develop_t * | dev_src, |
| int32_t | dest_imgid, | ||
| const GList * | mod_list, | ||
| gboolean | merge_iop_order, | ||
| const dt_history_merge_strategy_t | mode, | ||
| const gboolean | paste_instances | ||
| ) |
Merge a list of modules into a destination image history via dt_history_merge().
| dev_src | Source develop context (provides module params). |
| dest_imgid | Destination image id. |
| mod_list | List of module instances to merge. |
| merge_iop_order | Whether to merge pipeline order (TRUE) or preserve destination (FALSE). |
| mode | Merge strategy for history entries. |
| paste_instances | Whether to paste module instances. |
References dt_dev_cleanup(), dt_dev_init(), dt_dev_pop_history_items_ext(), dt_dev_reload_history_items(), dt_dev_write_history(), dt_history_merge(), and FALSE.
Referenced by _history_copy_and_paste_on_image_merge(), and dt_styles_apply_to_image_merge().
| int dt_dev_next_multi_priority_for_op | ( | struct dt_develop_t * | dev, |
| const char * | op | ||
| ) |
Return the next available multi_priority for an operation.
| dev | Develop context. |
| op | Operation name. |
References dt_develop_t::iop, m, and MAX.
| void dt_dev_pop_history_items | ( | struct dt_develop_t * | dev | ) |
Thread-safe wrapper around dt_dev_pop_history_items_ext(), then update GUI.
| dev | Develop context. |
References darktable, dt_dev_get_thumbnail_size(), dt_dev_pop_history_items_ext(), dt_pthread_rwlock_unlock, dt_pthread_rwlock_wrlock, darktable_t::gui, dt_develop_t::gui_attached, dt_develop_t::history_mutex, and dt_gui_gtk_t::reset.
Referenced by _apply_style_before_export(), and _darkroom_image_loaded_callback().
| void dt_dev_pop_history_items_ext | ( | struct dt_develop_t * | dev | ) |
Apply history items to module params up to dev->history_end.
Does not update the GUI; see dt_dev_pop_history_items() for GUI-aware calls.
| dev | Develop context. |
References _dt_dev_modules_reload_defaults(), _history_to_module(), DT_DEBUG_HISTORY, dt_dev_ensure_image_storage(), dt_dev_get_history_end_ext(), dt_dev_history_compute_hash(), dt_dev_set_history_hash(), dt_ioppr_resync_pipeline(), dt_masks_replace_current_forms(), dt_print(), dt_dev_history_item_t::forms, dt_develop_t::history, i, dt_image_t::id, dt_develop_t::image_storage, and TRUE.
Referenced by _dt_dev_history_compress_internal(), _history_apply_history_end(), _hm_restore_dest_from_backup(), _pop_undo(), _styles_rebuild_history_from_items(), dt_dev_history_truncate(), dt_dev_merge_history_into_image(), dt_dev_pop_history_items(), dt_dev_reload_history_items(), dt_dev_replace_history_on_image(), and dt_styles_apply_style_item().
| gboolean dt_dev_read_history_ext | ( | struct dt_develop_t * | dev, |
| const int32_t | imgid | ||
| ) |
Read history and masks from DB and populate dev->history.
Also loads default modules and auto-presets when needed. This initializes module internals with the full history and does not honor history_end. Call dt_dev_pop_history_items_ext() afterwards to apply history_end.
| dev | Develop context. |
| imgid | Image id. |
References _dev_history_db_row_cb(), _history_to_module(), darktable, dt_dev_history_db_ctx_t::dev, DT_DEBUG_HISTORY, dt_dev_ensure_image_storage(), dt_dev_history_free_history(), dt_dev_init_default_history(), dt_dev_load_modules(), dt_dev_masks_list_change(), dt_dev_masks_update_hash(), dt_dev_set_history_end_ext(), dt_history_db_foreach_history_row(), dt_history_db_get_next_history_num(), dt_history_get_end(), dt_image_cache_get(), dt_image_cache_read_release(), dt_ioppr_resync_pipeline(), dt_ioppr_set_default_iop_order(), dt_masks_read_masks_history(), dt_print(), dt_dev_history_item_t::enabled, FALSE, dt_dev_history_item_t::hash, dt_develop_t::history, darktable_t::image_cache, dt_develop_t::iop, legacy_params(), dt_dev_history_item_t::op_name, and UNKNOWN_IMAGE.
Referenced by dt_dev_load_image(), and dt_dev_reload_history_items().
| void dt_dev_reload_history_items | ( | struct dt_develop_t * | dev, |
| const int32_t | imgid | ||
| ) |
Reload history from DB and rebuild pipelines/GUI state.
Frees existing history, re-reads from DB, applies to modules, and updates GUI and pipelines. Locks history mutex.
| dev | Develop context. |
| imgid | Image id. |
References darktable, dt_dev_pop_history_items_ext(), dt_dev_read_history_ext(), dt_pthread_rwlock_unlock, dt_pthread_rwlock_wrlock, darktable_t::gui, dt_develop_t::gui_attached, dt_develop_t::history_mutex, and dt_gui_gtk_t::reset.
Referenced by _history_compress_apply(), _history_copy_and_paste_on_image_merge(), dt_dev_merge_history_into_image(), dt_ioppr_migrate_iop_order(), dt_lightroom_import(), and dt_menu_apply_dev_history_update().
| int dt_dev_replace_history_on_image | ( | struct dt_develop_t * | dev_src, |
| const int32_t | dest_imgid, | ||
| const gboolean | reload_defaults, | ||
| const char * | msg | ||
| ) |
Replace an image history with the content of dev_src.
Optionally reloads default modules before writing to DB. This is used by history replace and style replace paths.
| dev_src | Source develop context. |
| dest_imgid | Destination image id. |
| reload_defaults | Whether to reload default modules before writing. |
| msg | Optional debug message. |
References dt_dev_ensure_image_storage(), dt_dev_init_default_history(), dt_dev_pop_history_items_ext(), dt_dev_write_history(), dt_ioppr_resync_pipeline(), FALSE, and reload_defaults().
Referenced by _history_copy_and_paste_on_image_merge(), and dt_styles_apply_to_image_merge().
| void dt_dev_write_history | ( | struct dt_develop_t * | dev | ) |
Thread-safe wrapper around dt_dev_write_history_ext() for dev->image_storage.id.
| dev | Develop context. |
References dt_dev_write_history_ext(), dt_pthread_rwlock_rdlock, dt_pthread_rwlock_unlock, dt_develop_t::history_mutex, dt_image_t::id, and dt_develop_t::image_storage.
Referenced by _gui_delete_callback(), _history_apply_history_end(), copy_callback(), copy_parts_callback(), dt_dev_add_history_item_real(), dt_dev_merge_history_into_image(), dt_dev_replace_history_on_image(), dt_drawlayer_commit_dabs(), dt_ioppr_change_iop_order(), dt_lightroom_import(), and gui_focus().
| void dt_dev_write_history_ext | ( | struct dt_develop_t * | dev, |
| const int32_t | imgid | ||
| ) |
Write dev->history to DB and XMP for a given image id.
This acquires the database lock in write mode.
| dev | Develop context. |
| imgid | Image id. |
References _cleanup_history(), darktable, DT_DEBUG_HISTORY, dt_dev_get_history_end_ext(), dt_dev_get_history_hash(), dt_dev_history_compute_hash(), dt_dev_set_history_hash(), dt_dev_write_history_item(), dt_history_set_end(), dt_image_cache_get(), DT_IMAGE_CACHE_SAFE, dt_image_cache_write_release(), dt_ioppr_write_iop_order_list(), dt_mipmap_cache_remove(), dt_print(), dt_develop_t::history, dt_image_t::history_hash, i, dt_image_t::id, darktable_t::image_cache, dt_develop_t::image_storage, dt_develop_t::iop_order_list, darktable_t::mipmap_cache, and TRUE.
Referenced by _dt_dev_history_compress_internal(), _history_compress_apply(), _hm_restore_dest_from_backup(), _pop_undo(), dt_dev_history_truncate(), dt_dev_load_image(), and dt_dev_write_history().
| int dt_dev_write_history_item | ( | const int32_t | imgid, |
| dt_dev_history_item_t * | h, | ||
| int32_t | num | ||
| ) |
References DT_DEBUG_HISTORY, dt_develop_blend_version(), dt_history_db_write_history_item(), dt_masks_write_masks_history_item(), dt_print(), and h.
Referenced by dt_dev_write_history_ext().
| GList * dt_history_duplicate | ( | GList * | hist | ) |
Deep-copy a history list.
Duplicates params, blend params and masks for each history item.
| hist | Source history list. |
References dt_dev_history_item_t::blend_params, dt_masks_dup_forms_deep(), dt_dev_history_item_t::forms, h, dt_dev_history_item_t::op_name, dt_dev_history_item_t::params, and dt_iop_module_t::params.
Referenced by _hm_backup_dest(), _pop_undo(), dt_dev_history_undo_end_record_locked(), and dt_dev_history_undo_start_record_locked().
| int dt_history_merge_module_into_history | ( | struct dt_develop_t * | dev_dest, |
| struct dt_develop_t * | dev_src, | ||
| struct dt_iop_module_t * | mod_src | ||
| ) |
Merge a single module instance into a destination history.
Creates or reuses a destination module instance and copies its parameters. This does not resync the pipeline or pop history; callers should batch multiple merges and resync once.
| dev_dest | Destination develop context. |
| dev_src | Source develop context (may be NULL to skip mask copy). |
| mod_src | Source module instance. |
References DT_DEBUG_HISTORY, dt_dev_add_history_item_ext(), dt_dev_copy_module_contents(), dt_print(), FALSE, IOP_FLAGS_ONE_INSTANCE, and dt_iop_module_t::multi_name.
Referenced by dt_styles_apply_style_item().
| gboolean dt_history_module_skip_copy | ( | const int | flags | ) |
Determine whether a module should be skipped during history copy.
Evaluates module flags such as deprecated/unsafe/hidden.
| flags | Module flags. |
References flags, IOP_FLAGS_DEPRECATED, IOP_FLAGS_HIDDEN, and IOP_FLAGS_UNSAFE_COPY.
Referenced by _get_user_mod_list(), and dt_gui_hist_dialog_new().