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; |