Subversion Repositories Kolibri OS

Rev

Rev 1892 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1892 Rev 3959
Line 25... Line 25...
25
 * OTHER DEALINGS IN THE SOFTWARE.
25
 * OTHER DEALINGS IN THE SOFTWARE.
26
 */
26
 */
27
#include "cairoint.h"
27
#include "cairoint.h"
Line 28... Line 28...
28
 
28
 
-
 
29
#include "cairo-composite-rectangles-private.h"
-
 
30
#include "cairo-clip-private.h"
29
#include "cairo-composite-rectangles-private.h"
31
#include "cairo-error-private.h"
30
#include "cairo-fixed-private.h"
-
 
31
 
-
 
32
static cairo_scan_converter_t *
-
 
33
_create_scan_converter (cairo_fill_rule_t			 fill_rule,
-
 
34
			cairo_antialias_t			 antialias,
-
 
35
			const cairo_composite_rectangles_t	*rects)
-
 
36
{
-
 
37
    if (antialias == CAIRO_ANTIALIAS_NONE) {
-
 
38
	ASSERT_NOT_REACHED;
-
 
39
	return NULL;
-
 
40
    }
-
 
41
 
-
 
42
    return _cairo_tor_scan_converter_create (rects->bounded.x,
-
 
43
					     rects->bounded.y,
-
 
44
					     rects->bounded.x + rects->bounded.width,
-
 
45
					     rects->bounded.y + rects->bounded.height,
-
 
46
					     fill_rule);
-
 
47
}
-
 
48
 
-
 
49
/* XXX Add me to the compositor interface. Ok, first create the compositor
-
 
50
 * interface, and then add this with associated fallback!
-
 
51
 */
-
 
52
cairo_status_t
-
 
53
_cairo_surface_composite_polygon (cairo_surface_t	*surface,
-
 
54
				  cairo_operator_t	 op,
32
#include "cairo-fixed-private.h"
55
				  const cairo_pattern_t	*pattern,
-
 
56
				  cairo_fill_rule_t	fill_rule,
-
 
57
				  cairo_antialias_t	antialias,
-
 
58
				  const cairo_composite_rectangles_t *rects,
-
 
59
				  cairo_polygon_t	*polygon,
-
 
60
				  cairo_region_t	*clip_region)
-
 
61
{
-
 
62
    cairo_span_renderer_t *renderer;
-
 
63
    cairo_scan_converter_t *converter;
-
 
64
    cairo_status_t status;
-
 
65
 
-
 
66
    converter = _create_scan_converter (fill_rule, antialias, rects);
-
 
67
    status = converter->add_polygon (converter, polygon);
-
 
68
    if (unlikely (status))
-
 
69
	goto CLEANUP_CONVERTER;
-
 
70
 
-
 
71
    renderer = _cairo_surface_create_span_renderer (op, pattern, surface,
-
 
72
						    antialias, rects,
-
 
73
						    clip_region);
-
 
74
    status = converter->generate (converter, renderer);
-
 
75
    if (unlikely (status))
-
 
76
	goto CLEANUP_RENDERER;
-
 
77
 
-
 
78
    status = renderer->finish (renderer);
-
 
79
 
-
 
80
 CLEANUP_RENDERER:
-
 
81
    renderer->destroy (renderer);
-
 
82
 CLEANUP_CONVERTER:
-
 
83
    converter->destroy (converter);
-
 
84
    return status;
-
 
Line 85... Line 33...
85
}
33
#include "cairo-types-private.h"
86
 
34
 
87
static void
35
static void
88
_cairo_nil_destroy (void *abstract)
36
_cairo_nil_destroy (void *abstract)
89
{
37
{
Line 90... Line 38...
90
    (void) abstract;
38
    (void) abstract;
91
}
-
 
92
 
-
 
93
static cairo_status_t
-
 
94
_cairo_nil_scan_converter_add_polygon (void *abstract_converter,
-
 
95
				       const cairo_polygon_t *polygon)
-
 
96
{
-
 
97
    (void) abstract_converter;
-
 
98
    (void) polygon;
-
 
99
    return _cairo_scan_converter_status (abstract_converter);
-
 
100
}
-
 
101
 
-
 
102
static cairo_status_t
-
 
103
_cairo_nil_scan_converter_add_edge (void *abstract_converter,
-
 
104
				    const cairo_point_t *p1,
-
 
105
				    const cairo_point_t *p2,
-
 
106
				    int top, int bottom,
-
 
107
				    int dir)
-
 
108
{
-
 
109
    (void) abstract_converter;
-
 
110
    (void) p1;
-
 
111
    (void) p2;
-
 
112
    (void) top;
-
 
113
    (void) bottom;
-
 
114
    (void) dir;
-
 
115
    return _cairo_scan_converter_status (abstract_converter);
-
 
116
}
39
}
117
 
