aboutsummaryrefslogtreecommitdiff
path: root/libstorycode/slide_render_cairo.c
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.me.uk>2019-02-25 21:29:20 +0100
committerThomas White <taw@bitwiz.me.uk>2019-02-25 21:29:20 +0100
commit572d0f24e4923cac794e7b2da8632951cd807852 (patch)
treea4a67af89408e4849e281d258d23bbd0bf6f6c71 /libstorycode/slide_render_cairo.c
parenta779b9a9095cfceaa4a0a8da5b4faaaa98287078 (diff)
Render background
Diffstat (limited to 'libstorycode/slide_render_cairo.c')
-rw-r--r--libstorycode/slide_render_cairo.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/libstorycode/slide_render_cairo.c b/libstorycode/slide_render_cairo.c
index 05039d9..7e1cc91 100644
--- a/libstorycode/slide_render_cairo.c
+++ b/libstorycode/slide_render_cairo.c
@@ -159,11 +159,38 @@ static void render_image(struct slide_item *item, cairo_t *cr,
int slide_render_cairo(Slide *s, cairo_t *cr, ImageStore *is, Stylesheet *stylesheet,
int slide_number, PangoLanguage *lang, PangoContext *pc)
{
- int i;
+ int i, r;
+ enum gradient bg;
+ double bgcol[4];
+ double bgcol2[4];
+ cairo_pattern_t *patt = NULL;
+
+ r = stylesheet_get_background(stylesheet, STYEL_SLIDE, &bg, bgcol, bgcol2);
+ if ( r ) return 1;
- /* Overall default background */
+ /* Overall background */
cairo_rectangle(cr, 0.0, 0.0, s->logical_w, s->logical_h);
- cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
+ switch ( bg ) {
+
+ case GRAD_NONE:
+ cairo_set_source_rgb(cr, bgcol[0], bgcol[1], bgcol[2]);
+ break;
+
+ case GRAD_VERT:
+ patt = cairo_pattern_create_linear(0.0, 0.0, 0.0, s->logical_h);
+ cairo_pattern_add_color_stop_rgb(patt, 0.0, bgcol[0], bgcol[1], bgcol[2]);
+ cairo_pattern_add_color_stop_rgb(patt, 1.0, bgcol2[0], bgcol2[1], bgcol2[2]);
+ cairo_set_source(cr, patt);
+ break;
+
+ case GRAD_HORIZ:
+ patt = cairo_pattern_create_linear(0.0, 0.0, s->logical_w, 0.0);
+ cairo_pattern_add_color_stop_rgb(patt, 0.0, bgcol[0], bgcol[1], bgcol[2]);
+ cairo_pattern_add_color_stop_rgb(patt, 1.0, bgcol2[0], bgcol2[1], bgcol2[2]);
+ cairo_set_source(cr, patt);
+ break;
+
+ }
cairo_fill(cr);
for ( i=0; i<s->n_items; i++ ) {