Lines Matching refs:itr
85 static VGPathCommand stroke_itr_command(struct stroke_iterator *itr) in stroke_itr_command() argument
87 return itr->current_command(itr); in stroke_itr_command()
90 static void stroke_itr_coords(struct stroke_iterator *itr, VGfloat *coords) in stroke_itr_coords() argument
92 itr->current_coords(itr, coords); in stroke_itr_coords()
95 static void stroke_fw_itr_coords(struct stroke_iterator *itr, VGfloat *coords) in stroke_fw_itr_coords() argument
97 if (itr->position >= itr->num_commands) in stroke_fw_itr_coords()
99 switch (stroke_itr_command(itr)) { in stroke_fw_itr_coords()
101 coords[0] = itr->coords[itr->coord_position]; in stroke_fw_itr_coords()
102 coords[1] = itr->coords[itr->coord_position + 1]; in stroke_fw_itr_coords()
105 coords[0] = itr->coords[itr->coord_position]; in stroke_fw_itr_coords()
106 coords[1] = itr->coords[itr->coord_position + 1]; in stroke_fw_itr_coords()
109 coords[0] = itr->coords[itr->coord_position]; in stroke_fw_itr_coords()
110 coords[1] = itr->coords[itr->coord_position + 1]; in stroke_fw_itr_coords()
111 coords[2] = itr->coords[itr->coord_position + 2]; in stroke_fw_itr_coords()
112 coords[3] = itr->coords[itr->coord_position + 3]; in stroke_fw_itr_coords()
113 coords[4] = itr->coords[itr->coord_position + 4]; in stroke_fw_itr_coords()
114 coords[5] = itr->coords[itr->coord_position + 5]; in stroke_fw_itr_coords()
122 static void stroke_bw_itr_coords(struct stroke_iterator *itr, VGfloat *coords) in stroke_bw_itr_coords() argument
124 if (itr->position >= itr->num_commands) in stroke_bw_itr_coords()
126 switch (stroke_itr_command(itr)) { in stroke_bw_itr_coords()
128 coords[0] = itr->coords[itr->coord_position]; in stroke_bw_itr_coords()
129 coords[1] = itr->coords[itr->coord_position + 1]; in stroke_bw_itr_coords()
132 coords[0] = itr->coords[itr->coord_position]; in stroke_bw_itr_coords()
133 coords[1] = itr->coords[itr->coord_position + 1]; in stroke_bw_itr_coords()
136 coords[0] = itr->coords[itr->coord_position + 4]; in stroke_bw_itr_coords()
137 coords[1] = itr->coords[itr->coord_position + 5]; in stroke_bw_itr_coords()
138 coords[2] = itr->coords[itr->coord_position + 2]; in stroke_bw_itr_coords()
139 coords[3] = itr->coords[itr->coord_position + 3]; in stroke_bw_itr_coords()
140 coords[4] = itr->coords[itr->coord_position + 0]; in stroke_bw_itr_coords()
141 coords[5] = itr->coords[itr->coord_position + 1]; in stroke_bw_itr_coords()
164 static VGboolean stroke_fw_has_next(struct stroke_iterator *itr) in stroke_fw_has_next() argument
166 return itr->position < (itr->num_commands - 1); in stroke_fw_has_next()
169 static VGboolean stroke_bw_has_next(struct stroke_iterator *itr) in stroke_bw_has_next() argument
171 return itr->position > 0; in stroke_bw_has_next()
174 static void stroke_fw_next(struct stroke_iterator *itr) in stroke_fw_next() argument
177 debug_assert(stroke_fw_has_next(itr)); in stroke_fw_next()
179 cmd = stroke_itr_command(itr); in stroke_fw_next()
181 itr->coord_position += num_elements_for_segments(&cmd, 1); in stroke_fw_next()
182 ++itr->position; in stroke_fw_next()
185 static void stroke_bw_next(struct stroke_iterator *itr) in stroke_bw_next() argument
188 debug_assert(stroke_bw_has_next(itr)); in stroke_bw_next()
190 --itr->position; in stroke_bw_next()
191 cmd = stroke_itr_command(itr); in stroke_bw_next()
193 itr->coord_position -= num_elements_for_segments(&cmd, 1); in stroke_bw_next()
196 static void stroke_itr_common_init(struct stroke_iterator *itr, in stroke_itr_common_init() argument
200 itr->cmds = (VGubyte*)cmds->data; in stroke_itr_common_init()
201 itr->num_commands = cmds->num_elements; in stroke_itr_common_init()
203 itr->coords = (VGfloat*)coords->data; in stroke_itr_common_init()
204 itr->num_coords = coords->num_elements; in stroke_itr_common_init()
207 static void stroke_forward_iterator(struct stroke_iterator *itr, in stroke_forward_iterator() argument
211 stroke_itr_common_init(itr, cmds, coords); in stroke_forward_iterator()
212 itr->position = 0; in stroke_forward_iterator()
213 itr->coord_position = 0; in stroke_forward_iterator()
215 itr->next = stroke_fw_next; in stroke_forward_iterator()
216 itr->has_next = stroke_fw_has_next; in stroke_forward_iterator()
217 itr->current_command = stroke_fw_current_command; in stroke_forward_iterator()
218 itr->current_coords = stroke_fw_itr_coords; in stroke_forward_iterator()
221 static void stroke_backward_iterator(struct stroke_iterator *itr, in stroke_backward_iterator() argument
226 stroke_itr_common_init(itr, cmds, coords); in stroke_backward_iterator()
227 itr->position = itr->num_commands - 1; in stroke_backward_iterator()
229 cmd = stroke_bw_current_command(itr); in stroke_backward_iterator()
230 itr->coord_position = itr->num_coords - in stroke_backward_iterator()
233 itr->next = stroke_bw_next; in stroke_backward_iterator()
234 itr->has_next = stroke_bw_has_next; in stroke_backward_iterator()
235 itr->current_command = stroke_bw_current_command; in stroke_backward_iterator()
236 itr->current_coords = stroke_bw_itr_coords; in stroke_backward_iterator()
241 static void stroke_flat_next(struct stroke_iterator *itr) in stroke_flat_next() argument
245 if (itr->curve_index >= 0) { in stroke_flat_next()
246 ++itr->curve_index; in stroke_flat_next()
247 if (itr->curve_index >= polygon_vertex_count(itr->curve_poly)) { in stroke_flat_next()
248 itr->curve_index = -1; in stroke_flat_next()
249 polygon_destroy(itr->curve_poly); in stroke_flat_next()
250 itr->curve_poly = 0; in stroke_flat_next()
254 debug_assert(stroke_fw_has_next(itr)); in stroke_flat_next()
256 cmd = itr->cmds[itr->position]; in stroke_flat_next()
257 itr->coord_position += num_elements_for_segments(&cmd, 1); in stroke_flat_next()
258 ++itr->position; in stroke_flat_next()
260 cmd = itr->cmds[itr->position]; in stroke_flat_next()
266 bez[0] = itr->coords[itr->coord_position - 2]; in stroke_flat_next()
267 bez[1] = itr->coords[itr->coord_position - 1]; in stroke_flat_next()
268 bez[2] = itr->coords[itr->coord_position]; in stroke_flat_next()
269 bez[3] = itr->coords[itr->coord_position + 1]; in stroke_flat_next()
270 bez[4] = itr->coords[itr->coord_position + 2]; in stroke_flat_next()
271 bez[5] = itr->coords[itr->coord_position + 3]; in stroke_flat_next()
272 bez[6] = itr->coords[itr->coord_position + 4]; in stroke_flat_next()
273 bez[7] = itr->coords[itr->coord_position + 5]; in stroke_flat_next()
281 itr->curve_index = 1; in stroke_flat_next()
282 if (itr->curve_poly) { in stroke_flat_next()
283 polygon_destroy(itr->curve_poly); in stroke_flat_next()
284 itr->curve_poly = 0; in stroke_flat_next()
286 itr->curve_poly = bezier_to_polygon(&bezier); in stroke_flat_next()
290 static VGboolean stroke_flat_has_next(struct stroke_iterator *itr) in stroke_flat_has_next() argument
292 return (itr->curve_index >= 0 && in stroke_flat_has_next()
293 itr->curve_index < (polygon_vertex_count(itr->curve_poly)-1)) in stroke_flat_has_next()
294 || itr->position < (itr->num_commands - 1); in stroke_flat_has_next()
305 static void stroke_flat_itr_coords(struct stroke_iterator *itr, VGfloat *coords) in stroke_flat_itr_coords() argument
307 if (itr->curve_index <= -1 && itr->position >= itr->num_commands) in stroke_flat_itr_coords()
310 if (itr->curve_index >= 0) { in stroke_flat_itr_coords()
311 polygon_vertex(itr->curve_poly, itr->curve_index, in stroke_flat_itr_coords()
316 switch (stroke_itr_command(itr)) { in stroke_flat_itr_coords()
318 coords[0] = itr->coords[itr->coord_position]; in stroke_flat_itr_coords()
319 coords[1] = itr->coords[itr->coord_position + 1]; in stroke_flat_itr_coords()
322 coords[0] = itr->coords[itr->coord_position]; in stroke_flat_itr_coords()
323 coords[1] = itr->coords[itr->coord_position + 1]; in stroke_flat_itr_coords()
331 static void stroke_flat_iterator(struct stroke_iterator *itr, in stroke_flat_iterator() argument
335 stroke_itr_common_init(itr, cmds, coords); in stroke_flat_iterator()
336 itr->position = 0; in stroke_flat_iterator()
337 itr->coord_position = 0; in stroke_flat_iterator()
339 itr->next = stroke_flat_next; in stroke_flat_iterator()
340 itr->has_next = stroke_flat_has_next; in stroke_flat_iterator()
341 itr->current_command = stroke_flat_current_command; in stroke_flat_iterator()
342 itr->current_coords = stroke_flat_itr_coords; in stroke_flat_iterator()
343 itr->curve_index = -1; in stroke_flat_iterator()
344 itr->curve_poly = 0; in stroke_flat_iterator()