summaryrefslogtreecommitdiff
path: root/test/surface-pattern.c
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2007-02-22 16:03:47 -0500
committerBehdad Esfahbod <behdad@behdad.org>2007-02-23 17:26:42 -0500
commitc87edd9e10c2a60e11c8cd954860fb03f6425132 (patch)
treef4440f93d4bdc935caa1c7fceb5ff1bdd5318360 /test/surface-pattern.c
parent7c39276366f91de151c775fa8293783f39247896 (diff)
downloadcairo-c87edd9e10c2a60e11c8cd954860fb03f6425132.tar.gz
[test] Update surface-pattern test to include transformations
The surface-pattern test was very naive, painting a surface pattern repeated at identity size. With the new test, the surface pattern is scaled and rotated. This reveals a serious bug in the PS backend.
Diffstat (limited to 'test/surface-pattern.c')
-rw-r--r--test/surface-pattern.c94
1 files changed, 43 insertions, 51 deletions
diff --git a/test/surface-pattern.c b/test/surface-pattern.c
index 8fe40e668..42aca27fc 100644
--- a/test/surface-pattern.c
+++ b/test/surface-pattern.c
@@ -1,36 +1,15 @@
-/*
- * Copyright © 2005 Red Hat, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Red Hat, Inc. not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. Red Hat, Inc. makes no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
+#include <math.h>
#include "cairo-test.h"
+#include <stdio.h>
+
+#define SIZE 140
static cairo_test_draw_function_t draw;
cairo_test_t test = {
"surface-pattern",
- "Tests use of a surface pattern",
- 36, 36,
+ "Test transformed repeated surface patterns",
+ SIZE, SIZE,
draw
};
@@ -38,35 +17,48 @@ static cairo_test_status_t
draw (cairo_t *cr, int width, int height)
{
cairo_surface_t *surface;
- cairo_t *cr2;
- cairo_pattern_t *pattern;
- surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
- 6, 6);
-
- cr2 = cairo_create (surface);
- {
- cairo_rectangle (cr2, 0, 0, 3, 3);
- cairo_rectangle (cr2, 3, 3, 3, 3);
- cairo_set_source_rgb (cr2, 1, 1, 0);
- cairo_fill (cr2);
-
- cairo_rectangle (cr2, 3, 0, 3, 3);
- cairo_rectangle (cr2, 0, 3, 3, 3);
- cairo_set_source_rgb (cr2, 0, 0, 1);
- cairo_fill (cr2);
- }
- cairo_destroy (cr2);
+ cairo_t * cr_surface;
+ int surface_size = 6;
- pattern = cairo_pattern_create_for_surface (surface);
- cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
- cairo_set_source (cr, pattern);
-
- cairo_rectangle (cr, 0, 0, width, height);
+ cairo_set_source_rgb (cr, 0, 0, 0);
+ cairo_rectangle (cr, 0, 0, SIZE, SIZE);
cairo_fill (cr);
- cairo_pattern_destroy (pattern);
+ /* Create an image surface with my favorite four colors in each
+ * quadrant. */
+ surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
+ surface_size, surface_size);
+ cr_surface = cairo_create (surface);
+ cairo_set_source_rgb (cr_surface, 1, 1, 1);
+ cairo_rectangle (cr_surface,
+ 0, 0,
+ surface_size / 2, surface_size / 2);
+ cairo_fill (cr_surface);
+ cairo_set_source_rgb (cr_surface, 1, 0, 0);
+ cairo_rectangle (cr_surface,
+ surface_size / 2, 0,
+ surface_size / 2, surface_size / 2);
+ cairo_fill (cr_surface);
+ cairo_set_source_rgb (cr_surface, 0, 1, 0);
+ cairo_rectangle (cr_surface,
+ 0, surface_size / 2,
+ surface_size / 2, surface_size / 2);
+ cairo_fill (cr_surface);
+ cairo_set_source_rgb (cr_surface, 0, 0, 1);
+ cairo_rectangle (cr_surface,
+ surface_size / 2, surface_size / 2,
+ surface_size / 2, surface_size / 2);
+ cairo_fill (cr_surface);
+ cairo_destroy (cr_surface);
+
+ cairo_scale (cr, 10, 10);
+ cairo_rotate (cr, 1.);
+ cairo_set_source_surface (cr, surface, 1.5, 1.5);
cairo_surface_destroy (surface);
+ cairo_pattern_set_extend (cairo_get_source (cr), CAIRO_EXTEND_REPEAT);
+ cairo_paint (cr);
+
return CAIRO_TEST_SUCCESS;
}