V2.0.0
This commit is contained in:
commit
9020ded6ce
95 files changed
+11394
No files matched your search
@@ -0,0 +1,55 @@
|
||||
/* Historial unificado (deshacer/rehacer) de un documento.
|
||||
* - Edición de píxeles, fotogramas, capas y propiedades usan el mismo historial.
|
||||
* - Operaciones agrupadas: begin_group ... end_group = UNA entrada.
|
||||
* - Límites adaptativos: memoria, nº de operaciones y almacenamiento temporal.
|
||||
* Al superarlos, las operaciones más antiguas de píxeles se pasan a disco
|
||||
* (si hay carpeta temporal y espacio) o, si no, se descartan (la más
|
||||
* antigua primero). Nunca se descarta lo ya aplicado al documento. */
|
||||
#ifndef TAHGIBU_HISTORY_H
|
||||
#define TAHGIBU_HISTORY_H
|
||||
|
||||
#include "tahgibu/document.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
tgb_status tgb_history_undo(tgb_document *doc); /* TGB_ERR_NOTHING si no hay nada */
|
||||
tgb_status tgb_history_redo(tgb_document *doc);
|
||||
bool tgb_history_can_undo(const tgb_document *doc);
|
||||
bool tgb_history_can_redo(const tgb_document *doc);
|
||||
const char *tgb_history_undo_label(const tgb_document *doc); /* NULL si no hay */
|
||||
const char *tgb_history_redo_label(const tgb_document *doc);
|
||||
|
||||
/* Grupos anidables (hasta 8 niveles). Mientras hay un grupo abierto no se
|
||||
* puede deshacer/rehacer. abort_group deshace lo hecho dentro del grupo y
|
||||
* lo descarta (lo usan las extensiones al fallar). */
|
||||
tgb_status tgb_history_begin_group(tgb_document *doc, const char *label);
|
||||
tgb_status tgb_history_end_group(tgb_document *doc);
|
||||
tgb_status tgb_history_abort_group(tgb_document *doc);
|
||||
|
||||
typedef struct tgb_history_limits {
|
||||
size_t max_memory_bytes; /* memoria para datos del historial */
|
||||
uint32_t max_operations; /* nº máximo de operaciones deshacibles */
|
||||
size_t max_temp_bytes; /* disco temporal permitido (0 = no usar disco) */
|
||||
char temp_dir[512]; /* carpeta temporal ("" = no usar disco) */
|
||||
} tgb_history_limits;
|
||||
|
||||
tgb_status tgb_history_set_limits(tgb_document *doc, const tgb_history_limits *limits);
|
||||
void tgb_history_get_limits(const tgb_document *doc, tgb_history_limits *out);
|
||||
/* Recalcula los límites según la RAM libre, el tamaño del documento y el
|
||||
* espacio en disco. Llámalo de vez en cuando (p. ej. cada minuto). */
|
||||
tgb_status tgb_history_adapt(tgb_document *doc);
|
||||
|
||||
typedef struct tgb_history_stats {
|
||||
size_t undo_count, redo_count;
|
||||
size_t memory_bytes, temp_bytes;
|
||||
uint64_t dropped_ops, spilled_ops;
|
||||
} tgb_history_stats;
|
||||
void tgb_history_get_stats(const tgb_document *doc, tgb_history_stats *out);
|
||||
void tgb_history_clear(tgb_document *doc);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
Reference in new issue
Block a user