diff options
Diffstat (limited to 'src/render.c')
-rw-r--r-- | src/render.c | 68 |
1 files changed, 32 insertions, 36 deletions
diff --git a/src/render.c b/src/render.c index 975b393..c672c83 100644 --- a/src/render.c +++ b/src/render.c @@ -31,11 +31,10 @@ static void rounded_rectangle (cairo_t *cairo, uint32_t x, uint32_t y, uint32_t cairo_close_path(cairo); } -static void draw_background (cairo_t *cairo, struct Wlclock_dimensions *dimensions, - int32_t scale, struct Wlclock *clock) +static void draw_background (cairo_t *cairo, struct Wlclock_dimensions *dimensions, int32_t scale) { - if ( colour_is_transparent(&clock->background_colour) - && colour_is_transparent(&clock->border_colour) ) + if ( colour_is_transparent(&context.background_colour) + && colour_is_transparent(&context.border_colour) ) return; int32_t w = scale * dimensions->w; @@ -43,10 +42,10 @@ static void draw_background (cairo_t *cairo, struct Wlclock_dimensions *dimensio int32_t center_x = scale * dimensions->center_x; int32_t center_y = scale * dimensions->center_y; int32_t center_size = scale * dimensions->center_size; - int32_t radius_top_left = scale * clock->radius_top_left; - int32_t radius_top_right = scale * clock->radius_top_right; - int32_t radius_bottom_left = scale * clock->radius_bottom_left; - int32_t radius_bottom_right = scale * clock->radius_bottom_right; + int32_t radius_top_left = scale * context.radius_top_left; + int32_t radius_top_right = scale * context.radius_top_right; + int32_t radius_bottom_left = scale * context.radius_bottom_left; + int32_t radius_bottom_right = scale * context.radius_bottom_right; /* Avoid too radii so big that they cause unexpected drawing behaviour. */ if ( radius_top_left > center_size / 2 ) @@ -58,7 +57,7 @@ static void draw_background (cairo_t *cairo, struct Wlclock_dimensions *dimensio if ( radius_bottom_right > center_size / 2 ) radius_bottom_right = center_size / 2; - clocklog(clock, 3, "[render] Render dimensions (scaled): size=%d cx=%d cy=%d w=%d h=%d\n", + clocklog(3, "[render] Render dimensions (scaled): size=%d cx=%d cy=%d w=%d h=%d\n", center_size, center_x, center_y, w, h); cairo_save(cairo); @@ -70,17 +69,17 @@ static void draw_background (cairo_t *cairo, struct Wlclock_dimensions *dimensio if ( center_x == 0 && center_y == 0 && center_size == w && center_size == h ) { cairo_rectangle(cairo, 0, 0, w, h); - colour_set_cairo_source(cairo, &clock->background_colour); + colour_set_cairo_source(cairo, &context.background_colour); cairo_fill(cairo); } else { cairo_rectangle(cairo, 0, 0, w, h); - colour_set_cairo_source(cairo, &clock->border_colour); + colour_set_cairo_source(cairo, &context.border_colour); cairo_fill(cairo); cairo_rectangle(cairo, center_x, center_y, center_size, center_size); - colour_set_cairo_source(cairo, &clock->background_colour); + colour_set_cairo_source(cairo, &context.background_colour); cairo_fill(cairo); } } @@ -91,7 +90,7 @@ static void draw_background (cairo_t *cairo, struct Wlclock_dimensions *dimensio rounded_rectangle(cairo, 0, 0, w, h, radius_top_left, radius_top_right, radius_bottom_left, radius_bottom_right); - colour_set_cairo_source(cairo, &clock->background_colour); + colour_set_cairo_source(cairo, &context.background_colour); cairo_fill(cairo); } else @@ -99,13 +98,13 @@ static void draw_background (cairo_t *cairo, struct Wlclock_dimensions *dimensio rounded_rectangle(cairo, 0, 0, w, h, radius_top_left, radius_top_right, radius_bottom_left, radius_bottom_right); - colour_set_cairo_source(cairo, &clock->border_colour); + colour_set_cairo_source(cairo, &context.border_colour); cairo_fill(cairo); rounded_rectangle(cairo, center_x, center_y, center_size, center_size, radius_top_left, radius_top_right, radius_bottom_left, radius_bottom_right); - colour_set_cairo_source(cairo, &clock->background_colour); + colour_set_cairo_source(cairo, &context.background_colour); cairo_fill(cairo); } } @@ -113,13 +112,12 @@ 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) +static void draw_clock_face (cairo_t *cairo, struct Wlclock_dimensions *dimensions, int32_t scale) { - if ( clock->marking_width == 0 ) + if ( context.marking_width == 0 ) return; - /* Radii are choosen to roughly mimic xclock. */ + /* Radii are choosen to roughly mimic xcontext. */ double cx = scale * (dimensions->center_x + (dimensions->center_size / 2)); double cy = scale * (dimensions->center_y + (dimensions->center_size / 2)); double or = scale * 0.9 * dimensions->center_size / 2; @@ -137,15 +135,15 @@ static void draw_clock_face (cairo_t *cairo, struct Wlclock_dimensions *dimensio else cairo_line_to(cairo, cx + ir * cos(phi), cy + ir * sin(phi)); } - cairo_set_line_width(cairo, clock->marking_width * scale); - colour_set_cairo_source(cairo, &clock->clock_colour); + cairo_set_line_width(cairo, context.marking_width * scale); + colour_set_cairo_source(cairo, &context.clock_colour); cairo_stroke(cairo); cairo_restore(cairo); } -static void draw_clock_hands (cairo_t *cairo, int32_t size, int32_t scale, struct Wlclock *clock) +static void draw_clock_hands (cairo_t *cairo, int32_t size, int32_t scale) { - /* Radii are choosen to roughly mimic xclock. */ + /* Radii are choosen to roughly mimic xcontext. */ double cxy = scale * size / 2; double mr = scale * 0.6 * size / 2; double hr = scale * 0.4 * size / 2; @@ -158,13 +156,13 @@ static void draw_clock_hands (cairo_t *cairo, int32_t size, int32_t scale, struc double phi_min = phi_min_step * (tm.tm_min + 45); double phi_h_step = 2 * PI / 12; double phi_h = phi_h_step * (tm.tm_hour + 9); - if (! clock->snap) + if (! context.snap) phi_h += tm.tm_min * phi_h_step / 60.0; cairo_save(cairo); - colour_set_cairo_source(cairo, &clock->clock_colour); + colour_set_cairo_source(cairo, &context.clock_colour); - if ( clock->hand_width == 0 ) + if ( context.hand_width == 0 ) { /* Xclock-esque clock hands. Not pixel-perfect, but close enough. */ @@ -197,7 +195,7 @@ static void draw_clock_hands (cairo_t *cairo, int32_t size, int32_t scale, struc cairo_move_to(cairo, cxy + hr * cos(phi_h), cxy + hr * sin(phi_h)); cairo_line_to(cairo, cxy + ir * cos(phi_h + PI), cxy + ir * sin(phi_h +PI)); - cairo_set_line_width(cairo, scale * clock->hand_width); + cairo_set_line_width(cairo, scale * context.hand_width); cairo_stroke(cairo); } @@ -215,13 +213,12 @@ static void clear_buffer (cairo_t *cairo) void render_background_frame (struct Wlclock_surface *surface) { struct Wlclock_output *output = surface->output; - struct Wlclock *clock = output->clock; uint32_t scale = output->scale; - clocklog(clock, 2, "[render] Render background frame: global_name=%d\n", + clocklog(2, "[render] Render background frame: global_name=%d\n", output->global_name); - if (! next_buffer(&surface->current_background_buffer, clock->shm, + if (! next_buffer(&surface->current_background_buffer, context.shm, surface->background_buffers, surface->dimensions.w * scale, surface->dimensions.h * scale)) @@ -231,8 +228,8 @@ void render_background_frame (struct Wlclock_surface *surface) cairo_t *cairo = surface->current_background_buffer->cairo; clear_buffer(cairo); - draw_background(cairo, &surface->dimensions, scale, clock); - draw_clock_face(cairo, &surface->dimensions, scale, clock); + draw_background(cairo, &surface->dimensions, scale); + draw_clock_face(cairo, &surface->dimensions, scale); wl_surface_set_buffer_scale(surface->background_surface, scale); wl_surface_damage_buffer(surface->background_surface, 0, 0, INT32_MAX, INT32_MAX); @@ -242,13 +239,12 @@ void render_background_frame (struct Wlclock_surface *surface) void render_hands_frame (struct Wlclock_surface *surface) { struct Wlclock_output *output = surface->output; - struct Wlclock *clock = output->clock; uint32_t scale = output->scale; - clocklog(clock, 2, "[render] Render hands frame: global_name=%d\n", + clocklog(2, "[render] Render hands frame: global_name=%d\n", output->global_name); - if (! next_buffer(&surface->current_hands_buffer, clock->shm, + if (! next_buffer(&surface->current_hands_buffer, context.shm, surface->hands_buffers, surface->dimensions.center_size * scale, surface->dimensions.center_size * scale)) @@ -258,7 +254,7 @@ void render_hands_frame (struct Wlclock_surface *surface) cairo_t *cairo = surface->current_hands_buffer->cairo; clear_buffer(cairo); - draw_clock_hands(cairo, surface->dimensions.center_size, scale, clock); + draw_clock_hands(cairo, surface->dimensions.center_size, scale); wl_surface_set_buffer_scale(surface->hands_surface, scale); wl_surface_damage_buffer(surface->hands_surface, 0, 0, INT32_MAX, INT32_MAX); |