summaryrefslogtreecommitdiffstats
path: root/generic/nanosvg.h
diff options
context:
space:
mode:
authoroehhar <harald.oehlmann@elmicron.de>2022-11-22 15:21:46 (GMT)
committeroehhar <harald.oehlmann@elmicron.de>2022-11-22 15:21:46 (GMT)
commitb11488bb157992950cbcb109377b281c4c79ad45 (patch)
tree8d161a2e27c61a807ff34caec846e769d7037438 /generic/nanosvg.h
parent4dd4557d1b695615fc7b2122831f95b116c887d2 (diff)
downloadtk-b11488bb157992950cbcb109377b281c4c79ad45.zip
tk-b11488bb157992950cbcb109377b281c4c79ad45.tar.gz
tk-b11488bb157992950cbcb109377b281c4c79ad45.tar.bz2
nanosvg#167: complex path rendered wrong: https://github.com/memononen/nanosvg/commit/f0a3e1034dd22e2e87e5db22401e44998383124e
Diffstat (limited to 'generic/nanosvg.h')
-rw-r--r--generic/nanosvg.h19
1 files changed, 18 insertions, 1 deletions
diff --git a/generic/nanosvg.h b/generic/nanosvg.h
index d3cfba2..862b7d4 100644
--- a/generic/nanosvg.h
+++ b/generic/nanosvg.h
@@ -1266,6 +1266,19 @@ static const char* nsvg__parseNumber(const char* s, char* it, const int size)
return s;
}
+static const char* nsvg__getNextPathItemWhenArcFlag(const char* s, char* it)
+{
+ it[0] = '\0';
+ while (*s && (nsvg__isspace(*s) || *s == ',')) s++;
+ if (!*s) return s;
+ if (*s == '0' || *s == '1') {
+ it[0] = *s++;
+ it[1] = '\0';
+ return s;
+ }
+ return s;
+}
+
static const char* nsvg__getNextPathItem(const char* s, char* it)
{
it[0] = '\0';
@@ -2374,7 +2387,11 @@ static void nsvg__parsePath(NSVGparser* p, const char** attr)
nargs = 0;
while (*s) {
- s = nsvg__getNextPathItem(s, item);
+ item[0] = '\0';
+ if ((cmd == 'A' || cmd == 'a') && (nargs == 3 || nargs == 4))
+ s = nsvg__getNextPathItemWhenArcFlag(s, item);
+ if (!*item)
+ s = nsvg__getNextPathItem(s, item);
if (!*item) break;
if (cmd != '\0' && nsvg__isCoordinate(item)) {
if (nargs < 10)