#include "cairo-test.h"
#define SIZE 256
#define WIDTH 2
#define HEIGHT 10
static cairo_test_status_t
rectangles (cairo_t *cr, int width, int height)
{
int i;
cairo_set_source_rgb (cr, 1.0, 0.0, 0.0);
cairo_paint (cr);
cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
for (i = 1; i <= SIZE; i++) {
int x, y;
cairo_save (cr);
cairo_rectangle (cr, 0, 0, WIDTH, HEIGHT);
cairo_clip (cr);
cairo_scale (cr, 1./SIZE, 1./SIZE);
for (x = -i; x < SIZE*WIDTH; x += 2*i) {
for (y = -i; y < SIZE*HEIGHT; y += 2*i) {
cairo_rectangle (cr, x, y, i, i);
cairo_rectangle (cr, x+i, y+i, i, i);
}
}
cairo_fill (cr);
cairo_restore (cr);
cairo_translate (cr, WIDTH, 0);
}
return CAIRO_TEST_SUCCESS;
}
static cairo_test_status_t
triangles (cairo_t *cr, int width, int height)
{
int i;
cairo_set_source_rgb (cr, 1.0, 0.0, 0.0);
cairo_paint (cr);
cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
for (i = 1; i <= SIZE; i++) {
int x, y;
cairo_save (cr);
cairo_rectangle (cr, 0, 0, WIDTH, HEIGHT);
cairo_clip (cr);
cairo_scale (cr, 1./SIZE, 1./SIZE);
for (x = -i; x < SIZE*WIDTH; x += 2*i) {
for (y = -i; y < SIZE*HEIGHT; y += 2*i) {
cairo_move_to (cr, x, y);
cairo_line_to (cr, x+i, y+i);
cairo_line_to (cr, x+i, y);
cairo_close_path (cr);
cairo_move_to (cr, x+i, y);
cairo_line_to (cr, x+2*i, y);
cairo_line_to (cr, x+i, y+i);
cairo_close_path (cr);
cairo_move_to (cr, x+i, y+i);
cairo_line_to (cr, x, y+2*i);
cairo_line_to (cr, x+i, y+2*i);
cairo_close_path (cr);
cairo_move_to (cr, x+i, y+i);
cairo_line_to (cr, x+i, y+2*i);
cairo_line_to (cr, x+2*i, y+2*i);
cairo_close_path (cr);
}
}
cairo_fill (cr);
cairo_restore (cr);
cairo_translate (cr, WIDTH, 0);
}
return CAIRO_TEST_SUCCESS;
}
CAIRO_TEST (half_coverage_rectangles,
"Check the fidelity of the rasterisation.",
NULL,
"target=raster slow",
WIDTH * SIZE, HEIGHT,
NULL, rectangles)
CAIRO_TEST (half_coverage_triangles,
"Check the fidelity of the rasterisation.",
NULL,
"target=raster slow",
WIDTH * SIZE, HEIGHT,
NULL, triangles)