#include "cairo-test.h"
#define WIDTH 45
#define HEIGHT 30
static cairo_test_draw_function_t draw;
static const cairo_test_t test = {
"transforms",
"Test various transformations.",
WIDTH, HEIGHT,
draw
};
static void
draw_L_shape (cairo_t *cr)
{
cairo_move_to (cr, 0, 0);
cairo_rel_line_to (cr, 0, 10);
cairo_rel_line_to (cr, 5, 0);
cairo_save (cr);
cairo_identity_matrix (cr);
cairo_set_line_width (cr, 2.0);
cairo_stroke (cr);
cairo_restore (cr);
}
static cairo_test_status_t
draw (cairo_t *cr, int width, int height)
{
cairo_save (cr);
cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
cairo_paint (cr);
cairo_restore (cr);
cairo_translate (cr, 5, 5);
draw_L_shape (cr);
cairo_translate (cr, 10, 0);
cairo_save (cr);
{
cairo_scale (cr, 2, 2);
draw_L_shape (cr);
}
cairo_restore (cr);
cairo_translate (cr, 15, 0);
cairo_save (cr);
{
cairo_rotate (cr, M_PI / 2.0);
draw_L_shape (cr);
}
cairo_restore (cr);
cairo_translate (cr, 5, 0);
cairo_save (cr);
{
cairo_matrix_t skew_y = {
1, -1,
0, 1,
0, 0
};
cairo_transform (cr, &skew_y);
draw_L_shape (cr);
}
cairo_restore (cr);
cairo_translate (cr, 5, 10);
cairo_save (cr);
{
cairo_matrix_t skew_x = {
1.0, 0.0,
-0.5, 1.0,
0.0, 0.0
};
cairo_transform (cr, &skew_x);
draw_L_shape (cr);
}
cairo_restore (cr);
return CAIRO_TEST_SUCCESS;
}
int
main (void)
{
return cairo_test (&test);
}