diff options
author | Leon Henrik Plickat <leonhenrik.plickat@stud.uni-goettingen.de> | 2020-09-25 19:53:04 +0200 |
---|---|---|
committer | Leon Henrik Plickat <leonhenrik.plickat@stud.uni-goettingen.de> | 2020-09-25 19:53:04 +0200 |
commit | e543523be31d85846521ee447357f0afdb0b46d2 (patch) | |
tree | 5d332b0b448cc5a01a42a8f5478edfa60dc74b89 /src/render.c | |
parent | af81637f64ba5112e9da0db79f9eadd1934308eb (diff) | |
download | wlclock-e543523be31d85846521ee447357f0afdb0b46d2.tar.gz wlclock-e543523be31d85846521ee447357f0afdb0b46d2.tar.bz2 |
Add "lines" clock hand style
Diffstat (limited to 'src/render.c')
-rw-r--r-- | src/render.c | 71 |
1 files changed, 44 insertions, 27 deletions
diff --git a/src/render.c b/src/render.c index f88d913..25fada5 100644 --- a/src/render.c +++ b/src/render.c @@ -148,40 +148,57 @@ static void draw_clock_hands (cairo_t *cairo, int32_t size, int32_t scale, struc double mr = scale * 0.6 * size / 2; /* Radii mimick xclock. */ double hr = scale * 0.4 * size / 2; double ir = scale * 0.075 * size / 2; - double tip_phi, back_phi_1, back_phi_2, phi_step_min = 2 * PI / 60, phi_step_h = 2 * PI / 12; struct tm tm = *localtime(&clock->now); - - cairo_save(cairo); - - /* Minutes */ - tip_phi = phi_step_min * (tm.tm_min + 45); - back_phi_1 = phi_step_min * (tm.tm_min + 45 + 20); - back_phi_2 = phi_step_min * (tm.tm_min + 45 + 40); - cairo_move_to(cairo, cxy + mr * cos(tip_phi), cxy + mr * sin(tip_phi)); - cairo_line_to(cairo, cxy + ir * cos(back_phi_1), cxy + ir * sin(back_phi_1)); - cairo_line_to(cairo, cxy + ir * cos(back_phi_2), cxy + ir * sin(back_phi_2)); - cairo_line_to(cairo, cxy + mr * cos(tip_phi), cxy + mr * sin(tip_phi)); - - /* Hours */ - // TODO optinally make hour hand progress between to hours intstead of instantly snapping - tip_phi = phi_step_h * (tm.tm_hour + 9); - back_phi_1 = phi_step_h * (tm.tm_hour + 9 + 4); - back_phi_2 = phi_step_h * (tm.tm_hour + 9 + 8); + + double phi_step_min = 2 * PI / 60; + double tip_phi_min = phi_step_min * (tm.tm_min + 45); + double back_phi_1_min = phi_step_min * (tm.tm_min + 45 + 20); + double back_phi_2_min = phi_step_min * (tm.tm_min + 45 + 40); + + double phi_step_h = 2 * PI / 12; + double tip_phi_h = phi_step_h * (tm.tm_hour + 9); + double back_phi_1_h = phi_step_h * (tm.tm_hour + 9 + 4); + double back_phi_2_h = phi_step_h * (tm.tm_hour + 9 + 8); if (! clock->snap) { double prog_phi_step = phi_step_h / 60.0; - tip_phi += tm.tm_min * prog_phi_step; - back_phi_1 += tm.tm_min * prog_phi_step; - back_phi_2 += tm.tm_min * prog_phi_step; + tip_phi_h += tm.tm_min * prog_phi_step; + back_phi_1_h += tm.tm_min * prog_phi_step; + back_phi_2_h += tm.tm_min * prog_phi_step; } - cairo_move_to(cairo, cxy + hr * cos(tip_phi), cxy + hr * sin(tip_phi)); - cairo_line_to(cairo, cxy + ir * cos(back_phi_1), cxy + ir * sin(back_phi_1)); - cairo_line_to(cairo, cxy + ir * cos(back_phi_2), cxy + ir * sin(back_phi_2)); - cairo_line_to(cairo, cxy + hr * cos(tip_phi), cxy + hr * sin(tip_phi)); - cairo_close_path(cairo); + cairo_save(cairo); colour_set_cairo_source(cairo, &clock->clock_colour); - cairo_fill(cairo); + + if ( clock->hand_style == STYLE_XCLOCK ) + { + /* Minutes */ + cairo_move_to(cairo, cxy + mr * cos(tip_phi_min), cxy + mr * sin(tip_phi_min)); + cairo_line_to(cairo, cxy + ir * cos(back_phi_1_min), cxy + ir * sin(back_phi_1_min)); + cairo_line_to(cairo, cxy + ir * cos(back_phi_2_min), cxy + ir * sin(back_phi_2_min)); + cairo_line_to(cairo, cxy + mr * cos(tip_phi_min), cxy + mr * sin(tip_phi_min)); + + /* Hours */ + cairo_move_to(cairo, cxy + hr * cos(tip_phi_h), cxy + hr * sin(tip_phi_h)); + cairo_line_to(cairo, cxy + ir * cos(back_phi_1_h), cxy + ir * sin(back_phi_1_h)); + cairo_line_to(cairo, cxy + ir * cos(back_phi_2_h), cxy + ir * sin(back_phi_2_h)); + cairo_line_to(cairo, cxy + hr * cos(tip_phi_h), cxy + hr * sin(tip_phi_h)); + + cairo_close_path(cairo); + cairo_fill(cairo); + } + else if ( clock->hand_style == STYLE_LINES ) + { + /* Minutes */ + cairo_move_to(cairo, cxy + mr * cos(tip_phi_min), cxy + mr * sin(tip_phi_min)); + cairo_line_to(cairo, cxy, cxy); + + /* Hours */ + cairo_line_to(cairo, cxy + hr * cos(tip_phi_h), cxy + hr * sin(tip_phi_h)); + + cairo_set_line_width(cairo, scale * clock->clock_size); + cairo_stroke(cairo); + } cairo_restore(cairo); } |