From 6aeaa171dc1ca43392f53cbd02097f76e1b1c5a0 Mon Sep 17 00:00:00 2001 From: David Moc Date: Sun, 31 May 2026 03:47:04 +0200 Subject: Hardened API, tetris, MD-View --- include/types.h | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) (limited to 'include/types.h') diff --git a/include/types.h b/include/types.h index 1dc2158..800c3d6 100644 --- a/include/types.h +++ b/include/types.h @@ -6,11 +6,18 @@ typedef struct ecex ecex_t; typedef struct buffer buffer_t; typedef struct ecex_window ecex_window_t; +typedef struct ecex_draw_context ecex_draw_context_t; typedef int (*ecex_command_fn)(ecex_t *ed); typedef int (*ecex_interactive_line_fn)(ecex_t *ed, buffer_t *buffer, size_t line, const char *payload, void *userdata); typedef const char *(*ecex_clipboard_get_fn)(void *userdata); typedef void (*ecex_clipboard_set_fn)(void *userdata, const char *text); +typedef int (*ecex_buffer_render_fn)(ecex_t *ed, buffer_t *buffer, ecex_draw_context_t *ctx, void *userdata); +typedef int (*ecex_buffer_tick_fn)(ecex_t *ed, buffer_t *buffer, double now_seconds, void *userdata); +typedef int (*ecex_buffer_tick_ms_fn)(ecex_t *ed, buffer_t *buffer, int now_ms, void *userdata); +typedef int (*ecex_buffer_mouse_fn)(ecex_t *ed, buffer_t *buffer, int event, int x, int y, int button, void *userdata); +typedef int (*ecex_file_handler_fn)(ecex_t *ed, buffer_t *buffer); +typedef void (*ecex_buffer_userdata_free_fn)(void *userdata); typedef enum ecex_prompt_request { ECEX_PROMPT_NONE = 0, @@ -19,12 +26,48 @@ typedef enum ecex_prompt_request { ECEX_PROMPT_EVAL_FILE, ECEX_PROMPT_SWITCH_BUFFER, ECEX_PROMPT_KILL_BUFFER, + ECEX_PROMPT_FORCE_KILL_BUFFER, ECEX_PROMPT_COMPILE, ECEX_PROMPT_GREP, ECEX_PROMPT_ISEARCH_FORWARD, ECEX_PROMPT_ISEARCH_BACKWARD, } ecex_prompt_request_t; + +#define ECEX_RENDER_OVERLAY 0 +#define ECEX_RENDER_REPLACE_CONTENT 1 + +#define ECEX_MOUSE_MOVE 0 +#define ECEX_MOUSE_PRESS 1 +#define ECEX_MOUSE_RELEASE 2 +#define ECEX_MOUSE_DRAG 3 +#define ECEX_MOUSE_BUTTON_LEFT 0 +#define ECEX_MOUSE_BUTTON_RIGHT 1 +#define ECEX_MOUSE_BUTTON_MIDDLE 2 + +typedef enum ecex_draw_text_align { + ECEX_TEXT_ALIGN_LEFT = 0, + ECEX_TEXT_ALIGN_CENTER = 1, + ECEX_TEXT_ALIGN_RIGHT = 2, +} ecex_draw_text_align_t; + +struct ecex_draw_context { + float x; + float y; + float w; + float h; + float content_x; + float content_y; + float content_w; + float content_h; + float font_size; + float line_height; + float char_width; + size_t window_index; + int active; + void *internal; +}; + typedef struct ecex_undo_entry { char *data; size_t len; @@ -98,6 +141,38 @@ struct buffer { struct ecex_interactive_line_action *interactive_actions; size_t interactive_action_cap; size_t interactive_action_count; + + int media_kind; + char *media_path; + int media_width; + int media_height; + unsigned char *media_pixels; + int media_dirty; + unsigned int media_texture; + int media_texture_width; + int media_texture_height; + void *media_pipe; + double media_last_frame_time; + int media_playing; + char media_status[256]; + + ecex_buffer_render_fn render_fn; + void *render_userdata; + ecex_buffer_userdata_free_fn render_userdata_free; + int render_flags; + + ecex_buffer_mouse_fn mouse_fn; + void *mouse_userdata; + ecex_buffer_userdata_free_fn mouse_userdata_free; + + ecex_buffer_tick_fn tick_fn; + ecex_buffer_tick_ms_fn tick_ms_fn; + void *tick_userdata; + ecex_buffer_userdata_free_fn tick_userdata_free; + double tick_interval; + double tick_last_time; + int tick_enabled; + int tick_uses_ms; }; typedef struct ecex_interactive_line_action { @@ -128,6 +203,38 @@ typedef struct ecex_major_mode { char *name; } ecex_major_mode_t; +typedef enum ecex_var_kind { + ECEX_VAR_BYTES = 0, + ECEX_VAR_I32 = 1, +} ecex_var_kind_t; + +typedef struct ecex_var_entry { + void *owner; + char *name; + void *data; + size_t elem_size; + size_t count; + int kind; + int dynamic; +} ecex_var_entry_t; + +typedef struct ecex_text_entry { + void *owner; + int id; + char *text; + size_t len; +} ecex_text_entry_t; + +typedef struct ecex_file_handler { + char *extension; + ecex_file_handler_fn fn; +} ecex_file_handler_t; + +typedef struct ecex_object_entry { + void *ptr; + size_t size; +} ecex_object_entry_t; + struct ecex_window { buffer_t *buffer; float x; @@ -143,6 +250,7 @@ struct ecex { size_t current_buffer_index; buffer_t *current_buffer; + buffer_t *previous_buffer; ecex_window_t *windows; size_t window_cap; @@ -170,6 +278,22 @@ struct ecex { size_t major_mode_count; int next_major_mode_id; + ecex_var_entry_t *vars; + size_t var_cap; + size_t var_count; + + ecex_text_entry_t *texts; + size_t text_cap; + size_t text_count; + + ecex_file_handler_t *file_handlers; + size_t file_handler_cap; + size_t file_handler_count; + + ecex_object_entry_t *objects; + size_t object_cap; + size_t object_count; + char *last_eval_source; char *last_eval_filename; int last_eval_wrap_as_statements; -- cgit v1.2.3