aboutsummaryrefslogtreecommitdiff
path: root/include/types.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/types.h')
-rw-r--r--include/types.h124
1 files changed, 124 insertions, 0 deletions
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;