1
/*
2
 * Copyright 2011 SCore Corporation
3
 *
4
 * Permission is hereby granted, free of charge, to any person
5
 * obtaining a copy of this software and associated documentation
6
 * files (the "Software"), to deal in the Software without
7
 * restriction, including without limitation the rights to use, copy,
8
 * modify, merge, publish, distribute, sublicense, and/or sell copies
9
 * of the Software, and to permit persons to whom the Software is
10
 * furnished to do so, subject to the following conditions:
11
 *
12
 * The above copyright notice and this permission notice shall be
13
 * included in all copies or substantial portions of the Software.
14
 *
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
 * SOFTWARE.
23
 *
24
 * Author: Taekyun Kim <podain77@gmail.com>
25
 */
26

            
27
#include "cairo-test.h"
28

            
29
static void
30
6
rounded_rectangle(cairo_t *cr,
31
		  double x, double y,
32
		  double width, double height,
33
		  double radius)
34
{
35
6
    cairo_move_to   (cr, x, y + radius);
36
6
    cairo_line_to   (cr, x, y + height - radius);
37
6
    cairo_curve_to  (cr, x, y + height - radius/2.0,
38
6
			  x + radius/2.0, y + height,
39
			  x + radius, y + height);
40
6
    cairo_line_to   (cr, x + width - radius, y + height);
41
6
    cairo_curve_to  (cr, x + width - radius/2.0, y + height,
42
6
		          x + width, y + height - radius/2.0,
43
6
			  x + width, y + height - radius);
44
6
    cairo_line_to   (cr, x + width, y + radius);
45
6
    cairo_curve_to  (cr, x + width, y + radius/2.0,
46
6
		          x + width - radius/2.0, y,
47
6
			  x + width - radius, y);
48
6
    cairo_line_to   (cr, x + radius, y);
49
6
    cairo_curve_to  (cr, x + radius/2.0, y, x, y + radius/2.0, x, y + radius);
50
6
    cairo_close_path(cr);
51
6
}
52

            
53
static cairo_test_status_t
54
3
draw_mono (cairo_t *cr, int width, int height)
55
{
56
3
    cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);
57
3
    cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
58
3
    cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 1.0);
59
3
    cairo_paint(cr);
60

            
61
3
    cairo_rectangle(cr, 20, 20, 60, 60);
62
3
    cairo_clip(cr);
63

            
64
3
    rounded_rectangle(cr, 0, 0, 100, 100, 10);
65
3
    cairo_clip(cr);
66

            
67
3
    cairo_set_source_rgba(cr, 1.0, 0.0, 0.0, 1.0);
68
3
    cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
69
3
    cairo_paint(cr);
70

            
71
3
    return CAIRO_TEST_SUCCESS;
72
}
73

            
74
static cairo_test_status_t
75
3
draw_aa (cairo_t *cr, int width, int height)
76
{
77
3
    cairo_set_antialias(cr, CAIRO_ANTIALIAS_DEFAULT);
78
3
    cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
79
3
    cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 1.0);
80
3
    cairo_paint(cr);
81

            
82
3
    cairo_rectangle(cr, 20, 20, 60, 60);
83
3
    cairo_clip(cr);
84

            
85
3
    rounded_rectangle(cr, 0, 0, 100, 100, 10);
86
3
    cairo_clip(cr);
87

            
88
3
    cairo_set_source_rgba(cr, 1.0, 0.0, 0.0, 1.0);
89
3
    cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
90
3
    cairo_paint(cr);
91

            
92
3
    return CAIRO_TEST_SUCCESS;
93
}
94

            
95
1
CAIRO_TEST (paint_clip_fill_mono,
96
	    "Test reduction of a paint with a clip",
97
	    "paint, clip", /* keywords */
98
	    NULL, /* requirements */
99
	    100, 100,
100
	    NULL, draw_mono)
101
1
CAIRO_TEST (paint_clip_fill_aa,
102
	    "Test reduction of a paint with a clip",
103
	    "paint, clip", /* keywords */
104
	    NULL, /* requirements */
105
	    100, 100,
106
	    NULL, draw_aa)