![]() |
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:Go to the source code of this file.
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, const char *source_label, dt_hm_batch_state_t *batch) |
| 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. | |
| gboolean | 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. | |
| static int | _dt_dev_write_history_job_run (dt_job_t *job) |
| void | dt_dev_write_history (dt_develop_t *dev, gboolean async) |
| 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 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. | |
| void | dt_dev_transient_params_set (dt_iop_module_t *module, const void *params, const size_t params_size, const void *blend_params, const size_t blend_size) |
| Out-of-history transient param channel. | |
| void | dt_dev_transient_params_clear (dt_iop_module_t *module) |
Drop the transient slot if it belongs to module. | |
| gboolean | dt_dev_transient_params_get (dt_develop_t *dev, const dt_iop_module_t *module, void *out_params, const size_t out_params_size, void *out_blend, const size_t out_blend_size, gboolean *out_has_blend) |
| gboolean | dt_dev_transient_params_active (dt_develop_t *dev, const dt_iop_module_t *module) |
| 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) |
Definition at line 2032 of file dev_history.c.
| 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. |
Definition at line 2197 of file dev_history.c.
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, IS_NULL_PTR, 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. |
Definition at line 1209 of file dev_history.c.
References dt_history_db_delete_dev_history().
Referenced by dt_dev_write_history_ext().
|
static |
Filter: disabled modules that still need history entries.
Definition at line 2079 of file dev_history.c.
Referenced by _dt_dev_history_compress_internal().
|
static |
Filter: enabled modules that are default/forced enabled.
Definition at line 2053 of file dev_history.c.
Referenced by _dt_dev_history_compress_internal().
|
static |
Filter: enabled modules with default params (user enabled).
Definition at line 2061 of file dev_history.c.
Referenced by _dt_dev_history_compress_internal().
|
static |
Filter: enabled modules with non-default params (user edits).
Definition at line 2070 of file dev_history.c.
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. |
Definition at line 2378 of file dev_history.c.
References _reset_module_instance(), _undo_items_cb(), darktable, dt_iop_module_t::dev, dt_iop_get_module_from_list(), dt_iop_load_module(), dt_iop_update_multi_priority(), dt_sort_iop_by_order(), DT_UNDO_HISTORY, dt_undo_iterate_internal(), FALSE, IS_NULL_PTR, dt_dev_history_item_t::multi_name, dt_dev_history_item_t::multi_priority, dt_dev_history_item_t::op_name, 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. |
Definition at line 1363 of file dev_history.c.
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_monochrome_flags(), dt_image_needs_rawprepare(), DT_IMAGE_NO_LEGACY_PRESETS, DT_IOP_ORDER_ANSEL_JPG, DT_IOP_ORDER_ANSEL_RAW, 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. |
Definition at line 2040 of file dev_history.c.
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). |
Definition at line 117 of file dev_history.c.
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. |
Definition at line 2093 of file dev_history.c.
References _compress_disabled_with_history(), _compress_enabled_default_or_forced(), _compress_enabled_user_default_params(), _compress_enabled_user_nondefault_params(), _dev_history_add_filtered(), darktable, dt_dev_get_thumbnail_size(), dt_dev_history_free_history(), dt_dev_pop_history_items_ext(), dt_dev_set_history_end_ext(), dt_dev_write_history_ext(), dt_pthread_rwlock_rdlock, 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_image_t::id, dt_develop_t::image_storage, and dt_gui_gtk_t::reset.
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. |
Definition at line 1044 of file dev_history.c.
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 |
Definition at line 1321 of file dev_history.c.
References d, dt_control_job_get_params(), dt_dev_history_notify_change(), dt_dev_write_history_ext(), dt_pthread_rwlock_rdlock, dt_pthread_rwlock_unlock, and IS_NULL_PTR.
Referenced by dt_dev_write_history().
|
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. |
Definition at line 1547 of file dev_history.c.
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. |
Definition at line 564 of file dev_history.c.
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. |
Definition at line 436 of file dev_history.c.
References _search_history_by_op(), dt_iop_get_module_by_op_priority(), FALSE, dt_develop_t::iop, IOP_FLAGS_ONE_INSTANCE, IS_NULL_PTR, 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. |
Definition at line 1078 of file dev_history.c.
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. |
Definition at line 583 of file dev_history.c.
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, dt_free_gpointer(), and IS_NULL_PTR.
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. |
Definition at line 1437 of file dev_history.c.
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(), dt_iop_module_t::enabled, 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. |
Definition at line 2013 of file dev_history.c.
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. |
Definition at line 2027 of file dev_history.c.
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. |
Definition at line 1991 of file dev_history.c.
| gboolean _module_leaves_no_history | ( | dt_iop_module_t * | module | ) |
Return whether a module never writes history entries.
| module | Module instance. |
Definition at line 1980 of file dev_history.c.
References IOP_FLAGS_NO_HISTORY_STACK.
Referenced by _dev_history_add_filtered().
|
static |
Check if module params match defaults.
| module | Module instance. |
Definition at line 2002 of file dev_history.c.
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. |
Definition at line 609 of file dev_history.c.
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_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, IS_NULL_PTR, 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. |
History rows may outlive modules that were removed or renamed between releases. If the operation no longer exists in the current module list, drop that row quietly instead of treating it as a broken install.
Definition at line 1729 of file dev_history.c.
References _find_so_for_history_entry(), _sync_blendop_params(), _sync_params(), dt_dev_history_item_t::blend_params, dt_dev_history_item_t::blendop_params_size, dt_dev_history_item_t::blendop_version, DT_DEBUG_HISTORY, dt_free, dt_iop_compute_module_hash(), dt_iop_get_module_from_list(), 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, dt_develop_t::iop, IOP_FLAGS_NO_HISTORY_STACK, dt_dev_history_item_t::iop_order, dt_develop_t::iop_order_list, IS_NULL_PTR, legacy_params(), dt_develop_blend_params_t::mask_mode, MAX, dt_dev_history_item_t::module_version, 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, dt_dev_history_item_t::params, dt_dev_history_item_t::params_size, and TRUE.
Referenced by _dev_history_db_row_cb().
|
static |
Resync module multi_priority values from history.
| history_list | History list. |
Definition at line 2316 of file dev_history.c.
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. |
Definition at line 735 of file dev_history.c.
References DT_DEBUG_HISTORY, dt_dev_free_history_item(), dt_dev_get_history_end_ext(), dt_print(), FALSE, dt_develop_t::history, IS_NULL_PTR, dt_dev_history_item_t::op_name, and TRUE.
Referenced by dt_dev_add_history_item_ext().
|
static |
Rebind history items to a module instance after recreation.
| hist | History list. |
| module | Module instance. |
| multi_priority | Instance priority to match. |
Definition at line 2341 of file dev_history.c.
References IS_NULL_PTR, 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. |
Definition at line 408 of file dev_history.c.
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. |
Definition at line 1601 of file dev_history.c.
References dt_dev_history_item_t::blend_params, dt_dev_history_item_t::blendop_params_size, dt_dev_history_item_t::blendop_version, dt_develop_blend_legacy_params(), dt_develop_blend_version(), IS_NULL_PTR, 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). |
Definition at line 1641 of file dev_history.c.
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::module_version, dt_dev_history_item_t::params, dt_dev_history_item_t::params_size, 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. |
Definition at line 2361 of file dev_history.c.
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 |
Definition at line 795 of file dev_history.c.
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, IS_NULL_PTR, 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(), 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 saves history. 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. |
Definition at line 917 of file dev_history.c.
References darktable, dt_atomic_set_int(), dt_dev_add_history_item_ext(), dt_dev_get_history_end_ext(), dt_dev_get_history_hash(), dt_dev_get_thumbnail_size(), dt_dev_history_compute_hash(), 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_image_cache_get(), DT_IMAGE_CACHE_RELAXED, dt_image_cache_write_release(), 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_image_t::history_hash, dt_develop_t::history_mutex, dt_image_t::id, darktable_t::image_cache, dt_develop_t::image_storage, IS_NULL_PTR, dt_develop_t::pipe, dt_develop_t::preview_pipe, dt_gui_gtk_t::reset, dt_dev_pixelpipe_t::shutdown, and TRUE.
| 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 | ||
| ) |
Definition at line 271 of file dev_history.c.
References dt_iop_module_t::blend_params, dt_iop_commit_blend_params(), dt_masks_copy_used_forms_for_module(), dt_iop_module_t::enabled, MIN, dt_iop_module_t::params, and dt_iop_module_t::params_size.
Referenced by _hm_topo_apply_solution(), and dt_history_merge_module_into_history().
| 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. |
Definition at line 242 of file dev_history.c.
References dt_free, dt_iop_get_module_by_op_priority(), dt_iop_load_module(), dt_develop_t::iop, IOP_FLAGS_ONE_INSTANCE, IS_NULL_PTR, and dt_iop_module_t::so.
Referenced by _hm_topo_apply_solution(), and _lib_snapshot_capture_state().
| 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. |
Definition at line 1004 of file dev_history.c.
References dt_dev_history_item_t::blend_params, dt_free, dt_masks_free_form(), dt_dev_history_item_t::forms, IS_NULL_PTR, 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. |
Definition at line 230 of file dev_history.c.
References IS_NULL_PTR, and name.
Referenced by _hm_topo_apply_solution(), _lib_snapshot_capture_state(), and dt_history_merge().
Cleanup cached statements or state used by history I/O.
Definition at line 1282 of file dev_history.c.
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 |
Definition at line 2144 of file dev_history.c.
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. |
Definition at line 2139 of file dev_history.c.
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. |
Definition at line 2180 of file dev_history.c.
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 |
Definition at line 898 of file dev_history.c.
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 _lib_snapshot_capture_state(), 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. |
Definition at line 1016 of file dev_history.c.
References dt_dev_free_history_item(), dt_develop_t::history, and IS_NULL_PTR.
Referenced by _dt_dev_history_compress_internal(), _hm_restore_dest_from_backup(), _lib_snapshot_capture_state(), _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. |
Definition at line 130 of file dev_history.c.
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). |
Definition at line 146 of file dev_history.c.
Referenced by _hm_build_last_history_by_id(), _hm_build_override_map(), _sync_focused_in_place(), _update_iop_visibility(), 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. |
Definition at line 1157 of file dev_history.c.
References darktable, dt_dev_history_refresh_nodes_ext(), dt_iop_gui_init(), dt_iop_gui_set_expander(), dt_iop_gui_update(), dt_iop_is_hidden(), 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, IS_NULL_PTR, 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 | ||
| ) |
Definition at line 292 of file dev_history.c.
References dt_dev_history_item_t::blend_params, DT_DEBUG_HISTORY, DT_DEBUG_VERBOSE, 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_print(), dt_dev_history_item_t::enabled, FALSE, IS_NULL_PTR, dt_dev_history_item_t::multi_name, dt_iop_module_t::multi_name, dt_iop_module_t::op, dt_dev_history_item_t::params, dt_dev_history_item_t::params_size, and dt_iop_module_t::params_size.
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 | ||
| ) |
Definition at line 162 of file dev_history.c.
References dt_dev_history_item_t::blend_params, dt_dev_history_item_t::blendop_params_size, dt_dev_history_item_t::blendop_version, dt_develop_blend_version(), 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, IS_NULL_PTR, MIN, dt_dev_history_item_t::module_version, 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_dev_history_item_t::params_size, 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. |
Definition at line 1228 of file dev_history.c.
References darktable, dt_dev_mask_history_overload(), dt_image_history_changed(), dt_toast_log(), FALSE, darktable_t::gui, dt_develop_t::gui_attached, dt_develop_t::history, and IS_NULL_PTR.
Referenced by _dt_dev_write_history_job_run(), dt_dev_load_image(), dt_dev_write_history(), dt_drawlayer_commit_dabs(), dt_ioppr_migrate_iop_order(), dt_lightroom_import(), 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. |
Definition at line 1194 of file dev_history.c.
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 pointer. |
| history | History list. |
Definition at line 2444 of file dev_history.c.
References _check_deleted_instances(), _create_deleted_modules(), _rebuild_multi_priority(), dt_dev_signal_modules_moved(), 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
Definition at line 2149 of file dev_history.c.
References darktable, dt_dev_free_history_item(), dt_dev_get_history_end_ext(), dt_dev_get_thumbnail_size(), dt_dev_pop_history_items_ext(), dt_dev_write_history_ext(), dt_pthread_rwlock_rdlock, 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, and dt_gui_gtk_t::reset.
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. |
Definition at line 684 of file dev_history.c.
References dt_dev_history_undo_end_record_locked(), dt_pthread_rwlock_rdlock, dt_pthread_rwlock_unlock, dt_develop_t::history_mutex, and IS_NULL_PTR.
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. |
Definition at line 692 of file dev_history.c.
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, IS_NULL_PTR, 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. |
Definition at line 572 of file dev_history.c.
References _history_invalidate_cb(), darktable, DT_UNDO_HISTORY, dt_undo_iterate_internal(), IS_NULL_PTR, 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. |
Definition at line 656 of file dev_history.c.
References dt_dev_history_undo_start_record_locked(), dt_pthread_rwlock_rdlock, dt_pthread_rwlock_unlock, dt_develop_t::history_mutex, and IS_NULL_PTR.
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. |
Definition at line 664 of file dev_history.c.
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, IS_NULL_PTR, 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. |
Definition at line 1497 of file dev_history.c.
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. |
Definition at line 1957 of file dev_history.c.
Referenced by _history_invalidate_cb().
| guint dt_dev_mask_history_overload | ( | GList * | dev_history, |
| guint | threshold | ||
| ) |
Definition at line 1214 of file dev_history.c.
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, | ||
| const char * | source_label, | ||
| dt_hm_batch_state_t * | batch | ||
| ) |
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. |
| source_label | Optional source label for the merge report header. |
Definition at line 354 of file dev_history.c.
References darktable, dt_dev_cleanup(), dt_dev_init(), dt_dev_pop_history_items_ext(), dt_dev_reload_history_items(), dt_dev_write_history(), dt_dev_write_history_ext(), dt_history_merge(), dt_image_cache_get(), DT_IMAGE_CACHE_SAFE, dt_image_cache_write_release(), FALSE, darktable_t::image_cache, dt_develop_t::image_storage, and IS_NULL_PTR.
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. |
Definition at line 218 of file dev_history.c.
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. |
Definition at line 1146 of file dev_history.c.
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. |
Definition at line 1098 of file dev_history.c.
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. |
Definition at line 1851 of file dev_history.c.
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, IS_NULL_PTR, legacy_params(), dt_dev_history_item_t::multi_name, dt_dev_history_item_t::op_name, and UNKNOWN_IMAGE.
Referenced by dt_dev_load_image(), and dt_dev_reload_history_items().
| gboolean 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. |
Definition at line 1023 of file dev_history.c.
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. |
Definition at line 1519 of file dev_history.c.
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().
| gboolean dt_dev_transient_params_active | ( | dt_develop_t * | dev, |
| const dt_iop_module_t * | module | ||
| ) |
Definition at line 2579 of file dev_history.c.
References dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), FALSE, IS_NULL_PTR, dt_develop_t::transient_params, and dt_develop_t::transient_params_mutex.
Referenced by _sync_focused_in_place().
| void dt_dev_transient_params_clear | ( | struct dt_iop_module_t * | module | ) |
Drop the transient slot if it belongs to module.
GUI/worker thread only. Call on commit/cancel/edit-exit/focus-loss. Does NOT trigger a recompute (see _set); the caller re-triggers the pipe so it renders the committed history state.
Definition at line 2532 of file dev_history.c.
References dt_develop_t::blend_params, dt_develop_t::blend_size, dt_iop_module_t::dev, dt_free, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), IS_NULL_PTR, dt_develop_t::params, dt_develop_t::params_size, dt_develop_t::serial, dt_develop_t::transient_params, and dt_develop_t::transient_params_mutex.
Referenced by dt_drawlayer_set_pipeline_realtime_mode().
| gboolean dt_dev_transient_params_get | ( | dt_develop_t * | dev, |
| const dt_iop_module_t * | module, | ||
| void * | out_params, | ||
| const size_t | out_params_size, | ||
| void * | out_blend, | ||
| const size_t | out_blend_size, | ||
| gboolean * | out_has_blend | ||
| ) |
Definition at line 2553 of file dev_history.c.
References dt_develop_t::blend_params, dt_develop_t::blend_size, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), FALSE, IS_NULL_PTR, dt_develop_t::params, dt_develop_t::params_size, dt_develop_t::transient_params, dt_develop_t::transient_params_mutex, and TRUE.
Referenced by _sync_focused_in_place().
| void dt_dev_transient_params_set | ( | struct dt_iop_module_t * | module, |
| const void * | params, | ||
| size_t | params_size, | ||
| const void * | blend_params, | ||
| size_t | blend_size | ||
| ) |
Out-of-history transient param channel.
Lets a focused module (drawlayer realtime stroke, ashift/crop edit mode) push a thread-safe snapshot of its in-progress parameters to the pipeline for rendering, WITHOUT writing permanent history. module->params belongs to the GUI thread and must never be read from the pipeline; instead the module copies its transient params into this dev-owned slot under a mutex. The pipeline reads them (also under the mutex) and commits them through the normal commit_params() path, so the transient state reaches the cache through the usual piece->global_hash mechanism. Only one module — the focused gui_module — is active at a time. History is touched only at the real commit, so undo/redo is not polluted and the database is not written per frame.
Publish (copy) module's transient params for the pipeline.
GUI/worker thread only. Replaces any previously published slot. blend_params may be NULL to keep using the history blend params. Does NOT trigger a recompute: the caller flags the pipe the way that fits its case — a realtime module raises DT_DEV_PIPE_TOP_CHANGED on the main pipe for a fast focused-piece resync, while a geometry-changing edit (crop/ashift) calls dt_dev_pixelpipe_resync_history_all() so every pipe replans ROI/formats.
Definition at line 2485 of file dev_history.c.
References dt_develop_t::blend_params, dt_develop_t::blend_size, dt_iop_module_t::dev, dt_free, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), IS_NULL_PTR, dt_develop_t::params, dt_develop_t::params_size, params_size(), dt_develop_t::serial, dt_develop_t::transient_params, and dt_develop_t::transient_params_mutex.
Referenced by _publish_backend_progress().
| void dt_dev_write_history | ( | struct dt_develop_t * | dev, |
| gboolean | async | ||
| ) |
Thread-safe wrapper around dt_dev_write_history_ext() for dev->image_storage.id.
| dev | Develop context. |
| async | When TRUE, schedule the write in a background job. When FALSE, write immediately before returning. |
Definition at line 1333 of file dev_history.c.
References _dt_dev_write_history_job_run(), darktable_t::control, darktable, dt_control_add_job(), dt_control_job_create(), dt_control_job_dispose(), dt_control_job_set_params(), dt_dev_history_notify_change(), dt_dev_write_history(), dt_dev_write_history_ext(), DT_JOB_QUEUE_USER_BG, dt_pthread_rwlock_rdlock, dt_pthread_rwlock_unlock, FALSE, 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_dev_write_history(), dt_drawlayer_commit_dabs(), dt_ioppr_change_iop_order(), dt_lightroom_import(), duplicate_callback(), gui_focus(), and new_history_callback().
| 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. |
Definition at line 1289 of file dev_history.c.
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_print(), dt_develop_t::history, dt_image_t::history_hash, i, darktable_t::image_cache, dt_develop_t::iop_order_list, and IS_NULL_PTR.
Referenced by _dt_dev_history_compress_internal(), _dt_dev_write_history_job_run(), _history_compress_apply(), _hm_restore_dest_from_backup(), _pop_undo(), dt_dev_history_truncate(), dt_dev_load_image(), dt_dev_merge_history_into_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 | ||
| ) |
Definition at line 1250 of file dev_history.c.
References dt_dev_history_item_t::blend_params, dt_dev_history_item_t::blendop_params_size, dt_dev_history_item_t::blendop_version, DT_DEBUG_HISTORY, dt_develop_blend_version(), dt_history_db_write_history_item(), dt_masks_write_masks_history_item(), dt_print(), dt_dev_history_item_t::enabled, dt_dev_history_item_t::forms, dt_dev_history_item_t::iop_order, IS_NULL_PTR, dt_dev_history_item_t::module_version, dt_dev_history_item_t::multi_name, dt_dev_history_item_t::multi_priority, dt_dev_history_item_t::op_name, dt_dev_history_item_t::params, dt_dev_history_item_t::params_size, and params_size().
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. |
Definition at line 507 of file dev_history.c.
References dt_dev_history_item_t::blend_params, dt_dev_history_item_t::blendop_params_size, dt_masks_dup_forms_deep(), dt_dev_history_item_t::forms, IS_NULL_PTR, dt_dev_history_item_t::op_name, dt_dev_history_item_t::params, dt_iop_module_t::params, and dt_dev_history_item_t::params_size.
Referenced by _hm_backup_dest(), _lib_snapshot_capture_state(), _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. |
Definition at line 468 of file dev_history.c.
References DT_DEBUG_HISTORY, dt_dev_add_history_item_ext(), dt_dev_copy_module_contents(), dt_print(), FALSE, IOP_FLAGS_ONE_INSTANCE, IS_NULL_PTR, 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. |
Definition at line 1969 of file dev_history.c.
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().