diff options
| author | Federico Angelilli <code@fedang.net> | 2023-11-19 22:28:35 +0100 |
|---|---|---|
| committer | Federico Angelilli <code@fedang.net> | 2023-11-19 22:28:35 +0100 |
| commit | 7bb670a21a3e6234ac70a031ecc164159559285a (patch) | |
| tree | eb3d59c466049ec72ac88abd9335cf96a4835e1e /src | |
| parent | 89b205f3138b94325458ab121d5adb4a00091860 (diff) | |
Add date buttons with periodic updates
Diffstat (limited to 'src')
| -rw-r--r-- | src/comet.c | 24 | ||||
| -rw-r--r-- | src/connect.c | 10 | ||||
| -rw-r--r-- | src/draw.c | 8 |
3 files changed, 35 insertions, 7 deletions
diff --git a/src/comet.c b/src/comet.c index 36d517a..a6d94e8 100644 --- a/src/comet.c +++ b/src/comet.c @@ -19,8 +19,20 @@ static gboolean mainloop_quit(gpointer data) static gboolean mainloop_draw(gpointer data) { State *state = data; + draw_compute_layout(state->draw, state->win, state->btns); draw_paint(state->draw, state->win); - return G_SOURCE_REMOVE; + return G_SOURCE_CONTINUE; +} + +static gboolean date_update(gpointer data) +{ + Button *btn = data; + g_free(btn->text); + GDateTime *time = g_date_time_new_now_local(); + btn->text = g_date_time_format(time, "%A %d %H:%M"); + g_assert(btn->text != NULL); + log_debug("Updated date"); + return G_SOURCE_CONTINUE; } static void log_handler(const char *log_domain, @@ -81,16 +93,19 @@ int main(int argc, char **argv) state_add_button(state, btn); } - Button *long_btn = button_create("long button", PANGO_ALIGN_CENTER); + Button *long_btn = button_create("long button", PANGO_ALIGN_RIGHT); button_set_colors(long_btn, background, foreground, stroke); button_set_action(long_btn, action); state_add_button(state, long_btn); - Button *date_btn = button_create("date = today", PANGO_ALIGN_RIGHT); + Button *date_btn = button_create("date", PANGO_ALIGN_CENTER); button_set_colors(date_btn, background, foreground, stroke); button_set_action(date_btn, action); state_add_button(state, date_btn); + date_update(date_btn); + g_timeout_add(30 * 1000, date_update, date_btn); + // purple Color background2 = { 0.502, 0.168, 0.886, 1 }; Button *u_btn = button_create("U", PANGO_ALIGN_RIGHT); @@ -106,7 +121,8 @@ int main(int argc, char **argv) guint source_term = g_unix_signal_add(SIGTERM, mainloop_quit, mainloop); guint source_int = g_unix_signal_add(SIGINT, mainloop_quit, mainloop); - guint id = g_timeout_add(100, mainloop_draw, state); + // TODO: Redraw only when needed (dirty flag) + guint id = g_timeout_add(1000, mainloop_draw, state); log_debug("Starting main loop"); g_main_loop_run(mainloop); diff --git a/src/connect.c b/src/connect.c index bc45812..083d5a7 100644 --- a/src/connect.c +++ b/src/connect.c @@ -126,6 +126,12 @@ static gboolean source_check(GSource *source) return xsource->event != NULL; } +static void redraw(State *state) +{ + draw_compute_layout(state->draw, state->win, state->btns); + draw_paint(state->draw, state->win); +} + static gboolean source_dispatch(GSource *source, GSourceFunc callback, gpointer data) { EventSource *xsource = (EventSource *)source; @@ -157,7 +163,7 @@ static gboolean source_dispatch(GSource *source, GSourceFunc callback, gpointer log_debug("Processing event 'Expose' [type=%d]", XCB_EXPOSE); // Redraw - draw_paint(xsource->con->state->draw, xsource->con->state->win); + redraw(xsource->con->state); break; } @@ -198,7 +204,7 @@ static gboolean source_dispatch(GSource *source, GSourceFunc callback, gpointer update_scale(xsource->con); // Redraw - draw_paint(xsource->con->state->draw, xsource->con->state->win); + redraw(xsource->con->state); } break; } @@ -118,6 +118,13 @@ void draw_paint(Drawable *draw, Window *win) pango_cairo_show_layout(cr, layout->pl); } + // Draw midpoint line + //cairo_set_source_rgba(cr, 1, 1, 1, 1); + //cairo_set_line_width(cr, 3); + //cairo_move_to(cr, width / 2, 0); + //cairo_line_to(cr, width / 2, height); + //cairo_stroke(cr); + cairo_destroy(cr); // TODO: Move these somewhere else @@ -247,7 +254,6 @@ void draw_compute_layout(Drawable *draw, Window *win, GList *btns) } log_debug("Updated layouts"); - g_list_free(btns); } void draw_set_background(Drawable *draw, Color background) |
