From a2a27a077edc1028d93bf27471218221cd6405de Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sat, 20 Sep 2014 23:49:51 +0200 Subject: Add gradient backgrounds --- src/render.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 4 deletions(-) (limited to 'src/render.c') diff --git a/src/render.c b/src/render.c index db41402..598a40f 100644 --- a/src/render.c +++ b/src/render.c @@ -253,14 +253,57 @@ static void render_lines(struct frame *fr, cairo_t *cr, ImageStore *is, } -static int draw_frame(cairo_t *cr, struct frame *fr, ImageStore *is, - enum is_size isz) +static void do_background(cairo_t *cr, struct frame *fr) { + cairo_pattern_t *patt = NULL; + cairo_new_path(cr); cairo_rectangle(cr, 0.0, 0.0, fr->w, fr->h); - cairo_set_source_rgba(cr, fr->bgcol[0], fr->bgcol[1], fr->bgcol[2], - fr->bgcol[3]); + + switch ( fr->grad ) { + + case GRAD_NONE: + cairo_set_source_rgba(cr, fr->bgcol[0], + fr->bgcol[1], + fr->bgcol[2], + fr->bgcol[3]); + break; + + case GRAD_VERT: + patt = cairo_pattern_create_linear(0.0, 0.0, + 0.0, fr->h); + cairo_pattern_add_color_stop_rgb(patt, 0.0, fr->bgcol[0], + fr->bgcol[1], + fr->bgcol[2]); + cairo_pattern_add_color_stop_rgb(patt, 1.0, fr->bgcol2[0], + fr->bgcol2[1], + fr->bgcol2[2]); + cairo_set_source(cr, patt); + break; + + case GRAD_HORIZ: + patt = cairo_pattern_create_linear(0.0, 0.0, + fr->w, 0.0); + cairo_pattern_add_color_stop_rgb(patt, 0.0, fr->bgcol[0], + fr->bgcol[1], + fr->bgcol[2]); + cairo_pattern_add_color_stop_rgb(patt, 1.0, fr->bgcol2[0], + fr->bgcol2[1], + fr->bgcol2[2]); + cairo_set_source(cr, patt); + break; + + } + cairo_fill(cr); + if ( patt != NULL ) cairo_pattern_destroy(patt); +} + + +static int draw_frame(cairo_t *cr, struct frame *fr, ImageStore *is, + enum is_size isz) +{ + do_background(cr, fr); if ( fr->trouble ) { cairo_new_path(cr); -- cgit v1.2.3