aboutsummaryrefslogtreecommitdiff
path: root/window-clock.c
diff options
context:
space:
mode:
Diffstat (limited to 'window-clock.c')
-rw-r--r--window-clock.c152
1 files changed, 19 insertions, 133 deletions
diff --git a/window-clock.c b/window-clock.c
index 9e075000..0462142d 100644
--- a/window-clock.c
+++ b/window-clock.c
@@ -1,4 +1,4 @@
-/* $Id: window-clock.c,v 1.2 2009-01-10 19:40:01 nicm Exp $ */
+/* $Id: window-clock.c,v 1.3 2009-01-11 00:48:42 nicm Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -41,6 +41,7 @@ const struct window_mode window_clock_mode = {
struct window_clock_mode_data {
struct screen screen;
+ time_t tim;
};
struct screen *
@@ -50,6 +51,7 @@ window_clock_init(struct window *w)
struct screen *s;
w->modedata = data = xmalloc(sizeof *data);
+ data->tim = time(NULL);
s = &data->screen;
screen_init(s, screen_size_x(&w->base), screen_size_y(&w->base), 0);
@@ -88,6 +90,17 @@ window_clock_key(struct window *w, unused struct client *c, unused int key)
void
window_clock_timer(struct window *w)
{
+ struct window_clock_mode_data *data = w->modedata;
+ struct tm *now, *then;
+ time_t t;
+
+ t = time(NULL);
+ now = gmtime(&t);
+ then = gmtime(&data->tim);
+ if (now->tm_min == then->tm_min)
+ return;
+ data->tim = t;
+
window_clock_draw_screen(w);
server_redraw_window(w);
}
@@ -96,141 +109,14 @@ void
window_clock_draw_screen(struct window *w)
{
struct window_clock_mode_data *data = w->modedata;
- struct screen *s = &data->screen;
struct screen_write_ctx ctx;
- struct grid_cell gc;
- char tim[64], *ptr;
- time_t t;
- u_int colour, i, j, x, y, idx;
- char table[14][5][5] = {
- { { 1,1,1,1,1 }, /* 0 */
- { 1,0,0,0,1 },
- { 1,0,0,0,1 },
- { 1,0,0,0,1 },
- { 1,1,1,1,1 } },
- { { 0,0,0,0,1 }, /* 1 */
- { 0,0,0,0,1 },
- { 0,0,0,0,1 },
- { 0,0,0,0,1 },
- { 0,0,0,0,1 } },
- { { 1,1,1,1,1 }, /* 2 */
- { 0,0,0,0,1 },
- { 1,1,1,1,1 },
- { 1,0,0,0,0 },
- { 1,1,1,1,1 } },
- { { 1,1,1,1,1 }, /* 3 */
- { 0,0,0,0,1 },
- { 1,1,1,1,1 },
- { 0,0,0,0,1 },
- { 1,1,1,1,1 } },
- { { 1,0,0,0,1 }, /* 4 */
- { 1,0,0,0,1 },
- { 1,1,1,1,1 },
- { 0,0,0,0,1 },
- { 0,0,0,0,1 } },
- { { 1,1,1,1,1 }, /* 5 */
- { 1,0,0,0,0 },
- { 1,1,1,1,1 },
- { 0,0,0,0,1 },
- { 1,1,1,1,1 } },
- { { 1,1,1,1,1 }, /* 6 */
- { 1,0,0,0,0 },
- { 1,1,1,1,1 },
- { 1,0,0,0,1 },
- { 1,1,1,1,1 } },
- { { 1,1,1,1,1 }, /* 7 */
- { 0,0,0,0,1 },
- { 0,0,0,0,1 },
- { 0,0,0,0,1 },
- { 0,0,0,0,1 } },
- { { 1,1,1,1,1 }, /* 8 */
- { 1,0,0,0,1 },
- { 1,1,1,1,1 },
- { 1,0,0,0,1 },
- { 1,1,1,1,1 } },
- { { 1,1,1,1,1 }, /* 9 */
- { 1,0,0,0,1 },
- { 1,1,1,1,1 },
- { 0,0,0,0,1 },
- { 1,1,1,1,1 } },
- { { 0,0,0,0,0 }, /* : */
- { 0,0,1,0,0 },
- { 0,0,0,0,0 },
- { 0,0,1,0,0 },
- { 0,0,0,0,0 } },
- { { 1,1,1,1,1 }, /* A */
- { 1,0,0,0,1 },
- { 1,1,1,1,1 },
- { 1,0,0,0,1 },
- { 1,0,0,0,1 } },
- { { 1,1,1,1,1 }, /* P */
- { 1,0,0,0,1 },
- { 1,1,1,1,1 },
- { 1,0,0,0,0 },
- { 1,0,0,0,0 } },
- { { 1,0,0,0,1 }, /* M */
- { 1,1,0,1,1 },
- { 1,0,1,0,1 },
- { 1,0,0,0,1 },
- { 1,0,0,0,1 } },
- };
+ u_int colour;
+ int style;
colour = options_get_number(&w->options, "clock-mode-colour");
+ style = options_get_number(&w->options, "clock-mode-style");
- t = time(NULL);
- if (options_get_number(&w->options, "clock-mode-style") == 0)
- strftime(tim, sizeof tim, "%l:%M %p", localtime(&t));
- else
- strftime(tim, sizeof tim, "%H:%M", localtime(&t));
-
- screen_write_start(&ctx, s, NULL, NULL);
- screen_write_clearscreen(&ctx);
- memcpy(&gc, &grid_default_cell, sizeof gc);
-
- if (screen_size_x(s) < 6 * strlen(tim) || screen_size_y(s) < 6) {
- if (screen_size_x(s) >= strlen(tim) && screen_size_y(s) != 0) {
- x = (screen_size_x(s) / 2) - (strlen(tim) / 2);
- y = screen_size_y(s) / 2;
- screen_write_cursormove(&ctx, x, y);
-
- gc.fg = colour;
- screen_write_puts(&ctx, &gc, "%s", tim);
- }
- screen_write_stop(&ctx);
- return;
- }
-
- x = (screen_size_x(s) / 2) - 3 * strlen(tim);
- y = (screen_size_y(s) / 2) - 3;
-
- for (ptr = tim; *ptr != '\0'; ptr++) {
- if (*ptr >= '0' && *ptr <= '9')
- idx = *ptr - '0';
- else if (*ptr == ':')
- idx = 10;
- else if (*ptr == 'A')
- idx = 11;
- else if (*ptr == 'P')
- idx = 12;
- else if (*ptr == 'M')
- idx = 13;
- else {
- x += 6;
- continue;
- }
-
- for (j = 0; j < 5; j++) {
- screen_write_cursormove(&ctx, x, y + j);
- for (i = 0; i < 5; i++) {
- if (table[idx][j][i])
- gc.bg = colour;
- else
- gc.bg = 0;
- screen_write_putc(&ctx, &gc, ' ');
- }
- }
- x += 6;
- }
-
+ screen_write_start(&ctx, &data->screen, NULL, NULL);
+ clock_draw(&ctx, colour, style);
screen_write_stop(&ctx);
}