diff options
-rw-r--r-- | test/pattern-get-type.c | 7 | ||||
-rw-r--r-- | test/pattern-getters.c | 82 |
2 files changed, 88 insertions, 1 deletions
diff --git a/test/pattern-get-type.c b/test/pattern-get-type.c index d2ef5bf34..c807b14e8 100644 --- a/test/pattern-get-type.c +++ b/test/pattern-get-type.c @@ -29,7 +29,7 @@ static cairo_test_status_t preamble (cairo_test_context_t *Ctx) { cairo_surface_t *surface; - cairo_pattern_t *solid_rgb, *solid_rgba, *surface_pattern, *linear, *radial; + cairo_pattern_t *solid_rgb, *solid_rgba, *surface_pattern, *linear, *radial, *mesh; cairo_test_status_t result = CAIRO_TEST_SUCCESS; solid_rgb = cairo_pattern_create_rgb (0.0, 0.1, 0.2); @@ -40,6 +40,7 @@ preamble (cairo_test_context_t *Ctx) linear = cairo_pattern_create_linear (0.0, 0.0, 10.0, 10.0); radial = cairo_pattern_create_radial (10.0, 10.0, 0.1, 10.0, 10.0, 1.0); + mesh = cairo_pattern_create_mesh (); if (cairo_pattern_get_type (solid_rgb) != CAIRO_PATTERN_TYPE_SOLID) result = CAIRO_TEST_FAILURE; @@ -56,12 +57,16 @@ preamble (cairo_test_context_t *Ctx) if (cairo_pattern_get_type (radial) != CAIRO_PATTERN_TYPE_RADIAL) result = CAIRO_TEST_FAILURE; + if (cairo_pattern_get_type (mesh) != CAIRO_PATTERN_TYPE_MESH) + result = CAIRO_TEST_FAILURE; + cairo_pattern_destroy (solid_rgb); cairo_pattern_destroy (solid_rgba); cairo_pattern_destroy (surface_pattern); cairo_surface_destroy (surface); cairo_pattern_destroy (linear); cairo_pattern_destroy (radial); + cairo_pattern_destroy (mesh); return result; } diff --git a/test/pattern-getters.c b/test/pattern-getters.c index 657159c26..2d7d9048c 100644 --- a/test/pattern-getters.c +++ b/test/pattern-getters.c @@ -183,6 +183,88 @@ draw (cairo_t *cr, int width, int height) cairo_pattern_destroy (pat); } + /* Test mesh getters */ + { + unsigned int count; + int i; + pat = cairo_pattern_create_mesh (); + + status = cairo_pattern_mesh_get_patch_count (pat, &count); + CHECK_SUCCESS; + + if (count != 0) { + cairo_pattern_destroy (pat); + return CAIRO_TEST_FAILURE; + } + + cairo_pattern_mesh_begin_patch (pat); + cairo_pattern_mesh_move_to (pat, 0, 0); + cairo_pattern_mesh_line_to (pat, 0, 3); + cairo_pattern_mesh_line_to (pat, 3, 3); + cairo_pattern_mesh_line_to (pat, 3, 0); + + status = cairo_pattern_mesh_get_patch_count (pat, &count); + CHECK_SUCCESS; + + if (count != 0) { + cairo_pattern_destroy (pat); + return CAIRO_TEST_FAILURE; + } + + cairo_pattern_mesh_end_patch (pat); + + status = cairo_pattern_mesh_get_patch_count (pat, &count); + CHECK_SUCCESS; + + if (count != 1) { + cairo_pattern_destroy (pat); + return CAIRO_TEST_FAILURE; + } + + for (i = 0; i < 4; i++) { + double cp_x[4] = { 1, 1, 2, 2 }; + double cp_y[4] = { 1, 2, 2, 1 }; + double x, y; + + status = cairo_pattern_mesh_get_control_point (pat, 0, i, &x, &y); + CHECK_SUCCESS; + + if (!CAIRO_TEST_DOUBLE_EQUALS(x,cp_x[i]) || + !CAIRO_TEST_DOUBLE_EQUALS(y,cp_y[i])) + { + cairo_pattern_destroy (pat); + return CAIRO_TEST_FAILURE; + } + } + + cairo_pattern_mesh_begin_patch (pat); + cairo_pattern_mesh_move_to (pat, 0, 0); + cairo_pattern_mesh_line_to (pat, 1, 0); + cairo_pattern_mesh_line_to (pat, 1, 1); + cairo_pattern_mesh_set_corner_color_rgb (pat, 0, 1, 1, 1); + cairo_pattern_mesh_end_patch (pat); + + for (i = 0; i < 4; i++) { + double corner_color[4] = { 1, 0, 0, 1 }; + double a, r, g, b; + + status = cairo_pattern_mesh_get_corner_color_rgba (pat, 1, i, + &r, &g, &b, &a); + CHECK_SUCCESS; + + if (!CAIRO_TEST_DOUBLE_EQUALS(a,corner_color[i]) || + !CAIRO_TEST_DOUBLE_EQUALS(r,corner_color[i]) || + !CAIRO_TEST_DOUBLE_EQUALS(g,corner_color[i]) || + !CAIRO_TEST_DOUBLE_EQUALS(b,corner_color[i])) + { + cairo_pattern_destroy (pat); + return CAIRO_TEST_FAILURE; + } + } + + cairo_pattern_destroy (pat); + } + cairo_set_source_rgb (cr, 0, 1, 0); cairo_paint (cr); |