summaryrefslogtreecommitdiff
path: root/test/recording-surface-pattern.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-07-23 14:22:19 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2011-07-23 14:42:17 +0100
commit5de02329370257290404dae244cb14ac544140d7 (patch)
tree3d13ebc2f517b128151fcf251743c99abeba828a /test/recording-surface-pattern.c
parentabd8fcc833eedc916addbd688a40303e4c78affd (diff)
downloadcairo-5de02329370257290404dae244cb14ac544140d7.tar.gz
test: Extend recording-surface-pattern to include a SOURCE operator test
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'test/recording-surface-pattern.c')
-rw-r--r--test/recording-surface-pattern.c149
1 files changed, 95 insertions, 54 deletions
diff --git a/test/recording-surface-pattern.c b/test/recording-surface-pattern.c
index c8768f99c..5a5fee2b0 100644
--- a/test/recording-surface-pattern.c
+++ b/test/recording-surface-pattern.c
@@ -37,66 +37,74 @@
/* This test is designed to test painting a recording surface pattern with
* CAIRO_EXTEND_NONE and a non identity pattern matrix.
*/
+static cairo_pattern_t *create_pattern (cairo_t *target)
+{
+ cairo_surface_t *surface;
+ cairo_pattern_t *pattern;
+ cairo_t *cr;
+
+ surface = cairo_surface_create_similar (cairo_get_group_target (target),
+ CAIRO_CONTENT_COLOR_ALPHA,
+ PAT_WIDTH, PAT_HEIGHT);
+ cr = cairo_create (surface);
+ cairo_surface_destroy (surface);
+
+ cairo_set_source_rgba (cr, 1, 0, 1, 0.5);
+ cairo_rectangle (cr, PAT_WIDTH/6.0, PAT_HEIGHT/6.0, PAT_WIDTH/4.0, PAT_HEIGHT/4.0);
+ cairo_fill (cr);
+
+ cairo_set_source_rgba (cr, 0, 1, 1, 0.5);
+ cairo_rectangle (cr, PAT_WIDTH/2.0, PAT_HEIGHT/2.0, PAT_WIDTH/4.0, PAT_HEIGHT/4.0);
+ cairo_fill (cr);
+
+ cairo_set_line_width (cr, 1);
+ cairo_move_to (cr, PAT_WIDTH/6.0, 0);
+ cairo_line_to (cr, 0, 0);
+ cairo_line_to (cr, 0, PAT_HEIGHT/6.0);
+ cairo_set_source_rgb (cr, 1, 0, 0);
+ cairo_stroke (cr);
+ cairo_move_to (cr, PAT_WIDTH/6.0, PAT_HEIGHT);
+ cairo_line_to (cr, 0, PAT_HEIGHT);
+ cairo_line_to (cr, 0, 5*PAT_HEIGHT/6.0);
+ cairo_set_source_rgb (cr, 0, 1, 0);
+ cairo_stroke (cr);
+ cairo_move_to (cr, 5*PAT_WIDTH/6.0, 0);
+ cairo_line_to (cr, PAT_WIDTH, 0);
+ cairo_line_to (cr, PAT_WIDTH, PAT_HEIGHT/6.0);
+ cairo_set_source_rgb (cr, 0, 0, 1);
+ cairo_stroke (cr);
+ cairo_move_to (cr, 5*PAT_WIDTH/6.0, PAT_HEIGHT);
+ cairo_line_to (cr, PAT_WIDTH, PAT_HEIGHT);
+ cairo_line_to (cr, PAT_WIDTH, 5*PAT_HEIGHT/6.0);
+ cairo_set_source_rgb (cr, 1, 1, 0);
+ cairo_stroke (cr);
+
+ cairo_set_source_rgb (cr, 0.5, 0.5, 0.5);
+ cairo_set_line_width (cr, PAT_WIDTH/10.0);
+
+ cairo_move_to (cr, 0, PAT_HEIGHT/4.0);
+ cairo_line_to (cr, PAT_WIDTH, PAT_HEIGHT/4.0);
+ cairo_stroke (cr);
+
+ cairo_move_to (cr, PAT_WIDTH/4.0, 0);
+ cairo_line_to (cr, PAT_WIDTH/4.0, PAT_WIDTH);
+ cairo_stroke (cr);
+
+ pattern = cairo_pattern_create_for_surface (cairo_get_target (cr));
+ cairo_destroy (cr);
+
+ return pattern;
+}
static cairo_test_status_t
-draw (cairo_t *cr, int width, int height)
+over (cairo_t *cr, int width, int height)
{
- cairo_surface_t *pat_surface;
cairo_pattern_t *pattern;
cairo_matrix_t mat;
- cairo_t *cr2;
cairo_translate (cr, PAD, PAD);
- pat_surface = cairo_surface_create_similar (cairo_get_group_target (cr),
- CAIRO_CONTENT_COLOR_ALPHA,
- PAT_WIDTH, PAT_HEIGHT);
- cr2 = cairo_create (pat_surface);
- cairo_surface_destroy (pat_surface);
-
- cairo_set_source_rgba (cr2, 1, 0, 1, 0.5);
- cairo_rectangle (cr2, PAT_WIDTH/6.0, PAT_HEIGHT/6.0, PAT_WIDTH/4.0, PAT_HEIGHT/4.0);
- cairo_fill (cr2);
-
- cairo_set_source_rgba (cr2, 0, 1, 1, 0.5);
- cairo_rectangle (cr2, PAT_WIDTH/2.0, PAT_HEIGHT/2.0, PAT_WIDTH/4.0, PAT_HEIGHT/4.0);
- cairo_fill (cr2);
-
- cairo_set_line_width (cr2, 1);
- cairo_move_to (cr2, PAT_WIDTH/6.0, 0);
- cairo_line_to (cr2, 0, 0);
- cairo_line_to (cr2, 0, PAT_HEIGHT/6.0);
- cairo_set_source_rgb (cr2, 1, 0, 0);
- cairo_stroke (cr2);
- cairo_move_to (cr2, PAT_WIDTH/6.0, PAT_HEIGHT);
- cairo_line_to (cr2, 0, PAT_HEIGHT);
- cairo_line_to (cr2, 0, 5*PAT_HEIGHT/6.0);
- cairo_set_source_rgb (cr2, 0, 1, 0);
- cairo_stroke (cr2);
- cairo_move_to (cr2, 5*PAT_WIDTH/6.0, 0);
- cairo_line_to (cr2, PAT_WIDTH, 0);
- cairo_line_to (cr2, PAT_WIDTH, PAT_HEIGHT/6.0);
- cairo_set_source_rgb (cr2, 0, 0, 1);
- cairo_stroke (cr2);
- cairo_move_to (cr2, 5*PAT_WIDTH/6.0, PAT_HEIGHT);
- cairo_line_to (cr2, PAT_WIDTH, PAT_HEIGHT);
- cairo_line_to (cr2, PAT_WIDTH, 5*PAT_HEIGHT/6.0);
- cairo_set_source_rgb (cr2, 1, 1, 0);
- cairo_stroke (cr2);
-
- cairo_set_source_rgb (cr2, 0.5, 0.5, 0.5);
- cairo_set_line_width (cr2, PAT_WIDTH/10.0);
-
- cairo_move_to (cr2, 0, PAT_HEIGHT/4.0);
- cairo_line_to (cr2, PAT_WIDTH, PAT_HEIGHT/4.0);
- cairo_stroke (cr2);
-
- cairo_move_to (cr2, PAT_WIDTH/4.0, 0);
- cairo_line_to (cr2, PAT_WIDTH/4.0, PAT_WIDTH);
- cairo_stroke (cr2);
-
- pattern = cairo_pattern_create_for_surface (cairo_get_target (cr2));
- cairo_destroy (cr2);
+ pattern = create_pattern (cr);
cairo_matrix_init_identity (&mat);
cairo_matrix_scale (&mat, 2, 1.5);
@@ -113,9 +121,42 @@ draw (cairo_t *cr, int width, int height)
return CAIRO_TEST_SUCCESS;
}
-CAIRO_TEST (recording_surface_pattern,
+static cairo_test_status_t
+source (cairo_t *cr, int width, int height)
+{
+ cairo_pattern_t *pattern;
+ cairo_matrix_t mat;
+
+ cairo_translate (cr, PAD, PAD);
+
+ pattern = create_pattern (cr);
+
+ cairo_matrix_init_identity (&mat);
+ cairo_matrix_scale (&mat, 2, 1.5);
+ cairo_matrix_rotate (&mat, 1);
+ cairo_matrix_translate (&mat, -PAT_WIDTH/4.0, -PAT_WIDTH/2.0);
+ cairo_pattern_set_matrix (pattern, &mat);
+ cairo_pattern_set_extend (pattern, CAIRO_EXTEND_NONE);
+
+ cairo_set_source (cr, pattern);
+ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+ cairo_paint (cr);
+
+ cairo_pattern_destroy (pattern);
+
+ return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (recording_surface_over,
+ "Paint recording surface pattern with non identity pattern matrix",
+ "recording", /* keywords */
+ NULL, /* requirements */
+ WIDTH, HEIGHT,
+ NULL, over)
+
+CAIRO_TEST (recording_surface_source,
"Paint recording surface pattern with non identity pattern matrix",
"recording", /* keywords */
NULL, /* requirements */
WIDTH, HEIGHT,
- NULL, draw)
+ NULL, source)