Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/nanosvg/patches/NanoSVG.diff')
-rw-r--r--extern/nanosvg/patches/NanoSVG.diff86
1 files changed, 86 insertions, 0 deletions
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;