From 0c567c67933cc48ac57f08167d88a57ce0504524 Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Tue, 9 Jul 2024 17:02:42 +0200 Subject: Add event handling --- src/comet.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) (limited to 'src/comet.c') diff --git a/src/comet.c b/src/comet.c index d496590..64d24c0 100644 --- a/src/comet.c +++ b/src/comet.c @@ -4,10 +4,32 @@ #include "window.h" #include "layout.h" +#include "util.h" +#include "event.h" #define ANY_LOG_IMPLEMENT #include "any_log.h" +void update(block_t *block) +{ + if (block->update_cb != NULL) { + struct timespec now, diff; + timespec_get(&now, TIME_UTC); + diff = timespec_diff(block->update_last, now); + + if (timespec_greater(diff, block->update_interval)) { + log_debug("Updating block"); + block->update_cb(block); + block->update_last = now; + } + } + + if (block->type == BLOCK_GROUP) { + for (int i = 0; i < block->group.n_children; i++) + update(&block->group.children[i]); + } +} + cairo_surface_t *render(layout_t *layout, layout_info_t info) { cairo_surface_t *surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, info.width, info.height); @@ -30,7 +52,6 @@ cairo_surface_t *render(layout_t *layout, layout_info_t info) return surface; } - int main(int argc, char **argv) { setlocale(LC_CTYPE, ""); @@ -124,13 +145,16 @@ int main(int argc, char **argv) window_move(&window, x_padding, y_padding); while (true) { + update(&top); + layout_t *layout = layout_create(&top, info); + + event_dispatch(&display, layout); + cairo_surface_t *surface = render(layout, info); window_present(&window, surface, width, height); cairo_surface_destroy(surface); layout_free(layout); - - sleep(1); } window_close(&window); -- cgit v1.2.3