From 10a10d3f272f5fda2f5ac257a2d82c50e5b22cc6 Mon Sep 17 00:00:00 2001
From: Ryan Oldenburg <guzba8@gmail.com>
Date: Sat, 19 Dec 2020 21:59:43 -0600
Subject: [PATCH] svg more basic shapes, more transforms

---
 src/pixie/fileformats/svg.nim   | 107 ++++++++++++++++++++++++++------
 src/pixie/paths.nim             |   6 ++
 tests/images/svg/circle01.png   | Bin 0 -> 13656 bytes
 tests/images/svg/circle01.svg   |  13 ++++
 tests/images/svg/line01.png     | Bin 0 -> 8954 bytes
 tests/images/svg/line01.svg     |  23 +++++++
 tests/images/svg/polygon01.png  | Bin 0 -> 22825 bytes
 tests/images/svg/polygon01.svg  |  18 ++++++
 tests/images/svg/polyline01.png | Bin 0 -> 11086 bytes
 tests/images/svg/polyline01.svg |  19 ++++++
 tests/images/svg/rect01.png     | Bin 0 -> 5347 bytes
 tests/images/svg/rect01.svg     |  13 ++++
 tests/images/svg/rect02.png     | Bin 0 -> 22298 bytes
 tests/images/svg/rect02.svg     |  17 +++++
 tests/test_svg.nim              |   6 ++
 15 files changed, 204 insertions(+), 18 deletions(-)
 create mode 100644 tests/images/svg/circle01.png
 create mode 100644 tests/images/svg/circle01.svg
 create mode 100644 tests/images/svg/line01.png
 create mode 100644 tests/images/svg/line01.svg
 create mode 100644 tests/images/svg/polygon01.png
 create mode 100644 tests/images/svg/polygon01.svg
 create mode 100644 tests/images/svg/polyline01.png
 create mode 100644 tests/images/svg/polyline01.svg
 create mode 100644 tests/images/svg/rect01.png
 create mode 100644 tests/images/svg/rect01.svg
 create mode 100644 tests/images/svg/rect02.png
 create mode 100644 tests/images/svg/rect02.svg

diff --git a/src/pixie/fileformats/svg.nim b/src/pixie/fileformats/svg.nim
index 90560f5..b2ffc57 100644
--- a/src/pixie/fileformats/svg.nim
+++ b/src/pixie/fileformats/svg.nim
@@ -49,22 +49,42 @@ proc decodeCtx(inherited: Ctx, node: XmlNode): Ctx =
   if transform == "":
     discard # Inherit
   else:
