diff options
| author | David Moc <personal@cdatgoose.org> | 2026-06-02 13:50:21 +0200 |
|---|---|---|
| committer | David Moc <personal@cdatgoose.org> | 2026-06-02 13:50:21 +0200 |
| commit | a15cb041654ae307add0b998b526c87c3f42bf5f (patch) | |
| tree | 225bb4b70e9fa05aa5f4d2722a1a9cf5fc6fca7f /src/buffers.c | |
| parent | 6aeaa171dc1ca43392f53cbd02097f76e1b1c5a0 (diff) | |
Add plugin hooks and mode plugins
Diffstat (limited to 'src/buffers.c')
| -rw-r--r-- | src/buffers.c | 129 |
1 files changed, 78 insertions, 51 deletions
diff --git a/src/buffers.c b/src/buffers.c index a932712..1e42bfc 100644 --- a/src/buffers.c +++ b/src/buffers.c @@ -719,9 +719,8 @@ int ecex_buffer_set_renderer(buffer_t *buffer, ecex_buffer_userdata_free_fn free_fn, int flags) { if (ecex_trace_callbacks_enabled()) { - fprintf(stderr, "ecex-log: buffer_set_renderer buffer=%p fn=%p userdata=%p free=%p flags=%d\n", - (void *)buffer, (void *)fn, userdata, (void *)free_fn, flags); - fflush(stderr); + ecex_logf("buffer_set_renderer buffer=%p fn=%p userdata=%p free=%p flags=%d", + (void *)buffer, (void *)fn, userdata, (void *)free_fn, flags); } if (!buffer) return ECEX_ERR; if (buffer->render_userdata_free && buffer->render_userdata && buffer->render_userdata != userdata) { @@ -736,10 +735,9 @@ int ecex_buffer_set_renderer(buffer_t *buffer, int ecex_buffer_clear_renderer(buffer_t *buffer) { if (ecex_trace_callbacks_enabled()) { - fprintf(stderr, "ecex-log: buffer_clear_renderer buffer=%p userdata=%p free=%p\n", - (void *)buffer, buffer ? buffer->render_userdata : NULL, - buffer ? (void *)buffer->render_userdata_free : NULL); - fflush(stderr); + ecex_logf("buffer_clear_renderer buffer=%p userdata=%p free=%p", + (void *)buffer, buffer ? buffer->render_userdata : NULL, + buffer ? (void *)buffer->render_userdata_free : NULL); } if (!buffer) return ECEX_ERR; if (buffer->render_userdata_free && buffer->render_userdata) { @@ -766,9 +764,8 @@ int ecex_buffer_set_mouse_handler(buffer_t *buffer, void *userdata, ecex_buffer_userdata_free_fn free_fn) { if (ecex_trace_callbacks_enabled()) { - fprintf(stderr, "ecex-log: buffer_set_mouse_handler buffer=%p fn=%p userdata=%p free=%p\n", - (void *)buffer, (void *)fn, userdata, (void *)free_fn); - fflush(stderr); + ecex_logf("buffer_set_mouse_handler buffer=%p fn=%p userdata=%p free=%p", + (void *)buffer, (void *)fn, userdata, (void *)free_fn); } if (!buffer || !fn) return ECEX_ERR; if (buffer->mouse_userdata_free && buffer->mouse_userdata && buffer->mouse_userdata != userdata) { @@ -782,10 +779,9 @@ int ecex_buffer_set_mouse_handler(buffer_t *buffer, int ecex_buffer_clear_mouse_handler(buffer_t *buffer) { if (ecex_trace_callbacks_enabled()) { - fprintf(stderr, "ecex-log: buffer_clear_mouse_handler buffer=%p userdata=%p free=%p\n", - (void *)buffer, buffer ? buffer->mouse_userdata : NULL, - buffer ? (void *)buffer->mouse_userdata_free : NULL); - fflush(stderr); + ecex_logf("buffer_clear_mouse_handler buffer=%p userdata=%p free=%p", + (void *)buffer, buffer ? buffer->mouse_userdata : NULL, + buffer ? (void *)buffer->mouse_userdata_free : NULL); } if (!buffer) return ECEX_ERR; if (buffer->mouse_userdata_free && buffer->mouse_userdata) { @@ -811,9 +807,8 @@ int ecex_buffer_set_animation(buffer_t *buffer, ecex_buffer_userdata_free_fn free_fn, double fps) { if (ecex_trace_callbacks_enabled()) { - fprintf(stderr, "ecex-log: buffer_set_animation buffer=%p fn=%p userdata=%p free=%p fps=%.3f\n", - (void *)buffer, (void *)fn, userdata, (void *)free_fn, fps); - fflush(stderr); + ecex_logf("buffer_set_animation buffer=%p fn=%p userdata=%p free=%p fps=%.3f", + (void *)buffer, (void *)fn, userdata, (void *)free_fn, fps); } if (!buffer || !fn) return ECEX_ERR; @@ -841,9 +836,8 @@ int ecex_buffer_set_animation_ms(buffer_t *buffer, ecex_buffer_userdata_free_fn free_fn, int fps) { if (ecex_trace_callbacks_enabled()) { - fprintf(stderr, "ecex-log: buffer_set_animation_ms buffer=%p fn=%p userdata=%p free=%p fps=%d\n", - (void *)buffer, (void *)fn, userdata, (void *)free_fn, fps); - fflush(stderr); + ecex_logf("buffer_set_animation_ms buffer=%p fn=%p userdata=%p free=%p fps=%d", + (void *)buffer, (void *)fn, userdata, (void *)free_fn, fps); } if (!buffer || !fn) return ECEX_ERR; @@ -867,10 +861,9 @@ int ecex_buffer_set_animation_ms(buffer_t *buffer, int ecex_buffer_clear_animation(buffer_t *buffer) { if (ecex_trace_callbacks_enabled()) { - fprintf(stderr, "ecex-log: buffer_clear_animation buffer=%p userdata=%p free=%p\n", - (void *)buffer, buffer ? buffer->tick_userdata : NULL, - buffer ? (void *)buffer->tick_userdata_free : NULL); - fflush(stderr); + ecex_logf("buffer_clear_animation buffer=%p userdata=%p free=%p", + (void *)buffer, buffer ? buffer->tick_userdata : NULL, + buffer ? (void *)buffer->tick_userdata_free : NULL); } if (!buffer) return ECEX_ERR; if (buffer->tick_userdata_free && buffer->tick_userdata) { @@ -899,25 +892,37 @@ int ecex_tick_animations(ecex_t *ed, double now_seconds) { if (!ed) return 0; int dirty = 0; + int frame_group_open = 0; + int trace_callbacks = ecex_trace_callbacks_enabled(); for (size_t i = 0; i < ed->buffer_count; i++) { buffer_t *buffer = ed->buffers[i]; if (!buffer || !buffer->tick_enabled) continue; if (buffer->tick_uses_ms) { if (!buffer->tick_ms_fn) { - if (ecex_trace_callbacks_enabled()) { - fprintf(stderr, "ecex-log: animation_tick_skip_ms_null buffer=%p userdata=%p\n", - (void *)buffer, buffer->tick_userdata); - fflush(stderr); + if (trace_callbacks) { + if (!frame_group_open) { + char frame_msg[128]; + snprintf(frame_msg, sizeof(frame_msg), "animation frame start now=%.6f", now_seconds); + ecex_log_group_begin(frame_msg); + frame_group_open = 1; + } + ecex_logf("animation_tick_skip_ms_null buffer=%p userdata=%p", + (void *)buffer, buffer->tick_userdata); } buffer->tick_enabled = 0; continue; } } else { if (!buffer->tick_fn) { - if (ecex_trace_callbacks_enabled()) { - fprintf(stderr, "ecex-log: animation_tick_skip_null buffer=%p userdata=%p\n", - (void *)buffer, buffer->tick_userdata); - fflush(stderr); + if (trace_callbacks) { + if (!frame_group_open) { + char frame_msg[128]; + snprintf(frame_msg, sizeof(frame_msg), "animation frame start now=%.6f", now_seconds); + ecex_log_group_begin(frame_msg); + frame_group_open = 1; + } + ecex_logf("animation_tick_skip_null buffer=%p userdata=%p", + (void *)buffer, buffer->tick_userdata); } buffer->tick_enabled = 0; continue; @@ -935,30 +940,48 @@ int ecex_tick_animations(ecex_t *ed, double now_seconds) { buffer->tick_last_time = now_seconds; int tick_dirty = 0; + if (!frame_group_open) { + char frame_msg[128]; + snprintf(frame_msg, sizeof(frame_msg), "animation frame start now=%.6f", now_seconds); + ecex_log_group_begin(frame_msg); + frame_group_open = 1; + } if (buffer->tick_uses_ms) { int now_ms = (int)(now_seconds * 1000.0); - if (ecex_trace_callbacks_enabled()) { - fprintf(stderr, "ecex-log: animation_tick_ms_enter buffer=%p fn=%p userdata=%p now_ms=%d\n", - (void *)buffer, (void *)buffer->tick_ms_fn, buffer->tick_userdata, now_ms); - fflush(stderr); + if (trace_callbacks) { + char tick_msg[256]; + snprintf(tick_msg, + sizeof(tick_msg), + "animation tick ms start buffer=%p fn=%p userdata=%p now_ms=%d", + (void *)buffer, + (void *)buffer->tick_ms_fn, + buffer->tick_userdata, + now_ms); + ecex_log_group_begin(tick_msg); } tick_dirty = buffer->tick_ms_fn(ed, buffer, now_ms, buffer->tick_userdata); - if (ecex_trace_callbacks_enabled()) { - fprintf(stderr, "ecex-log: animation_tick_ms_leave buffer=%p result=%d\n", - (void *)buffer, tick_dirty); - fflush(stderr); + if (trace_callbacks) { + char tick_msg[128]; + snprintf(tick_msg, sizeof(tick_msg), "animation tick ms end buffer=%p result=%d", (void *)buffer, tick_dirty); + ecex_log_group_end(tick_msg); } } else { - if (ecex_trace_callbacks_enabled()) { - fprintf(stderr, "ecex-log: animation_tick_enter buffer=%p fn=%p userdata=%p now=%.6f\n", - (void *)buffer, (void *)buffer->tick_fn, buffer->tick_userdata, now_seconds); - fflush(stderr); + if (trace_callbacks) { + char tick_msg[256]; + snprintf(tick_msg, + sizeof(tick_msg), + "animation tick start buffer=%p fn=%p userdata=%p now=%.6f", + (void *)buffer, + (void *)buffer->tick_fn, + buffer->tick_userdata, + now_seconds); + ecex_log_group_begin(tick_msg); } tick_dirty = buffer->tick_fn(ed, buffer, now_seconds, buffer->tick_userdata); - if (ecex_trace_callbacks_enabled()) { - fprintf(stderr, "ecex-log: animation_tick_leave buffer=%p result=%d\n", - (void *)buffer, tick_dirty); - fflush(stderr); + if (trace_callbacks) { + char tick_msg[128]; + snprintf(tick_msg, sizeof(tick_msg), "animation tick end buffer=%p result=%d", (void *)buffer, tick_dirty); + ecex_log_group_end(tick_msg); } } if (tick_dirty != 0) { @@ -966,6 +989,10 @@ int ecex_tick_animations(ecex_t *ed, double now_seconds) { } } + if (frame_group_open) { + ecex_log_group_end(dirty ? "animation frame end dirty=1" : "animation frame end dirty=0"); + } + return dirty; } @@ -983,17 +1010,17 @@ int ecex_buffer_text_len(buffer_t *buffer) { return buffer->len > (size_t)2147483647 ? 2147483647 : (int)buffer->len; } -int ecex_buffer_scroll_line(buffer_t *buffer) { +int ecex_buffer_scroll_line_index(buffer_t *buffer) { if (!buffer) return 0; return buffer->scroll_line > (size_t)2147483647 ? 2147483647 : (int)buffer->scroll_line; } -int ecex_buffer_line_count_i(buffer_t *buffer) { +int ecex_buffer_line_count_int(buffer_t *buffer) { size_t n = buffer_line_count(buffer); return n > (size_t)2147483647 ? 2147483647 : (int)n; } -int ecex_buffer_line_copy(buffer_t *buffer, int line, char *out, int out_cap) { +int ecex_buffer_line_copy_text(buffer_t *buffer, int line, char *out, int out_cap) { size_t current = 0; size_t pos = 0; size_t start; |
