summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeon Henrik Plickat <leonhenrik.plickat@stud.uni-goettingen.de>2020-09-25 12:20:47 +0200
committerLeon Henrik Plickat <leonhenrik.plickat@stud.uni-goettingen.de>2020-09-25 12:20:47 +0200
commit09ac1ee69f213461299d965a7903f73e46a644fe (patch)
treeea0d4fcc0be153c6fa49619158d3a9540c150654
parentf53c7341152bbc4b642935953e317a2a29abc99c (diff)
downloadwlclock-09ac1ee69f213461299d965a7903f73e46a644fe.tar.gz
wlclock-09ac1ee69f213461299d965a7903f73e46a644fe.tar.bz2
Draw clock face
-rw-r--r--meson.build10
-rw-r--r--src/render.c35
-rw-r--r--src/wlclock.c3
3 files changed, 41 insertions, 7 deletions
diff --git a/meson.build b/meson.build
index 1490611..f5ee332 100644
--- a/meson.build
+++ b/meson.build
@@ -32,6 +32,7 @@ wayland_client = dependency('wayland-client', include_type: 'system')
wayland_cursor = dependency('wayland-cursor', include_type: 'system')
cairo = dependency('cairo')
realtime = cc.find_library('rt')
+math = cc.find_library('m')
if ['dragonfly', 'freebsd', 'netbsd', 'openbsd'].contains(host_machine.system())
libepoll = dependency('epoll-shim', required: get_option('handle-signals'))
@@ -53,13 +54,14 @@ executable(
'src/wlclock.c',
),
dependencies: [
+ cairo,
+ libepoll,
+ math,
+ realtime,
wayland_client,
- wayland_protocols,
wayland_cursor,
- cairo,
+ wayland_protocols,
wl_protocols,
- realtime,
- libepoll,
],
include_directories: include_directories('src'),
install: true,
diff --git a/src/render.c b/src/render.c
index 6aa459f..03f4631 100644
--- a/src/render.c
+++ b/src/render.c
@@ -3,6 +3,8 @@
#include<stdbool.h>
#include<unistd.h>
#include<string.h>
+#include<math.h>
+
#include<cairo/cairo.h>
#include<wayland-server.h>
#include<wayland-client.h>
@@ -15,10 +17,12 @@
#include"colour.h"
#include"render.h"
+#define PI 3.141592653589793238462643383279502884
+
static void rounded_rectangle (cairo_t *cairo, uint32_t x, uint32_t y, uint32_t w, uint32_t h,
double tl_r, double tr_r, double bl_r, double br_r)
{
- double degrees = 3.1415927 / 180.0;
+ double degrees = PI / 180.0;
cairo_new_sub_path(cairo);
cairo_arc(cairo, x + w - tr_r, y + tr_r, tr_r, -90 * degrees, 0 * degrees);
cairo_arc(cairo, x + w - br_r, y + h - br_r, br_r, 0 * degrees, 90 * degrees);
@@ -99,6 +103,33 @@ static void draw_background (cairo_t *cairo, struct Wlclock_dimensions *dimensio
cairo_restore(cairo);
}
+static void draw_clock_face (cairo_t *cairo, struct Wlclock_dimensions *dimensions,
+ int32_t scale, struct Wlclock *clock)
+{
+ double cx = dimensions->center_x + (dimensions->center_size / 2);
+ double cy = dimensions->center_y + (dimensions->center_size / 2);
+ double or = 0.9 * (double)(dimensions->center_size / 2);
+ double ir = 0.85 * (double)(dimensions->center_size / 2);
+ double bir = 0.8 * (double)(dimensions->center_size / 2);
+ double phi;
+ double phi_step = 2 * PI / 60;
+
+ cairo_save(cairo);
+ for (int i = 0; i < 60; i++)
+ {
+ phi = i * phi_step;
+ cairo_move_to(cairo, cx + or * cos(phi), cy + or * sin(phi));
+ if ( i % 5 == 0 )
+ cairo_line_to(cairo, cx + bir * cos(phi), cy + bir * sin(phi));
+ else
+ cairo_line_to(cairo, cx + ir * cos(phi), cy + ir * sin(phi));
+ }
+ cairo_set_line_width(cairo, 1);
+ colour_set_cairo_source(cairo, &clock->clock_colour);
+ cairo_stroke(cairo);
+ cairo_restore(cairo);
+}
+
static void clear_buffer (cairo_t *cairo)
{
cairo_save(cairo);
@@ -124,8 +155,8 @@ void render_surface_frame (struct Wlclock_surface *surface)
clear_buffer(cairo);
draw_background(cairo, &surface->dimensions, scale, clock);
+ draw_clock_face(cairo, &surface->dimensions, scale, clock);
- // TODO draw clock face
// TODO draw clock hands to subsurface
wl_surface_set_buffer_scale(surface->surface, scale);
diff --git a/src/wlclock.c b/src/wlclock.c
index 53dd7e3..3a8d1f6 100644
--- a/src/wlclock.c
+++ b/src/wlclock.c
@@ -470,7 +470,8 @@ static void clock_run (struct Wlclock *clock)
if ( ret == 0 )
{
- update_all_surfaces(clock);
+ clock->now = time(NULL);
+ // TODO update clock hands
continue;
}
else if ( ret < 0 )