/* Fill the same path twice, once with each fill rule */ static cairo_test_status_t draw (cairo_t *cr, int width, int height) { cairo_set_source_rgb (cr, 1, 0, 0); cairo_translate (cr, 1, 1); little_star_path (cr); cairo_set_fill_rule (cr, CAIRO_FILL_RULE_WINDING); cairo_fill (cr); cairo_translate (cr, LITTLE_STAR_SIZE + 1, 0); little_star_path (cr); cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD); cairo_fill (cr); cairo_translate (cr, -(LITTLE_STAR_SIZE + 1), LITTLE_STAR_SIZE + 1); big_star_path (cr); cairo_set_fill_rule (cr, CAIRO_FILL_RULE_WINDING); cairo_fill (cr); cairo_translate (cr, BIG_STAR_SIZE + 1, 0); big_star_path (cr); cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD); cairo_fill (cr); return CAIRO_TEST_SUCCESS; }
static cairo_test_status_t draw (cairo_t *cr, int width, int height) { int i; cairo_set_source_rgb (cr, 0, 0, 0); cairo_paint (cr); cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE); /* Try a circle */ cairo_arc (cr, 40, 40, 20, 0, 2 * M_PI); cairo_set_source_rgb (cr, 1, 0, 0); cairo_fill (cr); /* Try using clipping to draw a circle */ cairo_arc (cr, 100, 40, 20, 0, 2 * M_PI); cairo_clip (cr); cairo_rectangle (cr, 80, 20, 40, 40); cairo_set_source_rgb (cr, 0, 0, 1); cairo_fill (cr); /* Reset the clipping */ cairo_reset_clip (cr); /* Draw a bunch of lines */ cairo_set_line_width (cr, 1.0); cairo_set_source_rgb (cr, 0, 1, 0); for (i = 0; i < 10; i++) { cairo_move_to (cr, 10, 70 + (i * 4)); cairo_line_to (cr, 120, 70 + (i * 18)); cairo_stroke (cr); } /* Try filling a poly */ cairo_translate (cr, 160, 120); cairo_set_source_rgb (cr, 1, 1, 0); big_star_path (cr); cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD); cairo_fill (cr); cairo_translate (cr, -160, -120); /* How about some curves? */ cairo_set_source_rgb (cr, 1, 0, 1); for (i = 0; i < 10; i++) { cairo_move_to (cr, 150, 50 + (i * 5)); cairo_curve_to (cr, 250, 50, 200, (i * 10), 300, 50 + (i * 10)); cairo_stroke (cr); } return CAIRO_TEST_SUCCESS; }