Merge branch 'pr/63'

This commit is contained in:
Mikko Mononen 2018-07-22 23:08:43 +03:00
commit 35a45f3396
2 changed files with 39 additions and 5 deletions

View File

@ -45,15 +45,15 @@ extern "C" {
// NanoSVG can return the paths in few different units. For example if you want to render an image, you may choose // NanoSVG can return the paths in few different units. For example if you want to render an image, you may choose
// to get the paths in pixels, or if you are feeding the data into a CNC-cutter, you may want to use millimeters. // to get the paths in pixels, or if you are feeding the data into a CNC-cutter, you may want to use millimeters.
// //
// The units passed to NanoVG should be one of: 'px', 'pt', 'pc' 'mm', 'cm', or 'in'. // The units passed to NanoSVG should be one of: 'px', 'pt', 'pc' 'mm', 'cm', or 'in'.
// DPI (dots-per-inch) controls how the unit conversion is done. // DPI (dots-per-inch) controls how the unit conversion is done.
// //
// If you don't know or care about the units stuff, "px" and 96 should get you going. // If you don't know or care about the units stuff, "px" and 96 should get you going.
/* Example Usage: /* Example Usage:
// Load // Load SVG
NSVGImage* image; NSVGimage* image;
image = nsvgParseFromFile("test.svg", "px", 96); image = nsvgParseFromFile("test.svg", "px", 96);
printf("size: %f x %f\n", image->width, image->height); printf("size: %f x %f\n", image->width, image->height);
// Use... // Use...
@ -167,7 +167,10 @@ NSVGimage* nsvgParseFromFile(const char* filename, const char* units, float dpi)
// Important note: changes the string. // Important note: changes the string.
NSVGimage* nsvgParse(char* input, const char* units, float dpi); NSVGimage* nsvgParse(char* input, const char* units, float dpi);
// Deletes list of paths. // Duplicates a path.
NSVGpath* nsvgDuplicatePath(NSVGpath* p);
// Deletes an image.
void nsvgDelete(NSVGimage* image); void nsvgDelete(NSVGimage* image);
#ifdef __cplusplus #ifdef __cplusplus
@ -2906,6 +2909,36 @@ error:
return NULL; return NULL;
} }
NSVGpath* nsvgDuplicatePath(NSVGpath* p)
{
NSVGpath* res = NULL;
if (p == NULL)
return NULL;
res = (NSVGpath*)malloc(sizeof(NSVGpath));
if (res == NULL) goto error;
memset(res, 0, sizeof(NSVGpath));
res->pts = (float*)malloc(p->npts*2*sizeof(float));
if (res->pts == NULL) goto error;
memcpy(res->pts, p->pts, p->npts * sizeof(float) * 2);
res->npts = p->npts;
memcpy(res->bounds, p->bounds, sizeof(p->bounds));
res->closed = p->closed;
return res;
error:
if (res != NULL) {
free(res->pts);
free(res);
}
return NULL;
}
void nsvgDelete(NSVGimage* image) void nsvgDelete(NSVGimage* image)
{ {
NSVGshape *snext, *shape; NSVGshape *snext, *shape;

View File

@ -33,7 +33,8 @@ typedef struct NSVGrasterizer NSVGrasterizer;
/* Example Usage: /* Example Usage:
// Load SVG // Load SVG
struct SNVGImage* image = nsvgParseFromFile("test.svg."); NSVGimage* image;
image = nsvgParseFromFile("test.svg", "px", 96);
// Create rasterizer (can be used to render multiple images). // Create rasterizer (can be used to render multiple images).
struct NSVGrasterizer* rast = nsvgCreateRasterizer(); struct NSVGrasterizer* rast = nsvgCreateRasterizer();