- compactpoly_t data;
- compactinit(&data, gridsize);
- data.poly->gridsize = gridsize;
- convert_file(filename, &data, compactmoveto, compactlineto, compactsetgridsize);
- return compactfinish(&data);
+ polywriter_t writer;
+ gfxcompactpolywriter_init(&writer);
+ writer.setgridsize(&writer, gridsize);
+ convert_file(filename, &writer, gridsize);
+ return (gfxcompactpoly_t*)writer.finish(&writer);
+}
+gfxpoly_t*gfxpoly_from_gfxcompactpoly(gfxcompactpoly_t*poly)
+{
+ int s,t;
+ int pass;
+ gfxpoly_t*poly2 = gfxpoly_new(poly->gridsize);
+ for(t=0;t<poly->num_strokes;t++) {
+ gfxpolystroke_t*stroke = &poly->strokes[t];
+ for(s=0;s<stroke->num_points-1;s++) {
+ point_t a = stroke->points[s];
+ point_t b = stroke->points[s+1];
+ edge_t*e = 0;
+ if(stroke->dir == DIR_UP) {
+ e = edge_new(a.x,a.y,b.x,b.y);
+ } else {
+ e = edge_new(b.x,b.y,a.x,a.y);
+ }
+ e->style = stroke->fs;
+ e->next = poly2->edges;
+ poly2->edges = e;
+ }
+ }
+ return poly2;