Files
2026-10-24 12:01:52 -03:00

51 lines
1.7 KiB
C

/* Bus de eventos sencillo. Las llamadas a los suscriptores son SÍNCRONAS,
* en el mismo hilo que provocó el cambio. Un suscriptor no debe
* suscribirse/desuscribirse ni modificar el documento dentro de su
* callback. */
#ifndef TAHGIBU_EVENTS_H
#define TAHGIBU_EVENTS_H
#include <stdint.h>
#include "tahgibu/canvas.h"
#include "tahgibu/error.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct tgb_context tgb_context;
typedef struct tgb_document tgb_document;
typedef enum tgb_event_type {
TGB_EVENT_DOCUMENT_CHANGED = 1, /* cualquier cambio del documento */
TGB_EVENT_PIXELS_CHANGED, /* cambian píxeles (rect, frame_id, layer_id) */
TGB_EVENT_FRAMES_CHANGED, /* altas/bajas/orden/duración de fotogramas */
TGB_EVENT_LAYERS_CHANGED, /* altas/bajas/propiedades de capas */
TGB_EVENT_HISTORY_CHANGED, /* undo/redo disponible o modificado */
TGB_EVENT_HISTORY_TRUNCATED, /* se descartó historial por límites */
TGB_EVENT_RECOVERY_POINTS_CHANGED,
TGB_EVENT_DOCUMENT_SAVED,
TGB_EVENT_AUTOSAVED,
TGB_EVENT_PLUGIN_LOADED,
TGB_EVENT_PLUGIN_UNLOADED
} tgb_event_type;
typedef struct tgb_event {
tgb_event_type type;
tgb_document *document; /* puede ser NULL (eventos globales) */
uint32_t frame_id, layer_id;
tgb_rect rect;
const char *text; /* nombre/etiqueta; válido solo durante el callback */
} tgb_event;
typedef void (*tgb_event_fn)(const tgb_event *event, void *user);
/* Devuelve un identificador >0 en *out_id. Máximo 64 suscriptores. */
tgb_status tgb_events_subscribe(tgb_context *ctx, tgb_event_fn fn, void *user, uint32_t *out_id);
tgb_status tgb_events_unsubscribe(tgb_context *ctx, uint32_t id);
#ifdef __cplusplus
}
#endif
#endif