aboutsummaryrefslogtreecommitdiff
path: root/src/render.c
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2014-09-20 23:49:51 +0200
committerThomas White <taw@bitwiz.org.uk>2014-09-20 23:49:51 +0200
commita2a27a077edc1028d93bf27471218221cd6405de (patch)
tree92f05a75ecad63f4f24ffa4322e50820f23ca8fe /src/render.c
parent38828312e6be39941a2f889b36441c5b42bd484a (diff)
Add gradient backgrounds
Diffstat (limited to 'src/render.c')
-rw-r--r--src/render.c51
1 files changed, 47 insertions, 4 deletions
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);