Commit: 3fbe6f513d11563339e16d501708fc361d265f3b Author: Antonio Vazquez Date: Fri Aug 6 15:18:32 2021 +0200 Branches: master https://developer.blender.org/rB3fbe6f513d11563339e16d501708fc361d265f3b
Move NanoSVG lib to extern The library has some modifications and it has been included in a diff. Reviewed By: campbellbarton Differential Revision: https://developer.blender.org/D12142 (Some minor changes done in the patch) =================================================================== A extern/nanosvg/README.blender R100 source/blender/io/gpencil/nanosvg/nanosvg.h extern/nanosvg/nanosvg.h A extern/nanosvg/patches/NanoSVG.diff M source/blender/io/gpencil/CMakeLists.txt M source/blender/io/gpencil/intern/gpencil_io_import_svg.cc =================================================================== diff --git a/extern/nanosvg/README.blender b/extern/nanosvg/README.blender new file mode 100644 index 00000000000..3772cc106c8 --- /dev/null +++ b/extern/nanosvg/README.blender @@ -0,0 +1,7 @@ +Project: NanoSVG +URL: https://github.com/memononen/nanosvg +License: zlib +Upstream version: +Local modifications: Added some functionality to manage grease pencil layers + +Added a fix to SVG import arc and float errors (https://developer.blender.org/rB11dc674c78b49fc4e0b7c134c375b6c8b8eacbcc) \ No newline at end of file diff --git a/source/blender/io/gpencil/nanosvg/nanosvg.h b/extern/nanosvg/nanosvg.h similarity index 100% rename from source/blender/io/gpencil/nanosvg/nanosvg.h rename to extern/nanosvg/nanosvg.h diff --git a/extern/nanosvg/patches/NanoSVG.diff b/extern/nanosvg/patches/NanoSVG.diff new file mode 100644 index 00000000000..68dbb18573b --- /dev/null +++ b/extern/nanosvg/patches/NanoSVG.diff @@ -0,0 +1,86 @@ +diff --git a/c:/tmp/nanosvg_original.h b/c:/tmp/nanosvg_modif.h +index 24a01a86d3d..eca0d07e79d 100644 +--- a/c:/tmp/nanosvg_original.h ++++ b/c:/tmp/nanosvg_modif.h +@@ -24,7 +24,8 @@ + * + * Bounding box calculation based on http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html + * +- */ ++ * This is a modified version for Blender used by importers. ++ **/ + + #ifndef NANOSVG_H + #define NANOSVG_H +@@ -148,6 +149,8 @@ extern "C" { + typedef struct NSVGshape + { + char id[64]; // Optional 'id' attr of the shape or its group ++ /* Blender: Parent ID used for layer creation. */ ++ char id_parent[64]; + NSVGpaint fill; // Fill paint + NSVGpaint stroke; // Stroke paint + float opacity; // Opacity of the shape. +@@ -370,6 +373,7 @@ int nsvg__parseXML(char* input, + /* Simple SVG parser. */ + + #define NSVG_MAX_ATTR 128 ++#define NSVG_MAX_BREADCRUMB 5 + + enum NSVGgradientUnits + { +@@ -471,6 +475,10 @@ typedef struct NSVGparser + float dpi; + char pathFlag; + char defsFlag; ++ /** Blender breadcrumb for layers. */ ++ char breadcrumb[NSVG_MAX_BREADCRUMB][64]; ++ /** Blender number of elements in breadcrumb. */ ++ int breadcrumb_len; + } NSVGparser; + + static void nsvg__xformIdentity(float* t) +@@ -980,6 +988,14 @@ static void nsvg__addShape(NSVGparser* p) + memset(shape, 0, sizeof(NSVGshape)); + + memcpy(shape->id, attr->id, sizeof shape->id); ++ /* Copy parent id from breadcrumb. */ ++ if (p->breadcrumb_len > 0) { ++ memcpy(shape->id_parent, p->breadcrumb[0], sizeof shape->id_parent); ++ } ++ else { ++ memcpy(shape->id_parent, attr->id, sizeof shape->id_parent); ++ } ++ + scale = nsvg__getAverageScale(attr->xform); + shape->strokeWidth = attr->strokeWidth * scale; + shape->strokeDashOffset = attr->strokeDashOffset * scale; +@@ -2814,6 +2830,14 @@ static void nsvg__startElement(void* ud, const char* el, const char** attr) + if (strcmp(el, "g") == 0) { + nsvg__pushAttr(p); + nsvg__parseAttribs(p, attr); ++ ++ /* Save the breadcrumb of groups. */ ++ if (p->breadcrumb_len < NSVG_MAX_BREADCRUMB) { ++ NSVGattrib *attr_id = nsvg__getAttr(p); ++ memcpy( ++ p->breadcrumb[p->breadcrumb_len], attr_id->id, sizeof(p->breadcrumb[p->breadcrumb_len])); ++ p->breadcrumb_len++; ++ } + } + else if (strcmp(el, "path") == 0) { + if (p->pathFlag) // Do not allow nested paths. +@@ -2874,7 +2898,12 @@ static void nsvg__endElement(void* ud, const char* el) + NSVGparser* p = (NSVGparser*)ud; + + if (strcmp(el, "g") == 0) { +- nsvg__popAttr(p); ++ /* Remove the breadcrumb level. */ ++ if (p->breadcrumb_len > 0) { ++ p->breadcrumb[p->breadcrumb_len - 1][0] = '\0'; ++ p->breadcrumb_len--; ++ } ++ nsvg__popAttr(p); + } + else if (strcmp(el, "path") == 0) { + p->pathFlag = 0; diff --git a/source/blender/io/gpencil/CMakeLists.txt b/source/blender/io/gpencil/CMakeLists.txt index fec95be6aa8..4af8b506bd5 100644 --- a/source/blender/io/gpencil/CMakeLists.txt +++ b/source/blender/io/gpencil/CMakeLists.txt @@ -33,6 +33,7 @@ set(INC ../../../../intern/clog ../../../../intern/guardedalloc ../../../../intern/utfconv + ../../../../extern/nanosvg ) set(INC_SYS @@ -44,9 +45,6 @@ set(SRC intern/gpencil_io_import_base.cc intern/gpencil_io_import_svg.cc - # This line must be removed if NanoSVG is moved to extern - nanosvg/nanosvg.h - gpencil_io.h intern/gpencil_io_base.hh intern/gpencil_io_export_base.hh diff --git a/source/blender/io/gpencil/intern/gpencil_io_import_svg.cc b/source/blender/io/gpencil/intern/gpencil_io_import_svg.cc index db6bbc7768e..941d1137f4d 100644 --- a/source/blender/io/gpencil/intern/gpencil_io_import_svg.cc +++ b/source/blender/io/gpencil/intern/gpencil_io_import_svg.cc @@ -42,7 +42,7 @@ #define NANOSVG_ALL_COLOR_KEYWORDS #define NANOSVG_IMPLEMENTATION -#include "nanosvg/nanosvg.h" +#include "nanosvg.h" using blender::MutableSpan; _______________________________________________ Bf-blender-cvs mailing list [email protected] List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
