#include "export-svg.h" #include #include "edge-segments.h" namespace msdfgen { static void writeSvgCoord(FILE *f, Point2 coord) { fprintf(f, "%.17g %.17g", coord.x, coord.y); } static void writeSvgPathDef(FILE *f, const Shape &shape) { bool beginning = true; for (const Contour &c : shape.contours) { if (c.edges.empty()) continue; if (beginning) beginning = false; else fputc(' ', f); fputs("M ", f); writeSvgCoord(f, c.edges[0]->controlPoints()[0]); for (const EdgeHolder &e : c.edges) { const Point2 *cp = e->controlPoints(); switch (e->type()) { case (int) LinearSegment::EDGE_TYPE: fputs(" L ", f); writeSvgCoord(f, cp[1]); break; case (int) QuadraticSegment::EDGE_TYPE: fputs(" Q ", f); writeSvgCoord(f, cp[1]); fputc(' ', f); writeSvgCoord(f, cp[2]); break; case (int) CubicSegment::EDGE_TYPE: fputs(" C ", f); writeSvgCoord(f, cp[1]); fputc(' ', f); writeSvgCoord(f, cp[2]); fputc(' ', f); writeSvgCoord(f, cp[3]); break; } } fputs(" Z", f); } } bool saveSvgShape(const Shape &shape, const char *filename) { if (FILE *f = fopen(filename, "w")) { fputs("\n", f); fclose(f); return true; } return false; } bool saveSvgShape(const Shape &shape, const Shape::Bounds &bounds, const char *filename) { if (FILE *f = fopen(filename, "w")) { fprintf(f, "\n", f); fclose(f); return true; } return false; } }