Home | History | Annotate | Download | only in vega

Lines Matching refs:itr

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