示例#1
0
文件: fill-rule.c 项目: 3oyka/cairo2
/* 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;
}
示例#2
0
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;
}