diff options
| author | Federico Angelilli <code@fedang.net> | 2024-07-09 17:02:42 +0200 |
|---|---|---|
| committer | Federico Angelilli <code@fedang.net> | 2024-07-09 17:02:42 +0200 |
| commit | 0c567c67933cc48ac57f08167d88a57ce0504524 (patch) | |
| tree | da7c5ccc0935093cf5ecc661371db324ea0005cb /src/comet.c | |
| parent | 28adc6b395d2fb7545189636cec3651b9c2a5f73 (diff) | |
Add event handling
Diffstat (limited to 'src/comet.c')
| -rw-r--r-- | src/comet.c | 30 |
1 files changed, 27 insertions, 3 deletions
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); |