40
 
118
static cairo_status_t
41
static cairo_status_t
119
_cairo_nil_scan_converter_generate (void *abstract_converter,
42
_cairo_nil_scan_converter_generate (void *abstract_converter,
120
				    cairo_span_renderer_t *renderer)
43
				    cairo_span_renderer_t *renderer)
Line 137... Line 60...
137
{
60
{
138
    cairo_scan_converter_t *converter = abstract_converter;
61
    cairo_scan_converter_t *converter = abstract_converter;
139
    if (error == CAIRO_STATUS_SUCCESS)
62
    if (error == CAIRO_STATUS_SUCCESS)
140
	ASSERT_NOT_REACHED;
63
	ASSERT_NOT_REACHED;
141
    if (converter->status == CAIRO_STATUS_SUCCESS) {
64
    if (converter->status == CAIRO_STATUS_SUCCESS) {
142
	converter->add_polygon = _cairo_nil_scan_converter_add_polygon;
-
 
143
	converter->add_edge = _cairo_nil_scan_converter_add_edge;
-
 
144
	converter->generate = _cairo_nil_scan_converter_generate;
65
	converter->generate = _cairo_nil_scan_converter_generate;
145
	converter->status = error;
66
	converter->status = error;
146
    }
67
    }
147
    return converter->status;
68
    return converter->status;
148
}
69
}
Line 202... Line 123...
202
    case CAIRO_STATUS_NO_MEMORY: RETURN_NIL;
123
    case CAIRO_STATUS_NO_MEMORY: RETURN_NIL;
203
    case CAIRO_STATUS_INVALID_SIZE: RETURN_NIL;
124
    case CAIRO_STATUS_INVALID_SIZE: RETURN_NIL;
204
    case CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED: RETURN_NIL;
125
    case CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED: RETURN_NIL;
205
    case CAIRO_STATUS_DEVICE_TYPE_MISMATCH: RETURN_NIL;
126
    case CAIRO_STATUS_DEVICE_TYPE_MISMATCH: RETURN_NIL;
206
    case CAIRO_STATUS_DEVICE_ERROR: RETURN_NIL;
127
    case CAIRO_STATUS_DEVICE_ERROR: RETURN_NIL;
-
 
128
    case CAIRO_STATUS_INVALID_MESH_CONSTRUCTION: RETURN_NIL;
-
 
129
    case CAIRO_STATUS_DEVICE_FINISHED: RETURN_NIL;
207
    default:
130
    default:
208
	break;
131
	break;
209
    }
132
    }
210
    status = CAIRO_STATUS_NO_MEMORY;
133
    status = CAIRO_STATUS_NO_MEMORY;
211
    RETURN_NIL;
134
    RETURN_NIL;
Line 312... Line 235...
312
    case CAIRO_STATUS_NO_MEMORY: RETURN_NIL;
235
    case CAIRO_STATUS_NO_MEMORY: RETURN_NIL;
313
    case CAIRO_STATUS_INVALID_SIZE: RETURN_NIL;
236
    case CAIRO_STATUS_INVALID_SIZE: RETURN_NIL;
314
    case CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED: RETURN_NIL;
237
    case CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED: RETURN_NIL;
315
    case CAIRO_STATUS_DEVICE_TYPE_MISMATCH: RETURN_NIL;
238
    case CAIRO_STATUS_DEVICE_TYPE_MISMATCH: RETURN_NIL;
316
    case CAIRO_STATUS_DEVICE_ERROR: RETURN_NIL;
239
    case CAIRO_STATUS_DEVICE_ERROR: RETURN_NIL;
-
 
240
    case CAIRO_STATUS_INVALID_MESH_CONSTRUCTION: RETURN_NIL;
-
 
241
    case CAIRO_STATUS_DEVICE_FINISHED: RETURN_NIL;
317
    default:
242
    default:
318
	break;
243
	break;
319
    }
244
    }
320
    status = CAIRO_STATUS_NO_MEMORY;
245
    status = CAIRO_STATUS_NO_MEMORY;
321
    RETURN_NIL;
246
    RETURN_NIL;