From 399220f14bc60581490936d9f1a0fd353bfc9ef5 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Wed, 18 Nov 2015 08:22:37 -0500 Subject: Fix up wayland client implementation Now it receives frame callbacks and renders properly, and is double buffered and such. --- swaybg/main.c | 37 ++++++++++++------------------------- 1 file changed, 12 insertions(+), 25 deletions(-) (limited to 'swaybg/main.c') diff --git a/swaybg/main.c b/swaybg/main.c index db5af375..e8f400c0 100644 --- a/swaybg/main.c +++ b/swaybg/main.c @@ -2,7 +2,7 @@ #include #include #include -#include "client.h" +#include "client/client.h" #include "log.h" struct client_state *state; @@ -14,36 +14,23 @@ void sway_terminate(void) { int main(int argc, char **argv) { init_log(L_INFO); - if (!(state = client_setup())) { + if (!(state = client_setup(100, 100))) { return -1; } - uint8_t r = 0, g = 0, b = 0; + uint8_t r = 100, g = 100, b = 100; - long last_ms = 0; - int rs; do { - struct timespec spec; - clock_gettime(CLOCK_MONOTONIC, &spec); - long ms = round(spec.tv_nsec / 1.0e6); - - cairo_set_source_rgb(state->cairo, r, g, b); - cairo_rectangle(state->cairo, 0, 0, 100, 100); - cairo_fill(state->cairo); - - rs = client_render(state); - - if (ms - last_ms > 100) { - r++; - if (r == 0) { - g++; - if (g == 0) { - b++; - } - } - ms = last_ms; + if (client_prerender(state)) { + cairo_set_source_rgb(state->cairo, r / 256.0, g / 256.0, b / 256.0); + cairo_rectangle(state->cairo, 0, 0, state->width, state->height); + cairo_fill(state->cairo); + + client_render(state); + + r++; if (r == 0) { g++; if (g == 0) { b++; } } } - } while (rs); + } while (wl_display_dispatch(state->display) != -1); client_teardown(state); return 0; -- cgit v1.2.3-54-g00ecf