-    if transform.startsWith("matrix("):
-      let arr = transform[7..^2].split(",")
-      if arr.len != 6:
-        failInvalid()
-      var m = mat3()
-      m[0] = parseFloat(arr[0])
-      m[1] = parseFloat(arr[1])
-      m[3] = parseFloat(arr[2])
-      m[4] = parseFloat(arr[3])
-      m[6] = parseFloat(arr[4])
-      m[7] = parseFloat(arr[5])
-      result.transform = result.transform * m
-    else:
+    template failInvalidTransform(transform: string) =
       raise newException(
-        PixieError, "Unsupported SVG transform: " & transform & "."
-      )
+          PixieError, "Unsupported SVG transform: " & transform & "."
+        )
+
+    var remaining = transform
+    while remaining.len > 0:
+      let index = remaining.find(")")
+      if index == -1:
+        failInvalidTransform(transform)
+      let f = remaining[0 .. index].strip()
+      remaining = remaining[index + 1 .. ^1]
+
+      if f.startsWith("matrix("):
+        let arr = f[7 .. ^2].split(",")
+        if arr.len != 6:
+          failInvalidTransform(transform)
+        var m = mat3()
+        m[0] = parseFloat(arr[0])
+        m[1] = parseFloat(arr[1])
+        m[3] = parseFloat(arr[2])
+        m[4] = parseFloat(arr[3])
+        m[6] = parseFloat(arr[4])
+        m[7] = parseFloat(arr[5])
+        result.transform = result.transform * m
+      elif f.startsWith("translate("):
+        let
+          components = f[10 .. ^2].split(" ")
+          tx = parseFloat(components[0])
+          ty = parseFloat(components[1])
+        result.transform = result.transform * translate(vec2(tx, ty))
+      elif f.startsWith("rotate("):
+        let angle = parseFloat(f[7 .. ^2]) * -PI / 180
+        result.transform = result.transform * rotationMat3(angle)
+      else:
+        failInvalidTransform(transform)
 
 proc draw(
   img: Image, node: XmlNode, ctxStack: var seq[Ctx]
@@ -99,6 +119,53 @@ proc draw(
       )
       img.draw(strokeImg, bounds.xy)
 
+  of "line":
+    let
+      ctx = decodeCtx(ctxStack[^1], node)
+      x1 = parseFloat(node.attr("x1"))
+      y1 = parseFloat(node.attr("y1"))
+      x2 = parseFloat(node.attr("x2"))
+      y2 = parseFloat(node.attr("y2"))
+
+    let path = newPath()
+    path.moveTo(x1, y1)
+    path.lineTo(x2, y2)
+    path.closePath()
+
+    if ctx.fill != ColorRGBA():
+      img.fillPath(path, ctx.fill, ctx.transform)
+    if ctx.stroke != ColorRGBA() and ctx.strokeWidth > 0:
+      img.strokePath(path, ctx.stroke, ctx.strokeWidth, ctx.transform)
+
+  of "polyline", "polygon":
+    let
+      ctx = decodeCtx(ctxStack[^1], node)
+      points = node.attr("points")
+
+    var vecs: seq[Vec2]
+    for pair in points.split(" "):
+      let parts = pair.split(",")
+      if parts.len != 2:
+        failInvalid()
+      vecs.add(vec2(parseFloat(parts[0]), parseFloat(parts[1])))
+
+    if vecs.len == 0:
+      failInvalid()
+
+    let path = newPath()
+    path.moveTo(vecs[0])
+    for i in 1 ..< vecs.len:
+      path.lineTo(vecs[i])
+
+    # The difference between polyline and polygon is whether we close the path
+    if node.tag == "polygon":
+      path.closePath()
+
+    if ctx.fill != ColorRGBA():
+      img.fillPath(path, ctx.fill, ctx.transform)
+    if ctx.stroke != ColorRGBA() and ctx.strokeWidth > 0:
+      img.strokePath(path, ctx.stroke, ctx.strokeWidth, ctx.transform)
+
   of "rect":
     let
       ctx = decodeCtx(ctxStack[^1], node)
@@ -106,12 +173,14 @@ proc draw(
       y = parseFloat(node.attr("y"))
       width = parseFloat(node.attr("width"))
       height = parseFloat(node.attr("height"))
-      path = newPath()
+
+    let path = newPath()
     path.moveTo(x, y)
-    path.lineTo(x + width, x)
+    path.lineTo(x + width, y)
     path.lineTo(x + width, y + height)
     path.lineTo(x, y + height)
     path.closePath()
+
     if ctx.fill != ColorRGBA():
       img.fillPath(path, ctx.fill, ctx.transform)
     if ctx.stroke != ColorRGBA() and ctx.strokeWidth > 0:
@@ -126,13 +195,15 @@ proc draw(
       cy = parseFloat(node.attr("cy"))
       r = parseFloat(node.attr("r"))
       magic = (4.0 * (-1.0 + sqrt(2.0)) / 3) * r
-      path = newPath()
+
+    let path = newPath()
     path.moveTo(cx + r, cy)
     path.bezierCurveTo(cx + r, cy + magic, cx + magic, cy + r, cx, cy + r)
     path.bezierCurveTo(cx - magic, cy + r, cx - r, cy + magic, cx - r, cy)
     path.bezierCurveTo(cx - r, cy - magic, cx - magic, cy - r, cx, cy - r)
     path.bezierCurveTo(cx + magic, cy - r, cx + r, cy - magic, cx + r, cy)
     path.closePath()
+
     let d = $path
     if ctx.fill != ColorRGBA():
       let (bounds, fillImg) = fillPathBounds(d, ctx.fill, ctx.transform)
diff --git a/src/pixie/paths.nim b/src/pixie/paths.nim
index eebebca..9500e05 100644
--- a/src/pixie/paths.nim
+++ b/src/pixie/paths.nim
@@ -828,11 +828,17 @@ proc moveTo*(path: Path, x, y: float32) =
   path.commands.add PathCommand(kind: Move, numbers: @[x, y])
   path.at = vec2(x, y)
 
+proc moveTo*(path: Path, pos: Vec2) =
+  path.moveTo(pos.x, pos.y)
+
 proc lineTo*(path: Path, x, y: float32) =
   ## Connects the last point in the subpath to the (x, y) coordinates with a straight line.
   path.commands.add PathCommand(kind: Line, numbers: @[x, y])
   path.at = vec2(x, y)
 
+proc lineTo*(path: Path, pos: Vec2) =
+  path.lineTo(pos.x, pos.y)
+
 proc bezierCurveTo*(path: Path, x1, y1, x2, y2, x3, y3: float32) =
   ## Adds a cubic Bézier curve to the path. It requires three points. The first two points are control points and the third one is the end point. The starting point is the last point in the current path, which can be changed using moveTo() before creating the Bézier curve.
   path.commands.add(PathCommand(kind: Cubic, numbers: @[
diff --git a/tests/images/svg/circle01.png b/tests/images/svg/circle01.png
new file mode 100644
index 0000000000000000000000000000000000000000..d4d4ddfe41bc8acf69065ef33b0bc89ec43d14cb
GIT binary patch
literal 13656
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
VB3G}E0$)I1e&%(o>eGm?{tqfc^;iG^

literal 0
HcmV?d00001

diff --git a/tests/images/svg/circle01.svg b/tests/images/svg/circle01.svg
new file mode 100644
index 0000000..bf71ce9
--- /dev/null
+++ b/tests/images/svg/circle01.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" standalone="no"?>
+<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+     xmlns="http://www.w3.org/2000/svg" version="1.1">
+  <desc>Example circle01 - circle filled with red and stroked with blue</desc>
+
+  <!-- Show outline of viewport using 'rect' element -->
+  <rect x="1" y="1" width="1198" height="398"
+        fill="none" stroke="blue" stroke-width="2"/>
+
+  <circle cx="600" cy="200" r="100"
+        fill="red" stroke="blue" stroke-width="10"  />
+</svg>
+
diff --git a/tests/images/svg/line01.png b/tests/images/svg/line01.png
new file mode 100644
index 0000000000000000000000000000000000000000..4ee524a9b0bb6942c4bffba8d16b518cd5eac1f0
GIT binary patch
literal 8954
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
F_&?a1-}V3i

literal 0
HcmV?d00001

diff --git a/tests/images/svg/line01.svg b/tests/images/svg/line01.svg
new file mode 100644
index 0000000..bb1d2bf
--- /dev/null
+++ b/tests/images/svg/line01.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" standalone="no"?>
+<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+     xmlns="http://www.w3.org/2000/svg" version="1.1">
+  <desc>Example line01 - lines expressed in user coordinates</desc>
+
+  <!-- Show outline of viewport using 'rect' element -->
+  <rect x="1" y="1" width="1198" height="398"
+        fill="none" stroke="blue" stroke-width="2" />
+
+  <g stroke="green" >
+    <line x1="100" y1="300" x2="300" y2="100"
+            stroke-width="5"  />
+    <line x1="300" y1="300" x2="500" y2="100"
+            stroke-width="10"  />
+    <line x1="500" y1="300" x2="700" y2="100"
+            stroke-width="15"  />
+    <line x1="700" y1="300" x2="900" y2="100"
+            stroke-width="20"  />
+    <line x1="900" y1="300" x2="1100" y2="100"
+            stroke-width="25"  />
+  </g>
+</svg>
+
diff --git a/tests/images/svg/polygon01.png b/tests/images/svg/polygon01.png
new file mode 100644
index 0000000000000000000000000000000000000000..60d4d9163586d7bc77fd1d7f222465f90b57d130
GIT binary patch
literal 22825
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

literal 0
HcmV?d00001

diff --git a/tests/images/svg/polygon01.svg b/tests/images/svg/polygon01.svg
new file mode 100644
index 0000000..900cf65
--- /dev/null
+++ b/tests/images/svg/polygon01.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" standalone="no"?>
+<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+     xmlns="http://www.w3.org/2000/svg" version="1.1">
+  <desc>Example polygon01 - star and hexagon</desc>
+
+  <!-- Show outline of viewport using 'rect' element -->
+  <rect x="1" y="1" width="1198" height="398"
+        fill="none" stroke="blue" stroke-width="2" />
+
+  <polygon fill="red" stroke="blue" stroke-width="10" 
+            points="350,75  379,161 469,161 397,215
+                    423,301 350,250 277,301 303,215
+                    231,161 321,161" />
+  <polygon fill="lime" stroke="blue" stroke-width="10" 
+            points="850,75  958,137.5 958,262.5
+                    850,325 742,262.6 742,137.5" />
+</svg>
+
diff --git a/tests/images/svg/polyline01.png b/tests/images/svg/polyline01.png
new file mode 100644
index 0000000000000000000000000000000000000000..4b8d0c7aeee8230fd05c8472730c57d965c76146
GIT binary patch
literal 11086
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

literal 0
HcmV?d00001

diff --git a/tests/images/svg/polyline01.svg b/tests/images/svg/polyline01.svg
new file mode 100644
index 0000000..9ac958d
--- /dev/null
+++ b/tests/images/svg/polyline01.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" standalone="no"?>
+<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+     xmlns="http://www.w3.org/2000/svg" version="1.1">
+  <desc>Example polyline01 - increasingly larger bars</desc>
+
+  <!-- Show outline of viewport using 'rect' element -->
+  <rect x="1" y="1" width="1198" height="398"
+        fill="none" stroke="blue" stroke-width="2" />
+
+  <polyline fill="none" stroke="blue" stroke-width="10" 
+            points="50,375
+                    150,375 150,325 250,325 250,375
+                    350,375 350,250 450,250 450,375
+                    550,375 550,175 650,175 650,375
+                    750,375 750,100 850,100 850,375
+                    950,375 950,25 1050,25 1050,375
+                    1150,375" />
+</svg>
+
diff --git a/tests/images/svg/rect01.png b/tests/images/svg/rect01.png
new file mode 100644
index 0000000000000000000000000000000000000000..7fcfcbb4233f8e8a2573be770b8a2e845a085350
GIT binary patch
literal 5347
zcmcgwc~p~E7QYFrAVNTeL+!}mP>nDwie>8{IB@}oAc1oP1<VndgCGMgD3ryogRNL7
zSWTs1GB8%eYS0)5k1WDBqjp9VOIr=J6^Lt>AfT2ZsD!zX5RDZfq(lGs&dZnY-Sypj
zfA_vUtGLT8%<Rnoz#?b`hX-IN0buMkHO7A$s!L)4rXLI91V*GY?%&uGa^BsJ`eJrG
zYZ-r60d2NveagSgHtn6!Muh~h1Ec2;e&91TBlOsvBi$d$c!JR6O7F9cMe{CR%;Z}{
z8px<cqb}}k_Gb^?vO0<KfWM;ntGKYWBGJ-oKi>L-#8}KoqU}dr?BXoMo$uwRvm`Q0
zqAD!=EuVplyC=gO7wYd*B5~;*WGd@<vM1bA7LJKAUic5tc7`rweeaD?_QTW=nu#Cz
z3Cx)QsXU<F=ErA0WS<G-R4InV*yU12giFh~TvUw!ayRGr?7r|#xp`|^Er?WiV{P?b
z6bJA}8}vPZT`6VcUXMT8s(G^Zvh}ZVuGRj9e4so`iB)5e;YXrc!&<WKr+M+``lo;E
za7dPBK;8=iwTyc~8h#wHh-!3EHS%QHLOrA+mz*#VMl|`xzn^Rsrl=(c0-rgI>*x_(
z<d2x3%&8E6?s4(WyrXIDgc{<kp7{jd#_+o&4#n*ZU@P+V(Oup{QsBSkf;6|vHe*)x
ziPwm5{!|hNuW*%C2q{_($+jsK;{8V^NIk^sO%X`Dn<jWpBf<;jK{~I=w^X0gsueuR
zt2vu)iAg5EZ=d&Zety3^cTuYCsT;;{SRmyd9AQcc`|eDI(wJp=k+1>NY8y)eN>7$K
z^*e?+<%$l9;kbY`=0hz;=Qf*D;Ei$SP<5kmXkjcUt&3UtL${6OrnuR&^9)n&hb(5z
z;WPH0`GlGQPwOjGPq#9Ay#&&Rt0d3TT0ovRklF%N4`y^~0c8|`=|JzWmVoy%<okPD
zNq5gmfmE$HsSeYU%4I$ohfyod2AR#9knYH5w1gr7W^}m-xhy6M;Ikby9yD}O?q)Vz
zie6wD-L$X7nC4#do!h_d(@T4xi|ZrI{}a}WW4Xq#94-0>Cgt~YQC}<=EnH+)rdBDy
z51Hj4vyJ%NNAn+}VTbW~iJ&u`;S6@yqZgbM3!D~OP@<!0-0mNE`)wF)qAlLGCFth}
z6ALKBNKZgPV`&XvqM&b3$WN%%3VeP}U|^<93XWR$Kod^&UbCm!R|=%UQYKwUjNHE2
zl}WR7QF~lFpFG9`?BcQ&uAw9KmCk&0vwU+f`|_u3=vq;=bxVrvcaAU%4^n^cji|BC
zfuE8n+Fw_H?G6XFR|?XKNuFL0G@$0(J0Eykz&j8g4s9%5&ty#Fnw_kJqpVLuTmG8w
z?woL4<in!c+41dnwd2!!Db18S{U5}21wr<`eKkATEB|Z{eqjpXjjt-+n9G#--A#2}
zKnmeB`(Y327kgTE@>k!=6iEHMe~r+vktkO(?IPF;^Ji70U+b7YM89^pUR?^_OJ1F!
z<HousrTGaSN06cU+Qco6P#4}*dzm2akL3)Sr4^2OFV_H_C1{EUA!rDPp$H7^&kvLe
zP3dl|-4BUJeG?${LY8-ekk_;&(G2{?DL*=imOEeYzv6Vdtiq*aBXn_4XlSuo==qxe
zXoT)UyL2u^TH)~X+Qs3(;VVuHt0uifS+Q8#*zxC{{5o-{dKZ*2*i$Ul^b|eKyK_Hd
zSGZIj0m+=|tC!Bj2=gJ8coA{t7kRSR%c${~%xB=~$`Gz0e@AfCjttTVz3vI#>-}eW
za@p}di;Sq(5vYC{o~RG8&zUJtIgUs|tC55!i}{-dNj|nT`5-(viW|b<FCPn;#t4TO
zpsaJga`nA^UyFDLu6V-sLo%P5O0|tmH={RbY{XO^4QO?WbS-2S7a4+E^WD4EaluiA
z?S}NU>xf!!PYyKuPv0BX<eQ}FRyz)A`3=D)v(DR=q3&FsHx3iE$3;yr*h9LVJf5tQ
z;5}*RsmZH|suHSfl|q<Rsz#Cuaot-QB=OMd2e7+&RUe_Lt=g4u^u{AuObnZXnbcY{
z>Db)s$5b7v*$|sH>1avil$k{`XxC<^)89^d{Z$Gf7KgQAxF>VZ<kct$dLWh!3^eUN
z@c3pkbVafiS4s0W-0WV_DvatTS<hI1-k-MRL&K`7tq;G@4J@&_m)XoH{yI~x9{%}j
z4Kf<uF`_+4zgmNncNq>2FV6(n;y)iNuubn3VbLqZI;%RU^naAWiO%Z0Z6JwjWnFGA
z?4M0pekAP}&WB-FSIwR2I1|=&`yPtU9{7aWTZCER$vOo}-mMuh1qC;AT%ciBx>3MB
zoI@(}$N+Q_5^$>R-I#P?P2%%G<eOG%@g|e<cb?r47~7Dk@T5Q*D;mjpeAQ`)m&|!!
z@{zRRd%bQRK;C1@FA9$8e_K=7Q0xT8@P8XZFOIT1^qMLioB`xG&G{=d_>RJLxp^3#
zXzN(G`)N>x*ez2J-Bs@+HMCXoWP=0>Cvt0I#VR;1=&KIV>!OHWYz0FkmGmQTbOR`K
zjz5>IhsjV*u6jC;3i|%3$GwHQDH7X7u@%QPZ92Z|6rgmADvKspCZHmhR1+o7a*(%T
zeD4}9zB`P>X}Ongdwp4N*<tdk`#*_s&Q6QB*6du8{u`EU(Q0zj#Glt{`S?uo54^O@
Q%|x-FrCiR5CH%ks4~nywssI20

literal 0
HcmV?d00001

diff --git a/tests/images/svg/rect01.svg b/tests/images/svg/rect01.svg
new file mode 100644
index 0000000..d61727e
--- /dev/null
+++ b/tests/images/svg/rect01.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" standalone="no"?>
+<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+     xmlns="http://www.w3.org/2000/svg" version="1.1">
+  <desc>Example rect01 - rectangle with sharp corners</desc>
+
+  <!-- Show outline of viewport using 'rect' element -->
+  <rect x="1" y="1" width="1198" height="398"
+        fill="none" stroke="blue" stroke-width="2"/>
+
+  <rect x="400" y="100" width="400" height="200"
+        fill="yellow" stroke="navy" stroke-width="10"  />
+</svg>
+
diff --git a/tests/images/svg/rect02.png b/tests/images/svg/rect02.png
new file mode 100644
index 0000000000000000000000000000000000000000..ecf92f2034de263c4eb9a4d86ab39bc779bc3e37
GIT binary patch
literal 22298
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%0AF@u|r$hNpy+(Fz}rOCV)VNLTN#T9`Cl$x=Brn
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
CH=El4

literal 0
HcmV?d00001

diff --git a/tests/images/svg/rect02.svg b/tests/images/svg/rect02.svg
new file mode 100644
index 0000000..b943ff4
--- /dev/null
+++ b/tests/images/svg/rect02.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" standalone="no"?>
+<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+     xmlns="http://www.w3.org/2000/svg" version="1.1">
+  <desc>Example rect02 - rounded rectangles</desc>
+
+  <!-- Show outline of viewport using 'rect' element -->
+  <rect x="1" y="1" width="1198" height="398"
+        fill="none" stroke="blue" stroke-width="2"/>
+
+  <rect x="100" y="100" width="400" height="200" rx="50"
+        fill="green" />
+
+  <g transform="translate(700 210) rotate(-30)">
+    <rect x="0" y="0" width="400" height="200" rx="50"
+          fill="none" stroke="purple" stroke-width="30" />
+  </g>
+</svg>
diff --git a/tests/test_svg.nim b/tests/test_svg.nim
index 435fbae..9356964 100644
--- a/tests/test_svg.nim
+++ b/tests/test_svg.nim
@@ -1,6 +1,12 @@
 import pixie/fileformats/svg, pixie, strformat
 
 const files = [
+  "line01",
+  "polyline01",
+  "polygon01",
+  "rect01",
+  "rect02",
+  "circle01",
   "triangle01",
   "quad01",
   "Ghostscript_Tiger"