summaryrefslogtreecommitdiff
path: root/flowers-demo.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-10-13 23:09:39 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2011-10-13 23:09:39 +0100
commitb4584da9fec1b05adfed29b95bf086aec14c860d (patch)
tree6ba9751106eb3721ca421fab37436fe77b3d7f8c /flowers-demo.c
parentcda9e7feaf46fad5dfe465c881c96f1e004c9e65 (diff)
Add some rudimentary clipping variations
Diffstat (limited to 'flowers-demo.c')
-rw-r--r--flowers-demo.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/flowers-demo.c b/flowers-demo.c
index 9ab07ee..204c2bb 100644
--- a/flowers-demo.c
+++ b/flowers-demo.c
@@ -247,6 +247,7 @@ naive_flowers_draw (cairo_t *cr, bool opaque)
cairo_matrix_t m;
if (! opaque) {
+ cairo_save (cr);
cairo_rectangle (cr, 0, 0, f->size, f->size);
cairo_clip (cr);
cairo_push_group (cr);
@@ -318,12 +319,13 @@ naive_flowers_draw (cairo_t *cr, bool opaque)
cairo_stroke (cr);
}
if (! opaque) {
- cairo_pop_group_to_source(cr);
- cairo_reset_clip (cr);
-
+ cairo_pattern_t *p = cairo_pop_group(cr);
+ cairo_restore (cr);
cairo_matrix_init_translate (&m, -f->x, -f->y);
- cairo_pattern_set_matrix (cairo_get_source(cr), &m);
+ cairo_pattern_set_matrix (p, &m);
+ cairo_set_source (cr, p);
cairo_paint_with_alpha (cr, f->fade);
+ cairo_pattern_destroy (p);
} else
cairo_restore (cr);
}
@@ -356,11 +358,13 @@ int main (int argc, char **argv)
int frame = 0;
int frames = 0;
int benchmark;
+ enum clip clip;
void (*draw) (cairo_t *, bool);
int naive, opaque;
int i;
device = device_open(argc, argv);
+ clip = device_get_clip(argc, argv);
benchmark = device_get_benchmark(argc, argv);
if (benchmark == 0)
benchmark = 20;
@@ -392,6 +396,7 @@ int main (int argc, char **argv)
cairo_paint (cr);
cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
+ device_apply_clip (device, cr, clip);
draw(cr, opaque);
gettimeofday(&now, NULL);