mirror of
https://github.com/reanimate/reanimate.git
synced 2026-09-14 09:32:22 +00:00
Deploying to gh-pages from @ cb5529aff8 🚀
This commit is contained in:
parent
b897748043
commit
e81acda215
6 changed files with 476 additions and 469 deletions
|
|
@ -101,7 +101,7 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
|||
<td align="right">5%</td><td>1/19</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/53</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">4%</td><td>39/852</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="4%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<tr>
|
||||
<td> <tt>module <a href="reanimate-0.4.3.0-inplace/Reanimate.Scene.hs.html">reanimate-0.4.3.0-inplace/Reanimate.Scene</a></tt></td>
|
||||
<td align="right">27%</td><td>40/144</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">55%</td><td>15/27</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="55%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">32%</td><td>545/1696</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="32%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<td align="right">27%</td><td>40/146</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">55%</td><td>15/27</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="55%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">31%</td><td>545/1707</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="31%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<tr>
|
||||
<td> <tt>module <a href="reanimate-0.4.3.0-inplace/Reanimate.Svg.hs.html">reanimate-0.4.3.0-inplace/Reanimate.Svg</a></tt></td>
|
||||
<td align="right">38%</td><td>5/13</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="38%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">18%</td><td>15/80</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="18%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">41%</td><td>323/777</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="41%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
|
|
@ -125,5 +125,5 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
|||
<td align="right">100%</td><td>6/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">50%</td><td>1/2</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="50%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">95%</td><td>43/45</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="95%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<tr></tr><tr style="background: #e0e0e0">
|
||||
<th align=left> Program Coverage Total</tt></th>
|
||||
<td align="right">30%</td><td>248/814</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/830</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4682/15820</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<td align="right">30%</td><td>248/816</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/830</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4682/15831</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
</table></body></html>
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
|||
<td align="right">90%</td><td>28/31</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="90%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">57%</td><td>8/14</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="57%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">87%</td><td>298/341</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="87%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<tr>
|
||||
<td> <tt>module <a href="reanimate-0.4.3.0-inplace/Reanimate.Scene.hs.html">reanimate-0.4.3.0-inplace/Reanimate.Scene</a></tt></td>
|
||||
<td align="right">27%</td><td>40/144</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">55%</td><td>15/27</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="55%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">32%</td><td>545/1696</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="32%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<td align="right">27%</td><td>40/146</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">55%</td><td>15/27</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="55%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">31%</td><td>545/1707</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="31%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<tr>
|
||||
<td> <tt>module <a href="reanimate-0.4.3.0-inplace/Reanimate.ColorComponents.hs.html">reanimate-0.4.3.0-inplace/Reanimate.ColorComponents</a></tt></td>
|
||||
<td align="right">75%</td><td>9/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="75%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">50%</td><td>1/2</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="50%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">81%</td><td>135/166</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="81%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
|
|
@ -125,5 +125,5 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
|||
<td align="right">15%</td><td>3/20</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">- </td><td>0/0</td><td width=100> </td><td align="right">14%</td><td>7/49</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="14%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<tr></tr><tr style="background: #e0e0e0">
|
||||
<th align=left> Program Coverage Total</tt></th>
|
||||
<td align="right">30%</td><td>248/814</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/830</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4682/15820</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<td align="right">30%</td><td>248/816</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/830</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4682/15831</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
</table></body></html>
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
|||
<td align="right">33%</td><td>5/15</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="33%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">5%</td><td>1/20</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">40%</td><td>133/325</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="40%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<tr>
|
||||
<td> <tt>module <a href="reanimate-0.4.3.0-inplace/Reanimate.Scene.hs.html">reanimate-0.4.3.0-inplace/Reanimate.Scene</a></tt></td>
|
||||
<td align="right">27%</td><td>40/144</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">55%</td><td>15/27</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="55%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">32%</td><td>545/1696</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="32%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<td align="right">27%</td><td>40/146</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">55%</td><td>15/27</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="55%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">31%</td><td>545/1707</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="31%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<tr>
|
||||
<td> <tt>module <a href="reanimate-0.4.3.0-inplace/Geom2D.CubicBezier.Linear.hs.html">reanimate-0.4.3.0-inplace/Geom2D.CubicBezier.Linear</a></tt></td>
|
||||
<td align="right">20%</td><td>20/99</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="20%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">5%</td><td>2/36</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">28%</td><td>102/356</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="28%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
|
|
@ -125,5 +125,5 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
|||
<td align="right">0%</td><td>0/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/61</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
|
||||
<tr></tr><tr style="background: #e0e0e0">
|
||||
<th align=left> Program Coverage Total</tt></th>
|
||||
<td align="right">30%</td><td>248/814</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/830</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4682/15820</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<td align="right">30%</td><td>248/816</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/830</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4682/15831</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
</table></body></html>
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
|||
<td align="right">33%</td><td>1/3</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="33%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/14</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">21%</td><td>28/128</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="21%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<tr>
|
||||
<td> <tt>module <a href="reanimate-0.4.3.0-inplace/Reanimate.Scene.hs.html">reanimate-0.4.3.0-inplace/Reanimate.Scene</a></tt></td>
|
||||
<td align="right">27%</td><td>40/144</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">55%</td><td>15/27</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="55%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">32%</td><td>545/1696</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="32%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<td align="right">27%</td><td>40/146</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">55%</td><td>15/27</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="55%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">31%</td><td>545/1707</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="31%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<tr>
|
||||
<td> <tt>module <a href="reanimate-0.4.3.0-inplace/Reanimate.PolyShape.hs.html">reanimate-0.4.3.0-inplace/Reanimate.PolyShape</a></tt></td>
|
||||
<td align="right">22%</td><td>8/35</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="22%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">27%</td><td>13/48</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">18%</td><td>127/691</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="18%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
|
|
@ -125,5 +125,5 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
|||
<td align="right">0%</td><td>0/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/61</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
|
||||
<tr></tr><tr style="background: #e0e0e0">
|
||||
<th align=left> Program Coverage Total</tt></th>
|
||||
<td align="right">30%</td><td>248/814</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/830</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4682/15820</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
<td align="right">30%</td><td>248/816</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/830</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4682/15831</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||
</table></body></html>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const snippets = [{"title": "Hello World","url": "https://reanimate.clozecards.com/LMvAjyzwwRi/30.svg","code": "-- This is the interactive Reanimate Playground\n\n-- Here you can write Haskell code and have it\n-- render directly to your browser.\n\n-- There are more examples available if you click\n-- on the 'collections' icon to the far right\n\nanimation :: Animation\nanimation = docEnv drawBox\n"}
|
||||
const snippets = [{"title": "Hello World","url": "https://reanimate.clozecards.com/NIHR92zCsdg/298.svg","code": "-- This is the interactive Reanimate Playground\n\n-- Here you can write Haskell code and have it\n-- render directly to your browser.\n\n-- There are more examples available if you click\n-- on the 'collections' icon to the far right\n\nanimation :: Animation\nanimation = scene $ do\n newSpriteSVG_ $ mkBackground \"white\"\n logo <- oNew $ center $ latex \"Reanimate\"\n oModify logo $ oScale .~ 3\n\n oShowWith logo oFadeIn\n oTweenS logo 1 $ \\t -> do\n oScale %= \\prev -> fromToS prev 2 t\n oTopY %= \\prev -> fromToS prev screenTop t\n\n haskell <- oNew $ center $ withStrokeColor \"black\" $ latex \"Haskell\"\n oModify haskell $ oScale .~ 3\n oShowWith haskell oDraw\n oTweenS haskell 1 $ \\t -> do\n oScale %= \\prev -> fromToS prev 2 t\n oBottomY %= \\prev -> fromToS prev screenBottom t\n\n features <- mapM (oNew . scale 3 . center . latex)\n [\"SVG\", \"\\\\LaTeX\", \"Animation\", \"Windows\", \"Linux\", \"MacOS\", \"Browsers\"]\n oShowWith (head features) $ adjustDuration (*3) . oScaleIn\n featureChain features\n\n wait (-1)\n fork $ oHideWith logo oFadeOut\n fork $ oHideWith haskell oFadeOut\n\nreplace :: Object s a -> Object s b -> Scene s ()\nreplace a b = do\n fork $ oHideWith a $ adjustDuration (*3) . oScaleOut\n wait 0.2\n oShowWith b $ adjustDuration (*3) . oScaleIn\n\nfeatureChain :: [Object s a] -> Scene s ()\nfeatureChain (x:y:xs) = do\n replace x y\n featureChain (y:xs)\nfeatureChain [x] = do\n oHideWith x $ adjustDuration (*3) . oScaleOut\nfeatureChain [] = return ()\n"}
|
||||
,{"title": "Composition","url": "https://reanimate.clozecards.com/ECv3cbsbuMV/150.svg","code": "animation :: Animation\nanimation = docEnv $ sceneAnimation $ do\n play $ drawBox `parA` drawCircle\n & label \"parA\"\n play $ drawBox `seqA` drawCircle\n & label \"seqA\"\n play $ drawBox `andThen` drawCircle\n & label \"andThen\"\n\nlabel txt = addStatic $\n withFillOpacity 1 $ withStrokeWidth 0 $\n withFillColor \"black\" $\n translate screenLeft (screenBottom+0.2) $\n latex txt\n"}
|
||||
,{"title": "Color Maps","url": "https://reanimate.clozecards.com/Ezuf27J2YrF/60.svg","code": "animation :: Animation\nanimation = docEnv $ sceneAnimation $ do\n play $ staticFrame 1 (showColorMap parula)\n & label \"Parula\"\n play $ staticFrame 1 (showColorMap viridis)\n & label \"Viridis\"\n play $ staticFrame 1 (showColorMap turbo)\n & label \"Turbo\"\n play $ staticFrame 1 (showColorMap greyscale)\n & label \"Greyscale\"\n\nlabel txt = overlay $\n withFillOpacity 1 $ withStrokeWidth 0 $\n withFillColor \"white\" $\n translate screenLeft (screenBottom+0.2) $\n latex txt\n\noverlay svg ani = ani `parA` staticFrame (duration ani) svg\n"}
|
||||
,{"title": "Try it live","url": "https://reanimate.clozecards.com/OwjMi4FCJ4Z/90.svg","code": "background = \"lightblue\"\n\nshape :: SVG\nshape = mkCircle 4\n--shape = mkRect 6 6\n--shape = mkLine (screenLeft, screenBottom) (screenRight, screenTop)\n\nanimation :: Animation\nanimation = docEnv $\n addStatic (mkBackground background) $\n playThenReverseA $\n signalA (curveS 2) $\n setDuration 3 $ animate $ \\t ->\n partialSvg t $ pathify shape\n"}
|
||||
|
|
@ -9,4 +9,4 @@ const snippets = [{"title": "Hello World","url": "https://reanimate.clozecards.c
|
|||
,{"title": "Object Positions","url": "https://reanimate.clozecards.com/Mf4zcImo+I7/195.svg","code": "env =\n addStatic (mkBackground \"white\") .\n mapA (withStrokeColor \"black\")\n\nanimation :: Animation\nanimation = env $\n sceneAnimation $ do\n -- Configure objects\n txt <- newText \"Center\"\n top <- newText \"Top\"\n oModifyS top $ \n oTopY .= screenTop\n topR <- newText \"Top right\"\n oModifyS topR $ do\n oTopY .= screenTop\n oRightX .= screenRight\n botR <- newText \"Bottom right\"\n oModifyS botR $ do\n oTranslate .= (0, screenBottom+0.5)\n oRightX .= screenRight\n botL <- newText \"Bottom left\"\n oModifyS botL $ do\n oTranslate .= (0, screenBottom+0.5)\n oLeftX .= screenLeft\n topL <- newText \"Top left\"\n oModifyS topL $ do\n oTopY .= screenTop\n oLeftX .= screenLeft\n -- Show objects\n oShow txt\n wait 1\n switchTo txt top\n switchTo top topR\n switchTo topR botR\n switchTo botR botL\n switchTo botL topL\n switchTo topL txt\n\nswitchTo src dst = do\n fork $ oHideWith src oFadeOut\n oShowWith dst oFadeIn\n wait 1\n\nnewText txt =\n newObject $ scale 1.5 $ centerX $ latex txt\n"}
|
||||
,{"title": "Camera","url": "https://reanimate.clozecards.com/Hcx00P+aeph/150.svg","code": "animation :: Animation\nanimation = docEnv $ mapA (withFillOpacity 1) $ sceneAnimation $ do\n cam <- newObject Camera\n\n txt <- newObject $ center $ latex \"Fixed (non-cam)\"\n oModifyS txt $ do\n oTopY .= screenTop \n oZIndex .= 2\n\n circle <- newObject $ withFillColor \"blue\" $ mkCircle 1\n cameraAttach cam circle\n circleRight <- oRead circle oRightX\n\n box <- newObject $ withFillColor \"green\" $ mkRect 2 2\n cameraAttach cam box\n oModify box $ oLeftX .~ circleRight\n boxCenter <- oRead box oCenterXY\n\n small <- newObject $ center $ latex \"This text is very small\"\n cameraAttach cam small\n oModifyS small $ do\n oCenterXY .= boxCenter\n oScale .= 0.1\n \n oShow txt\n oShow small\n oShow circle\n oShow box\n\n wait 1\n\n cameraFocus cam boxCenter\n waitOn $ do\n fork $ cameraPan cam 3 boxCenter\n fork $ cameraZoom cam 3 15\n \n wait 2\n cameraZoom cam 3 1\n cameraPan cam 1 (0,0)\n"}
|
||||
];
|
||||
const playgroundVersion = "2020-09-02 (3a678)";
|
||||
const playgroundVersion = "2020-09-02 (eff3b)";
|
||||
|
|
|
|||
|
|
@ -858,11 +858,11 @@ span.spaces { background: white }
|
|||
<span class="lineno"> 839 </span>
|
||||
<span class="lineno"> 840 </span>-- | Object's scale. Default: 1
|
||||
<span class="lineno"> 841 </span>oScale :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 842 </span><span class="decl"><span class="nottickedoff">oScale = lens _oScale $ \obj val -> obj { _oScale = val }</span></span>
|
||||
<span class="lineno"> 842 </span><span class="decl"><span class="nottickedoff">oScale = lens _oScale $ \obj val -> oComputeBB obj { _oScale = val }</span></span>
|
||||
<span class="lineno"> 843 </span>
|
||||
<span class="lineno"> 844 </span>-- | Origin point for scaling. Default: \<0,0\>
|
||||
<span class="lineno"> 845 </span>oScaleOrigin :: Lens' (ObjectData a) (Double, Double)
|
||||
<span class="lineno"> 846 </span><span class="decl"><span class="nottickedoff">oScaleOrigin = lens _oScaleOrigin $ \obj val -> obj { _oScaleOrigin = val }</span></span>
|
||||
<span class="lineno"> 846 </span><span class="decl"><span class="nottickedoff">oScaleOrigin = lens _oScaleOrigin $ \obj val -> oComputeBB obj { _oScaleOrigin = val }</span></span>
|
||||
<span class="lineno"> 847 </span>
|
||||
<span class="lineno"> 848 </span>-- Smart lenses
|
||||
<span class="lineno"> 849 </span>
|
||||
|
|
@ -870,473 +870,480 @@ span.spaces { background: white }
|
|||
<span class="lineno"> 851 </span>oValue :: Renderable a => Lens' (ObjectData a) a
|
||||
<span class="lineno"> 852 </span><span class="decl"><span class="nottickedoff">oValue = lens _oValueRef $ \obj newVal -></span>
|
||||
<span class="lineno"> 853 </span><span class="spaces"> </span><span class="nottickedoff">let svg = toSVG newVal</span>
|
||||
<span class="lineno"> 854 </span><span class="spaces"> </span><span class="nottickedoff">in obj</span>
|
||||
<span class="lineno"> 854 </span><span class="spaces"> </span><span class="nottickedoff">in oComputeBB obj</span>
|
||||
<span class="lineno"> 855 </span><span class="spaces"> </span><span class="nottickedoff">{ _oValueRef = newVal</span>
|
||||
<span class="lineno"> 856 </span><span class="spaces"> </span><span class="nottickedoff">, _oSVG = svg</span>
|
||||
<span class="lineno"> 857 </span><span class="spaces"> </span><span class="nottickedoff">, _oBB = boundingBox svg }</span></span>
|
||||
<span class="lineno"> 858 </span>
|
||||
<span class="lineno"> 859 </span>-- | Derived location of the top-most point of an object + margin.
|
||||
<span class="lineno"> 860 </span>oTopY :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 861 </span><span class="decl"><span class="nottickedoff">oTopY = lens getter setter</span>
|
||||
<span class="lineno"> 862 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 863 </span><span class="spaces"> </span><span class="nottickedoff">getter obj =</span>
|
||||
<span class="lineno"> 864 </span><span class="spaces"> </span><span class="nottickedoff">let top = obj ^. oMarginTop</span>
|
||||
<span class="lineno"> 865 </span><span class="spaces"> </span><span class="nottickedoff">miny = obj ^. oBBMinY</span>
|
||||
<span class="lineno"> 866 </span><span class="spaces"> </span><span class="nottickedoff">h = obj ^. oBBHeight</span>
|
||||
<span class="lineno"> 867 </span><span class="spaces"> </span><span class="nottickedoff">dy = obj ^. oTranslate . _2</span>
|
||||
<span class="lineno"> 868 </span><span class="spaces"> </span><span class="nottickedoff">in dy+miny+h+top</span>
|
||||
<span class="lineno"> 869 </span><span class="spaces"> </span><span class="nottickedoff">setter obj val =</span>
|
||||
<span class="lineno"> 870 </span><span class="spaces"> </span><span class="nottickedoff">obj & (oTranslate . _2) +~ val-getter obj</span></span>
|
||||
<span class="lineno"> 871 </span>
|
||||
<span class="lineno"> 872 </span>-- | Derived location of the bottom-most point of an object + margin.
|
||||
<span class="lineno"> 873 </span>oBottomY :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 874 </span><span class="decl"><span class="nottickedoff">oBottomY = lens getter setter</span>
|
||||
<span class="lineno"> 875 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 876 </span><span class="spaces"> </span><span class="nottickedoff">getter obj =</span>
|
||||
<span class="lineno"> 877 </span><span class="spaces"> </span><span class="nottickedoff">let bot = obj ^. oMarginBottom</span>
|
||||
<span class="lineno"> 878 </span><span class="spaces"> </span><span class="nottickedoff">miny = obj ^. oBBMinY</span>
|
||||
<span class="lineno"> 879 </span><span class="spaces"> </span><span class="nottickedoff">dy = obj ^. oTranslate . _2</span>
|
||||
<span class="lineno"> 880 </span><span class="spaces"> </span><span class="nottickedoff">in dy+miny-bot</span>
|
||||
<span class="lineno"> 881 </span><span class="spaces"> </span><span class="nottickedoff">setter obj val =</span>
|
||||
<span class="lineno"> 882 </span><span class="spaces"> </span><span class="nottickedoff">obj & (oTranslate . _2) +~ val-getter obj</span></span>
|
||||
<span class="lineno"> 883 </span>
|
||||
<span class="lineno"> 884 </span>-- | Derived location of the left-most point of an object + margin.
|
||||
<span class="lineno"> 885 </span>oLeftX :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 886 </span><span class="decl"><span class="nottickedoff">oLeftX = lens getter setter</span>
|
||||
<span class="lineno"> 887 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 888 </span><span class="spaces"> </span><span class="nottickedoff">getter obj =</span>
|
||||
<span class="lineno"> 889 </span><span class="spaces"> </span><span class="nottickedoff">let left = obj ^. oMarginLeft</span>
|
||||
<span class="lineno"> 890 </span><span class="spaces"> </span><span class="nottickedoff">minx = obj ^. oBBMinX</span>
|
||||
<span class="lineno"> 891 </span><span class="spaces"> </span><span class="nottickedoff">dx = obj ^. oTranslate . _1</span>
|
||||
<span class="lineno"> 892 </span><span class="spaces"> </span><span class="nottickedoff">in dx+minx-left</span>
|
||||
<span class="lineno"> 893 </span><span class="spaces"> </span><span class="nottickedoff">setter obj val =</span>
|
||||
<span class="lineno"> 894 </span><span class="spaces"> </span><span class="nottickedoff">obj & (oTranslate . _1) +~ val-getter obj</span></span>
|
||||
<span class="lineno"> 895 </span>
|
||||
<span class="lineno"> 896 </span>-- | Derived location of the right-most point of an object + margin.
|
||||
<span class="lineno"> 897 </span>oRightX :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 898 </span><span class="decl"><span class="nottickedoff">oRightX = lens getter setter</span>
|
||||
<span class="lineno"> 899 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 900 </span><span class="spaces"> </span><span class="nottickedoff">getter obj =</span>
|
||||
<span class="lineno"> 901 </span><span class="spaces"> </span><span class="nottickedoff">let right = obj ^. oMarginRight</span>
|
||||
<span class="lineno"> 902 </span><span class="spaces"> </span><span class="nottickedoff">minx = obj ^. oBBMinX</span>
|
||||
<span class="lineno"> 903 </span><span class="spaces"> </span><span class="nottickedoff">w = obj ^. oBBWidth</span>
|
||||
<span class="lineno"> 904 </span><span class="spaces"> </span><span class="nottickedoff">dx = obj ^. oTranslate . _1</span>
|
||||
<span class="lineno"> 905 </span><span class="spaces"> </span><span class="nottickedoff">in dx+minx+w+right</span>
|
||||
<span class="lineno"> 906 </span><span class="spaces"> </span><span class="nottickedoff">setter obj val =</span>
|
||||
<span class="lineno"> 907 </span><span class="spaces"> </span><span class="nottickedoff">obj & (oTranslate . _1) +~ val-getter obj</span></span>
|
||||
<span class="lineno"> 908 </span>
|
||||
<span class="lineno"> 909 </span>-- | Derived location of an object's center point.
|
||||
<span class="lineno"> 910 </span>oCenterXY :: Lens' (ObjectData a) (Double, Double)
|
||||
<span class="lineno"> 911 </span><span class="decl"><span class="nottickedoff">oCenterXY = lens getter setter</span>
|
||||
<span class="lineno"> 912 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 913 </span><span class="spaces"> </span><span class="nottickedoff">getter obj =</span>
|
||||
<span class="lineno"> 914 </span><span class="spaces"> </span><span class="nottickedoff">let minx = obj ^. oBBMinX</span>
|
||||
<span class="lineno"> 915 </span><span class="spaces"> </span><span class="nottickedoff">miny = obj ^. oBBMinY</span>
|
||||
<span class="lineno"> 916 </span><span class="spaces"> </span><span class="nottickedoff">w = obj ^. oBBWidth</span>
|
||||
<span class="lineno"> 917 </span><span class="spaces"> </span><span class="nottickedoff">h = obj ^. oBBHeight</span>
|
||||
<span class="lineno"> 918 </span><span class="spaces"> </span><span class="nottickedoff">(dx,dy) = obj ^. oTranslate</span>
|
||||
<span class="lineno"> 919 </span><span class="spaces"> </span><span class="nottickedoff">in (dx+minx+w/2, dy+miny+h/2)</span>
|
||||
<span class="lineno"> 920 </span><span class="spaces"> </span><span class="nottickedoff">setter obj (dx, dy) =</span>
|
||||
<span class="lineno"> 921 </span><span class="spaces"> </span><span class="nottickedoff">let (x,y) = getter obj in</span>
|
||||
<span class="lineno"> 922 </span><span class="spaces"> </span><span class="nottickedoff">obj & (oTranslate . _1) +~ dx-x</span>
|
||||
<span class="lineno"> 923 </span><span class="spaces"> </span><span class="nottickedoff">& (oTranslate . _2) +~ dy-y</span></span>
|
||||
<span class="lineno"> 924 </span>
|
||||
<span class="lineno"> 925 </span>-- | Object's top margin.
|
||||
<span class="lineno"> 926 </span>oMarginTop :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 927 </span><span class="decl"><span class="nottickedoff">oMarginTop = oMargin . _1</span></span>
|
||||
<span class="lineno"> 928 </span>
|
||||
<span class="lineno"> 929 </span>-- | Object's right margin.
|
||||
<span class="lineno"> 930 </span>oMarginRight :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 931 </span><span class="decl"><span class="nottickedoff">oMarginRight = oMargin . _2</span></span>
|
||||
<span class="lineno"> 932 </span>
|
||||
<span class="lineno"> 933 </span>-- | Object's bottom margin.
|
||||
<span class="lineno"> 934 </span>oMarginBottom :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 935 </span><span class="decl"><span class="nottickedoff">oMarginBottom = oMargin . _3</span></span>
|
||||
<span class="lineno"> 936 </span>
|
||||
<span class="lineno"> 937 </span>-- | Object's left margin.
|
||||
<span class="lineno"> 938 </span>oMarginLeft :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 939 </span><span class="decl"><span class="nottickedoff">oMarginLeft = oMargin . _4</span></span>
|
||||
<span class="lineno"> 940 </span>
|
||||
<span class="lineno"> 941 </span>-- | Object's minimal X-coordinate..
|
||||
<span class="lineno"> 942 </span>oBBMinX :: Getter (ObjectData a) Double
|
||||
<span class="lineno"> 943 </span><span class="decl"><span class="nottickedoff">oBBMinX = oBB . _1</span></span>
|
||||
<span class="lineno"> 944 </span>
|
||||
<span class="lineno"> 945 </span>-- | Object's minimal Y-coordinate..
|
||||
<span class="lineno"> 946 </span>oBBMinY :: Getter (ObjectData a) Double
|
||||
<span class="lineno"> 947 </span><span class="decl"><span class="nottickedoff">oBBMinY = oBB . _2</span></span>
|
||||
<span class="lineno"> 948 </span>
|
||||
<span class="lineno"> 949 </span>-- | Object's width without margin.
|
||||
<span class="lineno"> 950 </span>oBBWidth :: Getter (ObjectData a) Double
|
||||
<span class="lineno"> 951 </span><span class="decl"><span class="nottickedoff">oBBWidth = oBB . _3</span></span>
|
||||
<span class="lineno"> 952 </span>
|
||||
<span class="lineno"> 953 </span>-- | Object's height without margin.
|
||||
<span class="lineno"> 954 </span>oBBHeight :: Getter (ObjectData a) Double
|
||||
<span class="lineno"> 955 </span><span class="decl"><span class="nottickedoff">oBBHeight = oBB . _4</span></span>
|
||||
<span class="lineno"> 956 </span>
|
||||
<span class="lineno"> 957 </span>-------------------------------------------------------------------------------
|
||||
<span class="lineno"> 958 </span>-- Object modifiers
|
||||
<span class="lineno"> 856 </span><span class="spaces"> </span><span class="nottickedoff">, _oSVG = svg }</span></span>
|
||||
<span class="lineno"> 857 </span>
|
||||
<span class="lineno"> 858 </span>oComputeBB :: ObjectData a -> ObjectData a
|
||||
<span class="lineno"> 859 </span><span class="decl"><span class="nottickedoff">oComputeBB obj = obj</span>
|
||||
<span class="lineno"> 860 </span><span class="spaces"> </span><span class="nottickedoff">{ _oBB = boundingBox $ oScaleApply obj (_oSVG obj) }</span></span>
|
||||
<span class="lineno"> 861 </span>
|
||||
<span class="lineno"> 862 </span>-- | Derived location of the top-most point of an object + margin.
|
||||
<span class="lineno"> 863 </span>oTopY :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 864 </span><span class="decl"><span class="nottickedoff">oTopY = lens getter setter</span>
|
||||
<span class="lineno"> 865 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 866 </span><span class="spaces"> </span><span class="nottickedoff">getter obj =</span>
|
||||
<span class="lineno"> 867 </span><span class="spaces"> </span><span class="nottickedoff">let top = obj ^. oMarginTop</span>
|
||||
<span class="lineno"> 868 </span><span class="spaces"> </span><span class="nottickedoff">miny = obj ^. oBBMinY</span>
|
||||
<span class="lineno"> 869 </span><span class="spaces"> </span><span class="nottickedoff">h = obj ^. oBBHeight</span>
|
||||
<span class="lineno"> 870 </span><span class="spaces"> </span><span class="nottickedoff">dy = obj ^. oTranslate . _2</span>
|
||||
<span class="lineno"> 871 </span><span class="spaces"> </span><span class="nottickedoff">in dy+miny+h+top</span>
|
||||
<span class="lineno"> 872 </span><span class="spaces"> </span><span class="nottickedoff">setter obj val =</span>
|
||||
<span class="lineno"> 873 </span><span class="spaces"> </span><span class="nottickedoff">obj & (oTranslate . _2) +~ val-getter obj</span></span>
|
||||
<span class="lineno"> 874 </span>
|
||||
<span class="lineno"> 875 </span>-- | Derived location of the bottom-most point of an object + margin.
|
||||
<span class="lineno"> 876 </span>oBottomY :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 877 </span><span class="decl"><span class="nottickedoff">oBottomY = lens getter setter</span>
|
||||
<span class="lineno"> 878 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 879 </span><span class="spaces"> </span><span class="nottickedoff">getter obj =</span>
|
||||
<span class="lineno"> 880 </span><span class="spaces"> </span><span class="nottickedoff">let bot = obj ^. oMarginBottom</span>
|
||||
<span class="lineno"> 881 </span><span class="spaces"> </span><span class="nottickedoff">miny = obj ^. oBBMinY</span>
|
||||
<span class="lineno"> 882 </span><span class="spaces"> </span><span class="nottickedoff">dy = obj ^. oTranslate . _2</span>
|
||||
<span class="lineno"> 883 </span><span class="spaces"> </span><span class="nottickedoff">in dy+miny-bot</span>
|
||||
<span class="lineno"> 884 </span><span class="spaces"> </span><span class="nottickedoff">setter obj val =</span>
|
||||
<span class="lineno"> 885 </span><span class="spaces"> </span><span class="nottickedoff">obj & (oTranslate . _2) +~ val-getter obj</span></span>
|
||||
<span class="lineno"> 886 </span>
|
||||
<span class="lineno"> 887 </span>-- | Derived location of the left-most point of an object + margin.
|
||||
<span class="lineno"> 888 </span>oLeftX :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 889 </span><span class="decl"><span class="nottickedoff">oLeftX = lens getter setter</span>
|
||||
<span class="lineno"> 890 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 891 </span><span class="spaces"> </span><span class="nottickedoff">getter obj =</span>
|
||||
<span class="lineno"> 892 </span><span class="spaces"> </span><span class="nottickedoff">let left = obj ^. oMarginLeft</span>
|
||||
<span class="lineno"> 893 </span><span class="spaces"> </span><span class="nottickedoff">minx = obj ^. oBBMinX</span>
|
||||
<span class="lineno"> 894 </span><span class="spaces"> </span><span class="nottickedoff">dx = obj ^. oTranslate . _1</span>
|
||||
<span class="lineno"> 895 </span><span class="spaces"> </span><span class="nottickedoff">in dx+minx-left</span>
|
||||
<span class="lineno"> 896 </span><span class="spaces"> </span><span class="nottickedoff">setter obj val =</span>
|
||||
<span class="lineno"> 897 </span><span class="spaces"> </span><span class="nottickedoff">obj & (oTranslate . _1) +~ val-getter obj</span></span>
|
||||
<span class="lineno"> 898 </span>
|
||||
<span class="lineno"> 899 </span>-- | Derived location of the right-most point of an object + margin.
|
||||
<span class="lineno"> 900 </span>oRightX :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 901 </span><span class="decl"><span class="nottickedoff">oRightX = lens getter setter</span>
|
||||
<span class="lineno"> 902 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 903 </span><span class="spaces"> </span><span class="nottickedoff">getter obj =</span>
|
||||
<span class="lineno"> 904 </span><span class="spaces"> </span><span class="nottickedoff">let right = obj ^. oMarginRight</span>
|
||||
<span class="lineno"> 905 </span><span class="spaces"> </span><span class="nottickedoff">minx = obj ^. oBBMinX</span>
|
||||
<span class="lineno"> 906 </span><span class="spaces"> </span><span class="nottickedoff">w = obj ^. oBBWidth</span>
|
||||
<span class="lineno"> 907 </span><span class="spaces"> </span><span class="nottickedoff">dx = obj ^. oTranslate . _1</span>
|
||||
<span class="lineno"> 908 </span><span class="spaces"> </span><span class="nottickedoff">in dx+minx+w+right</span>
|
||||
<span class="lineno"> 909 </span><span class="spaces"> </span><span class="nottickedoff">setter obj val =</span>
|
||||
<span class="lineno"> 910 </span><span class="spaces"> </span><span class="nottickedoff">obj & (oTranslate . _1) +~ val-getter obj</span></span>
|
||||
<span class="lineno"> 911 </span>
|
||||
<span class="lineno"> 912 </span>-- | Derived location of an object's center point.
|
||||
<span class="lineno"> 913 </span>oCenterXY :: Lens' (ObjectData a) (Double, Double)
|
||||
<span class="lineno"> 914 </span><span class="decl"><span class="nottickedoff">oCenterXY = lens getter setter</span>
|
||||
<span class="lineno"> 915 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 916 </span><span class="spaces"> </span><span class="nottickedoff">getter obj =</span>
|
||||
<span class="lineno"> 917 </span><span class="spaces"> </span><span class="nottickedoff">let minx = obj ^. oBBMinX</span>
|
||||
<span class="lineno"> 918 </span><span class="spaces"> </span><span class="nottickedoff">miny = obj ^. oBBMinY</span>
|
||||
<span class="lineno"> 919 </span><span class="spaces"> </span><span class="nottickedoff">w = obj ^. oBBWidth</span>
|
||||
<span class="lineno"> 920 </span><span class="spaces"> </span><span class="nottickedoff">h = obj ^. oBBHeight</span>
|
||||
<span class="lineno"> 921 </span><span class="spaces"> </span><span class="nottickedoff">(dx,dy) = obj ^. oTranslate</span>
|
||||
<span class="lineno"> 922 </span><span class="spaces"> </span><span class="nottickedoff">in (dx+minx+w/2, dy+miny+h/2)</span>
|
||||
<span class="lineno"> 923 </span><span class="spaces"> </span><span class="nottickedoff">setter obj (dx, dy) =</span>
|
||||
<span class="lineno"> 924 </span><span class="spaces"> </span><span class="nottickedoff">let (x,y) = getter obj in</span>
|
||||
<span class="lineno"> 925 </span><span class="spaces"> </span><span class="nottickedoff">obj & (oTranslate . _1) +~ dx-x</span>
|
||||
<span class="lineno"> 926 </span><span class="spaces"> </span><span class="nottickedoff">& (oTranslate . _2) +~ dy-y</span></span>
|
||||
<span class="lineno"> 927 </span>
|
||||
<span class="lineno"> 928 </span>-- | Object's top margin.
|
||||
<span class="lineno"> 929 </span>oMarginTop :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 930 </span><span class="decl"><span class="nottickedoff">oMarginTop = oMargin . _1</span></span>
|
||||
<span class="lineno"> 931 </span>
|
||||
<span class="lineno"> 932 </span>-- | Object's right margin.
|
||||
<span class="lineno"> 933 </span>oMarginRight :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 934 </span><span class="decl"><span class="nottickedoff">oMarginRight = oMargin . _2</span></span>
|
||||
<span class="lineno"> 935 </span>
|
||||
<span class="lineno"> 936 </span>-- | Object's bottom margin.
|
||||
<span class="lineno"> 937 </span>oMarginBottom :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 938 </span><span class="decl"><span class="nottickedoff">oMarginBottom = oMargin . _3</span></span>
|
||||
<span class="lineno"> 939 </span>
|
||||
<span class="lineno"> 940 </span>-- | Object's left margin.
|
||||
<span class="lineno"> 941 </span>oMarginLeft :: Lens' (ObjectData a) Double
|
||||
<span class="lineno"> 942 </span><span class="decl"><span class="nottickedoff">oMarginLeft = oMargin . _4</span></span>
|
||||
<span class="lineno"> 943 </span>
|
||||
<span class="lineno"> 944 </span>-- | Object's minimal X-coordinate..
|
||||
<span class="lineno"> 945 </span>oBBMinX :: Getter (ObjectData a) Double
|
||||
<span class="lineno"> 946 </span><span class="decl"><span class="nottickedoff">oBBMinX = oBB . _1</span></span>
|
||||
<span class="lineno"> 947 </span>
|
||||
<span class="lineno"> 948 </span>-- | Object's minimal Y-coordinate..
|
||||
<span class="lineno"> 949 </span>oBBMinY :: Getter (ObjectData a) Double
|
||||
<span class="lineno"> 950 </span><span class="decl"><span class="nottickedoff">oBBMinY = oBB . _2</span></span>
|
||||
<span class="lineno"> 951 </span>
|
||||
<span class="lineno"> 952 </span>-- | Object's width without margin.
|
||||
<span class="lineno"> 953 </span>oBBWidth :: Getter (ObjectData a) Double
|
||||
<span class="lineno"> 954 </span><span class="decl"><span class="nottickedoff">oBBWidth = oBB . _3</span></span>
|
||||
<span class="lineno"> 955 </span>
|
||||
<span class="lineno"> 956 </span>-- | Object's height without margin.
|
||||
<span class="lineno"> 957 </span>oBBHeight :: Getter (ObjectData a) Double
|
||||
<span class="lineno"> 958 </span><span class="decl"><span class="nottickedoff">oBBHeight = oBB . _4</span></span>
|
||||
<span class="lineno"> 959 </span>
|
||||
<span class="lineno"> 960 </span>-- | Modify object properties.
|
||||
<span class="lineno"> 961 </span>oModify :: Object s a -> (ObjectData a -> ObjectData a) -> Scene s ()
|
||||
<span class="lineno"> 962 </span><span class="decl"><span class="nottickedoff">oModify o fn = modifyVar (objectData o) fn</span></span>
|
||||
<span class="lineno"> 963 </span>
|
||||
<span class="lineno"> 964 </span>-- | Modify object properties using a stateful API.
|
||||
<span class="lineno"> 965 </span>oModifyS :: Object s a -> (State (ObjectData a) b) -> Scene s ()
|
||||
<span class="lineno"> 966 </span><span class="decl"><span class="nottickedoff">oModifyS o fn = oModify o (execState fn)</span></span>
|
||||
<span class="lineno"> 967 </span>
|
||||
<span class="lineno"> 968 </span>-- | Query object property.
|
||||
<span class="lineno"> 969 </span>oRead :: Object s a -> Getting b (ObjectData a) b -> Scene s b
|
||||
<span class="lineno"> 970 </span><span class="decl"><span class="nottickedoff">oRead o l = view l <$> readVar (objectData o)</span></span>
|
||||
<span class="lineno"> 971 </span>
|
||||
<span class="lineno"> 972 </span>-- | Modify object properties over a set duration.
|
||||
<span class="lineno"> 973 </span>oTween :: Object s a -> Duration -> (Double -> ObjectData a -> ObjectData a) -> Scene s ()
|
||||
<span class="lineno"> 974 </span><span class="decl"><span class="nottickedoff">oTween o d fn = do</span>
|
||||
<span class="lineno"> 975 </span><span class="spaces"> </span><span class="nottickedoff">-- Read 'easing' var here instead of taking it from 'v'.</span>
|
||||
<span class="lineno"> 976 </span><span class="spaces"> </span><span class="nottickedoff">-- This allows different easing functions even at the same timestamp.</span>
|
||||
<span class="lineno"> 977 </span><span class="spaces"> </span><span class="nottickedoff">ease <- oRead o oEasing</span>
|
||||
<span class="lineno"> 978 </span><span class="spaces"> </span><span class="nottickedoff">tweenVar (objectData o) d (\v t -> fn (ease t) v)</span></span>
|
||||
<span class="lineno"> 979 </span>
|
||||
<span class="lineno"> 980 </span>-- | Modify object properties over a set duration using a stateful API.
|
||||
<span class="lineno"> 981 </span>oTweenS :: Object s a -> Duration -> (Double -> State (ObjectData a) b) -> Scene s ()
|
||||
<span class="lineno"> 982 </span><span class="decl"><span class="nottickedoff">oTweenS o d fn = oTween o d (\t -> execState (fn t))</span></span>
|
||||
<span class="lineno"> 983 </span>
|
||||
<span class="lineno"> 984 </span>-- | Modify object value over a set duration. This is a convenience function
|
||||
<span class="lineno"> 985 </span>-- for modifying `oValue`.
|
||||
<span class="lineno"> 986 </span>oTweenV :: Renderable a => Object s a -> Duration -> (Double -> a -> a) -> Scene s ()
|
||||
<span class="lineno"> 987 </span><span class="decl"><span class="nottickedoff">oTweenV o d fn = oTween o d (\t -> oValue %~ fn t)</span></span>
|
||||
<span class="lineno"> 988 </span>
|
||||
<span class="lineno"> 989 </span>-- | Modify object value over a set duration using a stateful API. This is a
|
||||
<span class="lineno"> 990 </span>-- convenience function for modifying `oValue`.
|
||||
<span class="lineno"> 991 </span>oTweenVS :: Renderable a => Object s a -> Duration -> (Double -> State a b) -> Scene s ()
|
||||
<span class="lineno"> 992 </span><span class="decl"><span class="nottickedoff">oTweenVS o d fn = oTween o d (\t -> oValue %~ execState (fn t))</span></span>
|
||||
<span class="lineno"> 993 </span>
|
||||
<span class="lineno"> 994 </span>-- | Create new object.
|
||||
<span class="lineno"> 995 </span>oNew :: Renderable a => a -> Scene s (Object s a)
|
||||
<span class="lineno"> 996 </span><span class="decl"><span class="nottickedoff">oNew = newObject</span></span>
|
||||
<span class="lineno"> 997 </span>
|
||||
<span class="lineno"> 998 </span>-- | Create new object.
|
||||
<span class="lineno"> 999 </span>newObject :: Renderable a => a -> Scene s (Object s a)
|
||||
<span class="lineno"> 1000 </span><span class="decl"><span class="nottickedoff">newObject val = do</span>
|
||||
<span class="lineno"> 1001 </span><span class="spaces"> </span><span class="nottickedoff">ref <- newVar ObjectData</span>
|
||||
<span class="lineno"> 1002 </span><span class="spaces"> </span><span class="nottickedoff">{ _oTranslate = (0,0)</span>
|
||||
<span class="lineno"> 1003 </span><span class="spaces"> </span><span class="nottickedoff">, _oValueRef = val</span>
|
||||
<span class="lineno"> 1004 </span><span class="spaces"> </span><span class="nottickedoff">, _oSVG = svg</span>
|
||||
<span class="lineno"> 1005 </span><span class="spaces"> </span><span class="nottickedoff">, _oContext = id</span>
|
||||
<span class="lineno"> 1006 </span><span class="spaces"> </span><span class="nottickedoff">, _oMargin = (0.5,0.5,0.5,0.5)</span>
|
||||
<span class="lineno"> 1007 </span><span class="spaces"> </span><span class="nottickedoff">, _oBB = boundingBox svg</span>
|
||||
<span class="lineno"> 1008 </span><span class="spaces"> </span><span class="nottickedoff">, _oOpacity = 1</span>
|
||||
<span class="lineno"> 1009 </span><span class="spaces"> </span><span class="nottickedoff">, _oShown = False</span>
|
||||
<span class="lineno"> 1010 </span><span class="spaces"> </span><span class="nottickedoff">, _oZIndex = 1</span>
|
||||
<span class="lineno"> 1011 </span><span class="spaces"> </span><span class="nottickedoff">, _oEasing = curveS 2</span>
|
||||
<span class="lineno"> 1012 </span><span class="spaces"> </span><span class="nottickedoff">, _oScale = 1</span>
|
||||
<span class="lineno"> 1013 </span><span class="spaces"> </span><span class="nottickedoff">, _oScaleOrigin = (0,0)</span>
|
||||
<span class="lineno"> 1014 </span><span class="spaces"> </span><span class="nottickedoff">}</span>
|
||||
<span class="lineno"> 1015 </span><span class="spaces"> </span><span class="nottickedoff">sprite <- newSprite $ do</span>
|
||||
<span class="lineno"> 1016 </span><span class="spaces"> </span><span class="nottickedoff">~ObjectData{..} <- unVar ref</span>
|
||||
<span class="lineno"> 1017 </span><span class="spaces"> </span><span class="nottickedoff">pure $</span>
|
||||
<span class="lineno"> 1018 </span><span class="spaces"> </span><span class="nottickedoff">if _oShown</span>
|
||||
<span class="lineno"> 1019 </span><span class="spaces"> </span><span class="nottickedoff">then</span>
|
||||
<span class="lineno"> 1020 </span><span class="spaces"> </span><span class="nottickedoff">uncurry translate _oTranslate $</span>
|
||||
<span class="lineno"> 1021 </span><span class="spaces"> </span><span class="nottickedoff">uncurry translate (_oScaleOrigin & both %~ negate) $</span>
|
||||
<span class="lineno"> 1022 </span><span class="spaces"> </span><span class="nottickedoff">scale _oScale $</span>
|
||||
<span class="lineno"> 1023 </span><span class="spaces"> </span><span class="nottickedoff">uncurry translate _oScaleOrigin $</span>
|
||||
<span class="lineno"> 1024 </span><span class="spaces"> </span><span class="nottickedoff">withGroupOpacity _oOpacity $</span>
|
||||
<span class="lineno"> 1025 </span><span class="spaces"> </span><span class="nottickedoff">mkGroup [_oContext _oSVG]</span>
|
||||
<span class="lineno"> 1026 </span><span class="spaces"> </span><span class="nottickedoff">else None</span>
|
||||
<span class="lineno"> 1027 </span><span class="spaces"> </span><span class="nottickedoff">spriteModify sprite $ do</span>
|
||||
<span class="lineno"> 1028 </span><span class="spaces"> </span><span class="nottickedoff">~ObjectData{_oZIndex=z} <- unVar ref</span>
|
||||
<span class="lineno"> 1029 </span><span class="spaces"> </span><span class="nottickedoff">pure $ \(img,_) -> (img,z)</span>
|
||||
<span class="lineno"> 1030 </span><span class="spaces"> </span><span class="nottickedoff">return Object</span>
|
||||
<span class="lineno"> 1031 </span><span class="spaces"> </span><span class="nottickedoff">{ objectSprite = sprite</span>
|
||||
<span class="lineno"> 1032 </span><span class="spaces"> </span><span class="nottickedoff">, objectData = ref }</span>
|
||||
<span class="lineno"> 1033 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 1034 </span><span class="spaces"> </span><span class="nottickedoff">svg = toSVG val</span></span>
|
||||
<span class="lineno"> 1035 </span>
|
||||
<span class="lineno"> 1036 </span>-------------------------------------------------------------------------------
|
||||
<span class="lineno"> 1037 </span>-- Graphical transformations
|
||||
<span class="lineno"> 1038 </span>
|
||||
<span class="lineno"> 1039 </span>-- | Instantly show object.
|
||||
<span class="lineno"> 1040 </span>oShow :: Object s a -> Scene s ()
|
||||
<span class="lineno"> 1041 </span><span class="decl"><span class="nottickedoff">oShow o = oModify o $ oShown .~ True</span></span>
|
||||
<span class="lineno"> 960 </span>-------------------------------------------------------------------------------
|
||||
<span class="lineno"> 961 </span>-- Object modifiers
|
||||
<span class="lineno"> 962 </span>
|
||||
<span class="lineno"> 963 </span>-- | Modify object properties.
|
||||
<span class="lineno"> 964 </span>oModify :: Object s a -> (ObjectData a -> ObjectData a) -> Scene s ()
|
||||
<span class="lineno"> 965 </span><span class="decl"><span class="nottickedoff">oModify o fn = modifyVar (objectData o) fn</span></span>
|
||||
<span class="lineno"> 966 </span>
|
||||
<span class="lineno"> 967 </span>-- | Modify object properties using a stateful API.
|
||||
<span class="lineno"> 968 </span>oModifyS :: Object s a -> (State (ObjectData a) b) -> Scene s ()
|
||||
<span class="lineno"> 969 </span><span class="decl"><span class="nottickedoff">oModifyS o fn = oModify o (execState fn)</span></span>
|
||||
<span class="lineno"> 970 </span>
|
||||
<span class="lineno"> 971 </span>-- | Query object property.
|
||||
<span class="lineno"> 972 </span>oRead :: Object s a -> Getting b (ObjectData a) b -> Scene s b
|
||||
<span class="lineno"> 973 </span><span class="decl"><span class="nottickedoff">oRead o l = view l <$> readVar (objectData o)</span></span>
|
||||
<span class="lineno"> 974 </span>
|
||||
<span class="lineno"> 975 </span>-- | Modify object properties over a set duration.
|
||||
<span class="lineno"> 976 </span>oTween :: Object s a -> Duration -> (Double -> ObjectData a -> ObjectData a) -> Scene s ()
|
||||
<span class="lineno"> 977 </span><span class="decl"><span class="nottickedoff">oTween o d fn = do</span>
|
||||
<span class="lineno"> 978 </span><span class="spaces"> </span><span class="nottickedoff">-- Read 'easing' var here instead of taking it from 'v'.</span>
|
||||
<span class="lineno"> 979 </span><span class="spaces"> </span><span class="nottickedoff">-- This allows different easing functions even at the same timestamp.</span>
|
||||
<span class="lineno"> 980 </span><span class="spaces"> </span><span class="nottickedoff">ease <- oRead o oEasing</span>
|
||||
<span class="lineno"> 981 </span><span class="spaces"> </span><span class="nottickedoff">tweenVar (objectData o) d (\v t -> fn (ease t) v)</span></span>
|
||||
<span class="lineno"> 982 </span>
|
||||
<span class="lineno"> 983 </span>-- | Modify object properties over a set duration using a stateful API.
|
||||
<span class="lineno"> 984 </span>oTweenS :: Object s a -> Duration -> (Double -> State (ObjectData a) b) -> Scene s ()
|
||||
<span class="lineno"> 985 </span><span class="decl"><span class="nottickedoff">oTweenS o d fn = oTween o d (\t -> execState (fn t))</span></span>
|
||||
<span class="lineno"> 986 </span>
|
||||
<span class="lineno"> 987 </span>-- | Modify object value over a set duration. This is a convenience function
|
||||
<span class="lineno"> 988 </span>-- for modifying `oValue`.
|
||||
<span class="lineno"> 989 </span>oTweenV :: Renderable a => Object s a -> Duration -> (Double -> a -> a) -> Scene s ()
|
||||
<span class="lineno"> 990 </span><span class="decl"><span class="nottickedoff">oTweenV o d fn = oTween o d (\t -> oValue %~ fn t)</span></span>
|
||||
<span class="lineno"> 991 </span>
|
||||
<span class="lineno"> 992 </span>-- | Modify object value over a set duration using a stateful API. This is a
|
||||
<span class="lineno"> 993 </span>-- convenience function for modifying `oValue`.
|
||||
<span class="lineno"> 994 </span>oTweenVS :: Renderable a => Object s a -> Duration -> (Double -> State a b) -> Scene s ()
|
||||
<span class="lineno"> 995 </span><span class="decl"><span class="nottickedoff">oTweenVS o d fn = oTween o d (\t -> oValue %~ execState (fn t))</span></span>
|
||||
<span class="lineno"> 996 </span>
|
||||
<span class="lineno"> 997 </span>-- | Create new object.
|
||||
<span class="lineno"> 998 </span>oNew :: Renderable a => a -> Scene s (Object s a)
|
||||
<span class="lineno"> 999 </span><span class="decl"><span class="nottickedoff">oNew = newObject</span></span>
|
||||
<span class="lineno"> 1000 </span>
|
||||
<span class="lineno"> 1001 </span>-- | Create new object.
|
||||
<span class="lineno"> 1002 </span>newObject :: Renderable a => a -> Scene s (Object s a)
|
||||
<span class="lineno"> 1003 </span><span class="decl"><span class="nottickedoff">newObject val = do</span>
|
||||
<span class="lineno"> 1004 </span><span class="spaces"> </span><span class="nottickedoff">ref <- newVar ObjectData</span>
|
||||
<span class="lineno"> 1005 </span><span class="spaces"> </span><span class="nottickedoff">{ _oTranslate = (0,0)</span>
|
||||
<span class="lineno"> 1006 </span><span class="spaces"> </span><span class="nottickedoff">, _oValueRef = val</span>
|
||||
<span class="lineno"> 1007 </span><span class="spaces"> </span><span class="nottickedoff">, _oSVG = svg</span>
|
||||
<span class="lineno"> 1008 </span><span class="spaces"> </span><span class="nottickedoff">, _oContext = id</span>
|
||||
<span class="lineno"> 1009 </span><span class="spaces"> </span><span class="nottickedoff">, _oMargin = (0.5,0.5,0.5,0.5)</span>
|
||||
<span class="lineno"> 1010 </span><span class="spaces"> </span><span class="nottickedoff">, _oBB = boundingBox svg</span>
|
||||
<span class="lineno"> 1011 </span><span class="spaces"> </span><span class="nottickedoff">, _oOpacity = 1</span>
|
||||
<span class="lineno"> 1012 </span><span class="spaces"> </span><span class="nottickedoff">, _oShown = False</span>
|
||||
<span class="lineno"> 1013 </span><span class="spaces"> </span><span class="nottickedoff">, _oZIndex = 1</span>
|
||||
<span class="lineno"> 1014 </span><span class="spaces"> </span><span class="nottickedoff">, _oEasing = curveS 2</span>
|
||||
<span class="lineno"> 1015 </span><span class="spaces"> </span><span class="nottickedoff">, _oScale = 1</span>
|
||||
<span class="lineno"> 1016 </span><span class="spaces"> </span><span class="nottickedoff">, _oScaleOrigin = (0,0)</span>
|
||||
<span class="lineno"> 1017 </span><span class="spaces"> </span><span class="nottickedoff">}</span>
|
||||
<span class="lineno"> 1018 </span><span class="spaces"> </span><span class="nottickedoff">sprite <- newSprite $ do</span>
|
||||
<span class="lineno"> 1019 </span><span class="spaces"> </span><span class="nottickedoff">~obj@ObjectData{..} <- unVar ref</span>
|
||||
<span class="lineno"> 1020 </span><span class="spaces"> </span><span class="nottickedoff">pure $</span>
|
||||
<span class="lineno"> 1021 </span><span class="spaces"> </span><span class="nottickedoff">if _oShown</span>
|
||||
<span class="lineno"> 1022 </span><span class="spaces"> </span><span class="nottickedoff">then</span>
|
||||
<span class="lineno"> 1023 </span><span class="spaces"> </span><span class="nottickedoff">uncurry translate _oTranslate $</span>
|
||||
<span class="lineno"> 1024 </span><span class="spaces"> </span><span class="nottickedoff">oScaleApply obj $</span>
|
||||
<span class="lineno"> 1025 </span><span class="spaces"> </span><span class="nottickedoff">withGroupOpacity _oOpacity $</span>
|
||||
<span class="lineno"> 1026 </span><span class="spaces"> </span><span class="nottickedoff">mkGroup [_oContext _oSVG]</span>
|
||||
<span class="lineno"> 1027 </span><span class="spaces"> </span><span class="nottickedoff">else None</span>
|
||||
<span class="lineno"> 1028 </span><span class="spaces"> </span><span class="nottickedoff">spriteModify sprite $ do</span>
|
||||
<span class="lineno"> 1029 </span><span class="spaces"> </span><span class="nottickedoff">~ObjectData{_oZIndex=z} <- unVar ref</span>
|
||||
<span class="lineno"> 1030 </span><span class="spaces"> </span><span class="nottickedoff">pure $ \(img,_) -> (img,z)</span>
|
||||
<span class="lineno"> 1031 </span><span class="spaces"> </span><span class="nottickedoff">return Object</span>
|
||||
<span class="lineno"> 1032 </span><span class="spaces"> </span><span class="nottickedoff">{ objectSprite = sprite</span>
|
||||
<span class="lineno"> 1033 </span><span class="spaces"> </span><span class="nottickedoff">, objectData = ref }</span>
|
||||
<span class="lineno"> 1034 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 1035 </span><span class="spaces"> </span><span class="nottickedoff">svg = toSVG val</span></span>
|
||||
<span class="lineno"> 1036 </span>
|
||||
<span class="lineno"> 1037 </span>oScaleApply :: ObjectData a -> (SVG -> SVG)
|
||||
<span class="lineno"> 1038 </span><span class="decl"><span class="nottickedoff">oScaleApply ObjectData{..} =</span>
|
||||
<span class="lineno"> 1039 </span><span class="spaces"> </span><span class="nottickedoff">uncurry translate (_oScaleOrigin & both %~ negate) .</span>
|
||||
<span class="lineno"> 1040 </span><span class="spaces"> </span><span class="nottickedoff">scale _oScale .</span>
|
||||
<span class="lineno"> 1041 </span><span class="spaces"> </span><span class="nottickedoff">uncurry translate _oScaleOrigin</span></span>
|
||||
<span class="lineno"> 1042 </span>
|
||||
<span class="lineno"> 1043 </span>-- | Instantly hide object.
|
||||
<span class="lineno"> 1044 </span>oHide :: Object s a -> Scene s ()
|
||||
<span class="lineno"> 1045 </span><span class="decl"><span class="nottickedoff">oHide o = oModify o $ oShown .~ False</span></span>
|
||||
<span class="lineno"> 1046 </span>
|
||||
<span class="lineno"> 1047 </span>oShowWith :: Object s a -> (SVG -> Animation) -> Scene s ()
|
||||
<span class="lineno"> 1048 </span><span class="decl"><span class="nottickedoff">oShowWith o fn = do</span>
|
||||
<span class="lineno"> 1049 </span><span class="spaces"> </span><span class="nottickedoff">oModify o $ oShown .~ True</span>
|
||||
<span class="lineno"> 1050 </span><span class="spaces"> </span><span class="nottickedoff">initSVG <- oRead o oSVG</span>
|
||||
<span class="lineno"> 1051 </span><span class="spaces"> </span><span class="nottickedoff">let ani = fn initSVG</span>
|
||||
<span class="lineno"> 1052 </span><span class="spaces"> </span><span class="nottickedoff">oTween o (duration ani) $ \t obj -></span>
|
||||
<span class="lineno"> 1053 </span><span class="spaces"> </span><span class="nottickedoff">obj{ _oSVG = getAnimationFrame SyncStretch ani t 1 }</span>
|
||||
<span class="lineno"> 1054 </span><span class="spaces"> </span><span class="nottickedoff">oModify o $ \obj -> obj { _oSVG = initSVG }</span></span>
|
||||
<span class="lineno"> 1055 </span>
|
||||
<span class="lineno"> 1056 </span>oHideWith :: Object s a -> (SVG -> Animation) -> Scene s ()
|
||||
<span class="lineno"> 1057 </span><span class="decl"><span class="nottickedoff">oHideWith o fn = do</span>
|
||||
<span class="lineno"> 1058 </span><span class="spaces"> </span><span class="nottickedoff">initSVG <- oRead o oSVG</span>
|
||||
<span class="lineno"> 1059 </span><span class="spaces"> </span><span class="nottickedoff">let ani = fn initSVG</span>
|
||||
<span class="lineno"> 1060 </span><span class="spaces"> </span><span class="nottickedoff">oTween o (duration ani) $ \t obj -></span>
|
||||
<span class="lineno"> 1061 </span><span class="spaces"> </span><span class="nottickedoff">obj{ _oSVG = getAnimationFrame SyncStretch ani t 1 }</span>
|
||||
<span class="lineno"> 1062 </span><span class="spaces"> </span><span class="nottickedoff">oModify o $ \obj -> obj { _oSVG = initSVG }</span>
|
||||
<span class="lineno"> 1063 </span><span class="spaces"> </span><span class="nottickedoff">oModify o $ oShown .~ False</span></span>
|
||||
<span class="lineno"> 1064 </span>
|
||||
<span class="lineno"> 1065 </span>-- | Fade in object over a set duration.
|
||||
<span class="lineno"> 1066 </span>oFadeIn :: SVG -> Animation
|
||||
<span class="lineno"> 1067 </span><span class="decl"><span class="nottickedoff">oFadeIn svg = animate $ \t -> withGroupOpacity t svg</span></span>
|
||||
<span class="lineno"> 1068 </span>
|
||||
<span class="lineno"> 1069 </span>-- | Fade out object over a set duration.
|
||||
<span class="lineno"> 1070 </span>oFadeOut :: SVG -> Animation
|
||||
<span class="lineno"> 1071 </span><span class="decl"><span class="nottickedoff">oFadeOut = reverseA . oFadeIn</span></span>
|
||||
<span class="lineno"> 1072 </span>
|
||||
<span class="lineno"> 1073 </span>-- | Scale in object over a set duration.
|
||||
<span class="lineno"> 1074 </span>oGrow :: SVG -> Animation
|
||||
<span class="lineno"> 1075 </span><span class="decl"><span class="nottickedoff">oGrow svg = animate $ \t -> scale t svg</span></span>
|
||||
<span class="lineno"> 1076 </span>
|
||||
<span class="lineno"> 1077 </span>-- | Scale out object over a set duration.
|
||||
<span class="lineno"> 1078 </span>oShrink :: SVG -> Animation
|
||||
<span class="lineno"> 1079 </span><span class="decl"><span class="nottickedoff">oShrink = reverseA . oGrow</span></span>
|
||||
<span class="lineno"> 1080 </span>
|
||||
<span class="lineno"> 1081 </span>type Origin = (Double, Double)
|
||||
<span class="lineno"> 1082 </span>
|
||||
<span class="lineno"> 1083 </span>svgOrigin :: SVG -> Origin -> (Double, Double)
|
||||
<span class="lineno"> 1084 </span><span class="decl"><span class="nottickedoff">svgOrigin svg (originX, originY) =</span>
|
||||
<span class="lineno"> 1085 </span><span class="spaces"> </span><span class="nottickedoff">case boundingBox svg of</span>
|
||||
<span class="lineno"> 1086 </span><span class="spaces"> </span><span class="nottickedoff">(polyX, polyY, polyWidth, polyHeight) -></span>
|
||||
<span class="lineno"> 1087 </span><span class="spaces"> </span><span class="nottickedoff">( polyX + polyWidth * originX</span>
|
||||
<span class="lineno"> 1088 </span><span class="spaces"> </span><span class="nottickedoff">, polyY + polyHeight * originY)</span></span>
|
||||
<span class="lineno"> 1043 </span>-------------------------------------------------------------------------------
|
||||
<span class="lineno"> 1044 </span>-- Graphical transformations
|
||||
<span class="lineno"> 1045 </span>
|
||||
<span class="lineno"> 1046 </span>-- | Instantly show object.
|
||||
<span class="lineno"> 1047 </span>oShow :: Object s a -> Scene s ()
|
||||
<span class="lineno"> 1048 </span><span class="decl"><span class="nottickedoff">oShow o = oModify o $ oShown .~ True</span></span>
|
||||
<span class="lineno"> 1049 </span>
|
||||
<span class="lineno"> 1050 </span>-- | Instantly hide object.
|
||||
<span class="lineno"> 1051 </span>oHide :: Object s a -> Scene s ()
|
||||
<span class="lineno"> 1052 </span><span class="decl"><span class="nottickedoff">oHide o = oModify o $ oShown .~ False</span></span>
|
||||
<span class="lineno"> 1053 </span>
|
||||
<span class="lineno"> 1054 </span>oShowWith :: Object s a -> (SVG -> Animation) -> Scene s ()
|
||||
<span class="lineno"> 1055 </span><span class="decl"><span class="nottickedoff">oShowWith o fn = do</span>
|
||||
<span class="lineno"> 1056 </span><span class="spaces"> </span><span class="nottickedoff">oModify o $ oShown .~ True</span>
|
||||
<span class="lineno"> 1057 </span><span class="spaces"> </span><span class="nottickedoff">initSVG <- oRead o oSVG</span>
|
||||
<span class="lineno"> 1058 </span><span class="spaces"> </span><span class="nottickedoff">let ani = fn initSVG</span>
|
||||
<span class="lineno"> 1059 </span><span class="spaces"> </span><span class="nottickedoff">oTween o (duration ani) $ \t obj -></span>
|
||||
<span class="lineno"> 1060 </span><span class="spaces"> </span><span class="nottickedoff">obj{ _oSVG = getAnimationFrame SyncStretch ani t 1 }</span>
|
||||
<span class="lineno"> 1061 </span><span class="spaces"> </span><span class="nottickedoff">oModify o $ \obj -> obj { _oSVG = initSVG }</span></span>
|
||||
<span class="lineno"> 1062 </span>
|
||||
<span class="lineno"> 1063 </span>oHideWith :: Object s a -> (SVG -> Animation) -> Scene s ()
|
||||
<span class="lineno"> 1064 </span><span class="decl"><span class="nottickedoff">oHideWith o fn = do</span>
|
||||
<span class="lineno"> 1065 </span><span class="spaces"> </span><span class="nottickedoff">initSVG <- oRead o oSVG</span>
|
||||
<span class="lineno"> 1066 </span><span class="spaces"> </span><span class="nottickedoff">let ani = fn initSVG</span>
|
||||
<span class="lineno"> 1067 </span><span class="spaces"> </span><span class="nottickedoff">oTween o (duration ani) $ \t obj -></span>
|
||||
<span class="lineno"> 1068 </span><span class="spaces"> </span><span class="nottickedoff">obj{ _oSVG = getAnimationFrame SyncStretch ani t 1 }</span>
|
||||
<span class="lineno"> 1069 </span><span class="spaces"> </span><span class="nottickedoff">oModify o $ \obj -> obj { _oSVG = initSVG }</span>
|
||||
<span class="lineno"> 1070 </span><span class="spaces"> </span><span class="nottickedoff">oModify o $ oShown .~ False</span></span>
|
||||
<span class="lineno"> 1071 </span>
|
||||
<span class="lineno"> 1072 </span>-- | Fade in object over a set duration.
|
||||
<span class="lineno"> 1073 </span>oFadeIn :: SVG -> Animation
|
||||
<span class="lineno"> 1074 </span><span class="decl"><span class="nottickedoff">oFadeIn svg = animate $ \t -> withGroupOpacity t svg</span></span>
|
||||
<span class="lineno"> 1075 </span>
|
||||
<span class="lineno"> 1076 </span>-- | Fade out object over a set duration.
|
||||
<span class="lineno"> 1077 </span>oFadeOut :: SVG -> Animation
|
||||
<span class="lineno"> 1078 </span><span class="decl"><span class="nottickedoff">oFadeOut = reverseA . oFadeIn</span></span>
|
||||
<span class="lineno"> 1079 </span>
|
||||
<span class="lineno"> 1080 </span>-- | Scale in object over a set duration.
|
||||
<span class="lineno"> 1081 </span>oGrow :: SVG -> Animation
|
||||
<span class="lineno"> 1082 </span><span class="decl"><span class="nottickedoff">oGrow svg = animate $ \t -> scale t svg</span></span>
|
||||
<span class="lineno"> 1083 </span>
|
||||
<span class="lineno"> 1084 </span>-- | Scale out object over a set duration.
|
||||
<span class="lineno"> 1085 </span>oShrink :: SVG -> Animation
|
||||
<span class="lineno"> 1086 </span><span class="decl"><span class="nottickedoff">oShrink = reverseA . oGrow</span></span>
|
||||
<span class="lineno"> 1087 </span>
|
||||
<span class="lineno"> 1088 </span>type Origin = (Double, Double)
|
||||
<span class="lineno"> 1089 </span>
|
||||
<span class="lineno"> 1090 </span>oScaleIn :: SVG -> Animation
|
||||
<span class="lineno"> 1091 </span><span class="decl"><span class="nottickedoff">oScaleIn = oScaleIn' (curveS 2) (0.5,1)</span></span>
|
||||
<span class="lineno"> 1092 </span>
|
||||
<span class="lineno"> 1093 </span>oScaleIn' :: Signal -> Origin -> SVG -> Animation
|
||||
<span class="lineno"> 1094 </span><span class="decl"><span class="nottickedoff">oScaleIn' easing origin = oStagger' 0.05 $ \svg -></span>
|
||||
<span class="lineno"> 1095 </span><span class="spaces"> </span><span class="nottickedoff">let (cx, cy) = svgOrigin svg origin</span>
|
||||
<span class="lineno"> 1096 </span><span class="spaces"> </span><span class="nottickedoff">in signalA easing $ mkAnimation 0.3 $ \t -></span>
|
||||
<span class="lineno"> 1097 </span><span class="spaces"> </span><span class="nottickedoff">translate cx cy $</span>
|
||||
<span class="lineno"> 1098 </span><span class="spaces"> </span><span class="nottickedoff">scale t $</span>
|
||||
<span class="lineno"> 1099 </span><span class="spaces"> </span><span class="nottickedoff">translate (-cx) (-cy) $</span>
|
||||
<span class="lineno"> 1100 </span><span class="spaces"> </span><span class="nottickedoff">svg</span></span>
|
||||
<span class="lineno"> 1101 </span>
|
||||
<span class="lineno"> 1102 </span>oScaleOut :: SVG -> Animation
|
||||
<span class="lineno"> 1103 </span><span class="decl"><span class="nottickedoff">oScaleOut = reverseA . oStaggerRev' 0.05 (oScaleIn' (curveS 2) (0.5,0))</span></span>
|
||||
<span class="lineno"> 1104 </span>
|
||||
<span class="lineno"> 1105 </span>oScaleOut' :: Signal -> Origin -> SVG -> Animation
|
||||
<span class="lineno"> 1106 </span><span class="decl"><span class="nottickedoff">oScaleOut' easing origin = reverseA . oStaggerRev' 0.05 (oScaleIn' easing origin)</span></span>
|
||||
<span class="lineno"> 1107 </span>
|
||||
<span class="lineno"> 1108 </span>oSim :: (SVG -> Animation) -> SVG -> Animation
|
||||
<span class="lineno"> 1109 </span><span class="decl"><span class="nottickedoff">oSim = oStagger' 0</span></span>
|
||||
<span class="lineno"> 1110 </span>
|
||||
<span class="lineno"> 1111 </span>-- oSim (oStagger fn) = oSim fn
|
||||
<span class="lineno"> 1112 </span>-- oStagger (oStagger fn) = oStagger fn
|
||||
<span class="lineno"> 1113 </span>oStagger :: (SVG -> Animation) -> SVG -> Animation
|
||||
<span class="lineno"> 1114 </span><span class="decl"><span class="nottickedoff">oStagger = oStagger' 0.2</span></span>
|
||||
<span class="lineno"> 1115 </span>
|
||||
<span class="lineno"> 1116 </span>oStaggerRev :: (SVG -> Animation) -> SVG -> Animation
|
||||
<span class="lineno"> 1117 </span><span class="decl"><span class="nottickedoff">oStaggerRev = oStaggerRev' 0.2</span></span>
|
||||
<span class="lineno"> 1118 </span>
|
||||
<span class="lineno"> 1119 </span>oStagger' :: Duration -> (SVG -> Animation) -> SVG -> Animation
|
||||
<span class="lineno"> 1120 </span><span class="decl"><span class="nottickedoff">oStagger' staggerDelay fn svg = scene $</span>
|
||||
<span class="lineno"> 1121 </span><span class="spaces"> </span><span class="nottickedoff">forM_ (svgGlyphs svg) $ \(ctx, _attr, node) -> do</span>
|
||||
<span class="lineno"> 1122 </span><span class="spaces"> </span><span class="nottickedoff">void $ fork $ newSpriteA' SyncFreeze (fn $ ctx node)</span>
|
||||
<span class="lineno"> 1123 </span><span class="spaces"> </span><span class="nottickedoff">wait staggerDelay</span></span>
|
||||
<span class="lineno"> 1124 </span>
|
||||
<span class="lineno"> 1125 </span>oStaggerRev' :: Duration -> (SVG -> Animation) -> SVG -> Animation
|
||||
<span class="lineno"> 1126 </span><span class="decl"><span class="nottickedoff">oStaggerRev' staggerDelay fn svg = scene $</span>
|
||||
<span class="lineno"> 1127 </span><span class="spaces"> </span><span class="nottickedoff">forM_ (reverse $ svgGlyphs svg) $ \(ctx, _attr, node) -> do</span>
|
||||
<span class="lineno"> 1128 </span><span class="spaces"> </span><span class="nottickedoff">void $ fork $ newSpriteA' SyncFreeze (fn $ ctx node)</span>
|
||||
<span class="lineno"> 1129 </span><span class="spaces"> </span><span class="nottickedoff">wait staggerDelay</span></span>
|
||||
<span class="lineno"> 1130 </span>
|
||||
<span class="lineno"> 1131 </span>oDraw :: SVG -> Animation
|
||||
<span class="lineno"> 1132 </span><span class="decl"><span class="nottickedoff">oDraw = oStagger $ \svg -> scene $ do</span>
|
||||
<span class="lineno"> 1133 </span><span class="spaces"> </span><span class="nottickedoff">forM_ (svgGlyphs $ pathify svg) $ \(ctx, attr, node) -> do</span>
|
||||
<span class="lineno"> 1134 </span><span class="spaces"> </span><span class="nottickedoff">let sWidth =</span>
|
||||
<span class="lineno"> 1135 </span><span class="spaces"> </span><span class="nottickedoff">case toUserUnit defaultDPI <$> getLast (attr ^. strokeWidth) of</span>
|
||||
<span class="lineno"> 1136 </span><span class="spaces"> </span><span class="nottickedoff">Just (Num d) -> max defaultStrokeWidth d</span>
|
||||
<span class="lineno"> 1137 </span><span class="spaces"> </span><span class="nottickedoff">_ -> defaultStrokeWidth</span>
|
||||
<span class="lineno"> 1138 </span><span class="spaces"> </span><span class="nottickedoff">-- wait 1</span>
|
||||
<span class="lineno"> 1139 </span><span class="spaces"> </span><span class="nottickedoff">play $</span>
|
||||
<span class="lineno"> 1140 </span><span class="spaces"> </span><span class="nottickedoff">mapA ctx $</span>
|
||||
<span class="lineno"> 1141 </span><span class="spaces"> </span><span class="nottickedoff">applyE (overEnding fillDur $ fadeLineOutE sWidth) $</span>
|
||||
<span class="lineno"> 1142 </span><span class="spaces"> </span><span class="nottickedoff">animate $ \t -> withStrokeWidth sWidth $</span>
|
||||
<span class="lineno"> 1143 </span><span class="spaces"> </span><span class="nottickedoff">mkGroup</span>
|
||||
<span class="lineno"> 1144 </span><span class="spaces"> </span><span class="nottickedoff">[withFillOpacity 0 $ partialSvg t node]</span>
|
||||
<span class="lineno"> 1145 </span><span class="spaces"> </span><span class="nottickedoff">wait (-fillDur)</span>
|
||||
<span class="lineno"> 1146 </span><span class="spaces"> </span><span class="nottickedoff">newSpriteA' SyncFreeze $ mkAnimation fillDur $ \t -></span>
|
||||
<span class="lineno"> 1147 </span><span class="spaces"> </span><span class="nottickedoff">withGroupOpacity t $</span>
|
||||
<span class="lineno"> 1148 </span><span class="spaces"> </span><span class="nottickedoff">mkGroup [ ctx node ]</span>
|
||||
<span class="lineno"> 1149 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 1150 </span><span class="spaces"> </span><span class="nottickedoff">fillDur = 0.3</span></span>
|
||||
<span class="lineno"> 1151 </span>
|
||||
<span class="lineno"> 1152 </span>_oBalloon :: SVG -> Animation
|
||||
<span class="lineno"> 1153 </span><span class="decl"><span class="nottickedoff">_oBalloon = animate . balloon</span></span>
|
||||
<span class="lineno"> 1154 </span>
|
||||
<span class="lineno"> 1155 </span>-- FIXME: Also transform attributes: 'opacity', 'scale', 'scaleOrigin'.
|
||||
<span class="lineno"> 1156 </span>-- | Morph source object into target object over a set duration.
|
||||
<span class="lineno"> 1157 </span>oTransform :: Object s a -> Object s b -> Duration -> Scene s ()
|
||||
<span class="lineno"> 1158 </span><span class="decl"><span class="nottickedoff">oTransform src dst d = do</span>
|
||||
<span class="lineno"> 1159 </span><span class="spaces"> </span><span class="nottickedoff">srcSvg <- oRead src oSVG</span>
|
||||
<span class="lineno"> 1160 </span><span class="spaces"> </span><span class="nottickedoff">srcCtx <- oRead src oContext</span>
|
||||
<span class="lineno"> 1161 </span><span class="spaces"> </span><span class="nottickedoff">srcEase <- oRead src oEasing</span>
|
||||
<span class="lineno"> 1162 </span><span class="spaces"> </span><span class="nottickedoff">srcLoc <- oRead src oTranslate</span>
|
||||
<span class="lineno"> 1163 </span><span class="spaces"> </span><span class="nottickedoff">oModify src $ oShown .~ False</span>
|
||||
<span class="lineno"> 1164 </span><span class="spaces"></span><span class="nottickedoff"></span>
|
||||
<span class="lineno"> 1165 </span><span class="spaces"> </span><span class="nottickedoff">dstSvg <- oRead dst oSVG</span>
|
||||
<span class="lineno"> 1166 </span><span class="spaces"> </span><span class="nottickedoff">dstCtx <- oRead dst oContext</span>
|
||||
<span class="lineno"> 1167 </span><span class="spaces"> </span><span class="nottickedoff">dstLoc <- oRead dst oTranslate</span>
|
||||
<span class="lineno"> 1168 </span><span class="spaces"></span><span class="nottickedoff"></span>
|
||||
<span class="lineno"> 1169 </span><span class="spaces"> </span><span class="nottickedoff">m <- newObject $ Morph 0 (srcCtx srcSvg) (dstCtx dstSvg)</span>
|
||||
<span class="lineno"> 1170 </span><span class="spaces"> </span><span class="nottickedoff">oModifyS m $ do</span>
|
||||
<span class="lineno"> 1171 </span><span class="spaces"> </span><span class="nottickedoff">oShown .= True</span>
|
||||
<span class="lineno"> 1172 </span><span class="spaces"> </span><span class="nottickedoff">oEasing .= srcEase</span>
|
||||
<span class="lineno"> 1173 </span><span class="spaces"> </span><span class="nottickedoff">oTranslate .= srcLoc</span>
|
||||
<span class="lineno"> 1174 </span><span class="spaces"> </span><span class="nottickedoff">fork $ oTween m d $ \t -> oTranslate %~ moveTo t dstLoc</span>
|
||||
<span class="lineno"> 1175 </span><span class="spaces"> </span><span class="nottickedoff">oTweenV m d $ \t -> morphDelta .~ t</span>
|
||||
<span class="lineno"> 1176 </span><span class="spaces"> </span><span class="nottickedoff">oModify m $ oShown .~ False</span>
|
||||
<span class="lineno"> 1177 </span><span class="spaces"> </span><span class="nottickedoff">oModify dst $ oShown .~ True</span>
|
||||
<span class="lineno"> 1178 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 1179 </span><span class="spaces"> </span><span class="nottickedoff">moveTo t (dstX, dstY) (srcX, srcY) =</span>
|
||||
<span class="lineno"> 1180 </span><span class="spaces"> </span><span class="nottickedoff">(fromToS srcX dstX t, fromToS srcY dstY t)</span></span>
|
||||
<span class="lineno"> 1181 </span>
|
||||
<span class="lineno"> 1182 </span>
|
||||
<span class="lineno"> 1183 </span>-------------------------------------------------------------------------------
|
||||
<span class="lineno"> 1184 </span>-- Built-in objects
|
||||
<span class="lineno"> 1185 </span>
|
||||
<span class="lineno"> 1186 </span>-- | Basic object mapping to \<circle\/\> in SVG.
|
||||
<span class="lineno"> 1187 </span>newtype Circle = Circle {<span class="nottickedoff"><span class="decl"><span class="nottickedoff">_circleRadius</span></span></span> :: Double}
|
||||
<span class="lineno"> 1090 </span>svgOrigin :: SVG -> Origin -> (Double, Double)
|
||||
<span class="lineno"> 1091 </span><span class="decl"><span class="nottickedoff">svgOrigin svg (originX, originY) =</span>
|
||||
<span class="lineno"> 1092 </span><span class="spaces"> </span><span class="nottickedoff">case boundingBox svg of</span>
|
||||
<span class="lineno"> 1093 </span><span class="spaces"> </span><span class="nottickedoff">(polyX, polyY, polyWidth, polyHeight) -></span>
|
||||
<span class="lineno"> 1094 </span><span class="spaces"> </span><span class="nottickedoff">( polyX + polyWidth * originX</span>
|
||||
<span class="lineno"> 1095 </span><span class="spaces"> </span><span class="nottickedoff">, polyY + polyHeight * originY)</span></span>
|
||||
<span class="lineno"> 1096 </span>
|
||||
<span class="lineno"> 1097 </span>oScaleIn :: SVG -> Animation
|
||||
<span class="lineno"> 1098 </span><span class="decl"><span class="nottickedoff">oScaleIn = oScaleIn' (curveS 2) (0.5,1)</span></span>
|
||||
<span class="lineno"> 1099 </span>
|
||||
<span class="lineno"> 1100 </span>oScaleIn' :: Signal -> Origin -> SVG -> Animation
|
||||
<span class="lineno"> 1101 </span><span class="decl"><span class="nottickedoff">oScaleIn' easing origin = oStagger' 0.05 $ \svg -></span>
|
||||
<span class="lineno"> 1102 </span><span class="spaces"> </span><span class="nottickedoff">let (cx, cy) = svgOrigin svg origin</span>
|
||||
<span class="lineno"> 1103 </span><span class="spaces"> </span><span class="nottickedoff">in signalA easing $ mkAnimation 0.3 $ \t -></span>
|
||||
<span class="lineno"> 1104 </span><span class="spaces"> </span><span class="nottickedoff">translate cx cy $</span>
|
||||
<span class="lineno"> 1105 </span><span class="spaces"> </span><span class="nottickedoff">scale t $</span>
|
||||
<span class="lineno"> 1106 </span><span class="spaces"> </span><span class="nottickedoff">translate (-cx) (-cy) $</span>
|
||||
<span class="lineno"> 1107 </span><span class="spaces"> </span><span class="nottickedoff">svg</span></span>
|
||||
<span class="lineno"> 1108 </span>
|
||||
<span class="lineno"> 1109 </span>oScaleOut :: SVG -> Animation
|
||||
<span class="lineno"> 1110 </span><span class="decl"><span class="nottickedoff">oScaleOut = reverseA . oStaggerRev' 0.05 (oScaleIn' (curveS 2) (0.5,0))</span></span>
|
||||
<span class="lineno"> 1111 </span>
|
||||
<span class="lineno"> 1112 </span>oScaleOut' :: Signal -> Origin -> SVG -> Animation
|
||||
<span class="lineno"> 1113 </span><span class="decl"><span class="nottickedoff">oScaleOut' easing origin = reverseA . oStaggerRev' 0.05 (oScaleIn' easing origin)</span></span>
|
||||
<span class="lineno"> 1114 </span>
|
||||
<span class="lineno"> 1115 </span>oSim :: (SVG -> Animation) -> SVG -> Animation
|
||||
<span class="lineno"> 1116 </span><span class="decl"><span class="nottickedoff">oSim = oStagger' 0</span></span>
|
||||
<span class="lineno"> 1117 </span>
|
||||
<span class="lineno"> 1118 </span>-- oSim (oStagger fn) = oSim fn
|
||||
<span class="lineno"> 1119 </span>-- oStagger (oStagger fn) = oStagger fn
|
||||
<span class="lineno"> 1120 </span>oStagger :: (SVG -> Animation) -> SVG -> Animation
|
||||
<span class="lineno"> 1121 </span><span class="decl"><span class="nottickedoff">oStagger = oStagger' 0.2</span></span>
|
||||
<span class="lineno"> 1122 </span>
|
||||
<span class="lineno"> 1123 </span>oStaggerRev :: (SVG -> Animation) -> SVG -> Animation
|
||||
<span class="lineno"> 1124 </span><span class="decl"><span class="nottickedoff">oStaggerRev = oStaggerRev' 0.2</span></span>
|
||||
<span class="lineno"> 1125 </span>
|
||||
<span class="lineno"> 1126 </span>oStagger' :: Duration -> (SVG -> Animation) -> SVG -> Animation
|
||||
<span class="lineno"> 1127 </span><span class="decl"><span class="nottickedoff">oStagger' staggerDelay fn svg = scene $</span>
|
||||
<span class="lineno"> 1128 </span><span class="spaces"> </span><span class="nottickedoff">forM_ (svgGlyphs svg) $ \(ctx, _attr, node) -> do</span>
|
||||
<span class="lineno"> 1129 </span><span class="spaces"> </span><span class="nottickedoff">void $ fork $ newSpriteA' SyncFreeze (fn $ ctx node)</span>
|
||||
<span class="lineno"> 1130 </span><span class="spaces"> </span><span class="nottickedoff">wait staggerDelay</span></span>
|
||||
<span class="lineno"> 1131 </span>
|
||||
<span class="lineno"> 1132 </span>oStaggerRev' :: Duration -> (SVG -> Animation) -> SVG -> Animation
|
||||
<span class="lineno"> 1133 </span><span class="decl"><span class="nottickedoff">oStaggerRev' staggerDelay fn svg = scene $</span>
|
||||
<span class="lineno"> 1134 </span><span class="spaces"> </span><span class="nottickedoff">forM_ (reverse $ svgGlyphs svg) $ \(ctx, _attr, node) -> do</span>
|
||||
<span class="lineno"> 1135 </span><span class="spaces"> </span><span class="nottickedoff">void $ fork $ newSpriteA' SyncFreeze (fn $ ctx node)</span>
|
||||
<span class="lineno"> 1136 </span><span class="spaces"> </span><span class="nottickedoff">wait staggerDelay</span></span>
|
||||
<span class="lineno"> 1137 </span>
|
||||
<span class="lineno"> 1138 </span>oDraw :: SVG -> Animation
|
||||
<span class="lineno"> 1139 </span><span class="decl"><span class="nottickedoff">oDraw = oStagger $ \svg -> scene $ do</span>
|
||||
<span class="lineno"> 1140 </span><span class="spaces"> </span><span class="nottickedoff">forM_ (svgGlyphs $ pathify svg) $ \(ctx, attr, node) -> do</span>
|
||||
<span class="lineno"> 1141 </span><span class="spaces"> </span><span class="nottickedoff">let sWidth =</span>
|
||||
<span class="lineno"> 1142 </span><span class="spaces"> </span><span class="nottickedoff">case toUserUnit defaultDPI <$> getLast (attr ^. strokeWidth) of</span>
|
||||
<span class="lineno"> 1143 </span><span class="spaces"> </span><span class="nottickedoff">Just (Num d) -> max defaultStrokeWidth d</span>
|
||||
<span class="lineno"> 1144 </span><span class="spaces"> </span><span class="nottickedoff">_ -> defaultStrokeWidth</span>
|
||||
<span class="lineno"> 1145 </span><span class="spaces"> </span><span class="nottickedoff">-- wait 1</span>
|
||||
<span class="lineno"> 1146 </span><span class="spaces"> </span><span class="nottickedoff">play $</span>
|
||||
<span class="lineno"> 1147 </span><span class="spaces"> </span><span class="nottickedoff">mapA ctx $</span>
|
||||
<span class="lineno"> 1148 </span><span class="spaces"> </span><span class="nottickedoff">applyE (overEnding fillDur $ fadeLineOutE sWidth) $</span>
|
||||
<span class="lineno"> 1149 </span><span class="spaces"> </span><span class="nottickedoff">animate $ \t -> withStrokeWidth sWidth $</span>
|
||||
<span class="lineno"> 1150 </span><span class="spaces"> </span><span class="nottickedoff">mkGroup</span>
|
||||
<span class="lineno"> 1151 </span><span class="spaces"> </span><span class="nottickedoff">[withFillOpacity 0 $ partialSvg t node]</span>
|
||||
<span class="lineno"> 1152 </span><span class="spaces"> </span><span class="nottickedoff">wait (-fillDur)</span>
|
||||
<span class="lineno"> 1153 </span><span class="spaces"> </span><span class="nottickedoff">newSpriteA' SyncFreeze $ mkAnimation fillDur $ \t -></span>
|
||||
<span class="lineno"> 1154 </span><span class="spaces"> </span><span class="nottickedoff">withGroupOpacity t $</span>
|
||||
<span class="lineno"> 1155 </span><span class="spaces"> </span><span class="nottickedoff">mkGroup [ ctx node ]</span>
|
||||
<span class="lineno"> 1156 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 1157 </span><span class="spaces"> </span><span class="nottickedoff">fillDur = 0.3</span></span>
|
||||
<span class="lineno"> 1158 </span>
|
||||
<span class="lineno"> 1159 </span>_oBalloon :: SVG -> Animation
|
||||
<span class="lineno"> 1160 </span><span class="decl"><span class="nottickedoff">_oBalloon = animate . balloon</span></span>
|
||||
<span class="lineno"> 1161 </span>
|
||||
<span class="lineno"> 1162 </span>-- FIXME: Also transform attributes: 'opacity', 'scale', 'scaleOrigin'.
|
||||
<span class="lineno"> 1163 </span>-- | Morph source object into target object over a set duration.
|
||||
<span class="lineno"> 1164 </span>oTransform :: Object s a -> Object s b -> Duration -> Scene s ()
|
||||
<span class="lineno"> 1165 </span><span class="decl"><span class="nottickedoff">oTransform src dst d = do</span>
|
||||
<span class="lineno"> 1166 </span><span class="spaces"> </span><span class="nottickedoff">srcSvg <- oRead src oSVG</span>
|
||||
<span class="lineno"> 1167 </span><span class="spaces"> </span><span class="nottickedoff">srcCtx <- oRead src oContext</span>
|
||||
<span class="lineno"> 1168 </span><span class="spaces"> </span><span class="nottickedoff">srcEase <- oRead src oEasing</span>
|
||||
<span class="lineno"> 1169 </span><span class="spaces"> </span><span class="nottickedoff">srcLoc <- oRead src oTranslate</span>
|
||||
<span class="lineno"> 1170 </span><span class="spaces"> </span><span class="nottickedoff">oModify src $ oShown .~ False</span>
|
||||
<span class="lineno"> 1171 </span><span class="spaces"></span><span class="nottickedoff"></span>
|
||||
<span class="lineno"> 1172 </span><span class="spaces"> </span><span class="nottickedoff">dstSvg <- oRead dst oSVG</span>
|
||||
<span class="lineno"> 1173 </span><span class="spaces"> </span><span class="nottickedoff">dstCtx <- oRead dst oContext</span>
|
||||
<span class="lineno"> 1174 </span><span class="spaces"> </span><span class="nottickedoff">dstLoc <- oRead dst oTranslate</span>
|
||||
<span class="lineno"> 1175 </span><span class="spaces"></span><span class="nottickedoff"></span>
|
||||
<span class="lineno"> 1176 </span><span class="spaces"> </span><span class="nottickedoff">m <- newObject $ Morph 0 (srcCtx srcSvg) (dstCtx dstSvg)</span>
|
||||
<span class="lineno"> 1177 </span><span class="spaces"> </span><span class="nottickedoff">oModifyS m $ do</span>
|
||||
<span class="lineno"> 1178 </span><span class="spaces"> </span><span class="nottickedoff">oShown .= True</span>
|
||||
<span class="lineno"> 1179 </span><span class="spaces"> </span><span class="nottickedoff">oEasing .= srcEase</span>
|
||||
<span class="lineno"> 1180 </span><span class="spaces"> </span><span class="nottickedoff">oTranslate .= srcLoc</span>
|
||||
<span class="lineno"> 1181 </span><span class="spaces"> </span><span class="nottickedoff">fork $ oTween m d $ \t -> oTranslate %~ moveTo t dstLoc</span>
|
||||
<span class="lineno"> 1182 </span><span class="spaces"> </span><span class="nottickedoff">oTweenV m d $ \t -> morphDelta .~ t</span>
|
||||
<span class="lineno"> 1183 </span><span class="spaces"> </span><span class="nottickedoff">oModify m $ oShown .~ False</span>
|
||||
<span class="lineno"> 1184 </span><span class="spaces"> </span><span class="nottickedoff">oModify dst $ oShown .~ True</span>
|
||||
<span class="lineno"> 1185 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 1186 </span><span class="spaces"> </span><span class="nottickedoff">moveTo t (dstX, dstY) (srcX, srcY) =</span>
|
||||
<span class="lineno"> 1187 </span><span class="spaces"> </span><span class="nottickedoff">(fromToS srcX dstX t, fromToS srcY dstY t)</span></span>
|
||||
<span class="lineno"> 1188 </span>
|
||||
<span class="lineno"> 1189 </span>-- | Circle radius in local units.
|
||||
<span class="lineno"> 1190 </span>circleRadius :: Lens' Circle Double
|
||||
<span class="lineno"> 1191 </span><span class="decl"><span class="nottickedoff">circleRadius = iso _circleRadius Circle</span></span>
|
||||
<span class="lineno"> 1189 </span>
|
||||
<span class="lineno"> 1190 </span>-------------------------------------------------------------------------------
|
||||
<span class="lineno"> 1191 </span>-- Built-in objects
|
||||
<span class="lineno"> 1192 </span>
|
||||
<span class="lineno"> 1193 </span>instance Renderable Circle where
|
||||
<span class="lineno"> 1194 </span> <span class="decl"><span class="nottickedoff">toSVG (Circle r) = mkCircle r</span></span>
|
||||
<span class="lineno"> 1193 </span>-- | Basic object mapping to \<circle\/\> in SVG.
|
||||
<span class="lineno"> 1194 </span>newtype Circle = Circle {<span class="nottickedoff"><span class="decl"><span class="nottickedoff">_circleRadius</span></span></span> :: Double}
|
||||
<span class="lineno"> 1195 </span>
|
||||
<span class="lineno"> 1196 </span>-- | Basic object mapping to \<rect\/\> in SVG.
|
||||
<span class="lineno"> 1197 </span>data Rectangle = Rectangle { <span class="nottickedoff"><span class="decl"><span class="nottickedoff">_rectWidth</span></span></span> :: Double, <span class="nottickedoff"><span class="decl"><span class="nottickedoff">_rectHeight</span></span></span> :: Double }
|
||||
<span class="lineno"> 1198 </span>
|
||||
<span class="lineno"> 1199 </span>-- | Rectangle width in local units.
|
||||
<span class="lineno"> 1200 </span>rectWidth :: Lens' Rectangle Double
|
||||
<span class="lineno"> 1201 </span><span class="decl"><span class="nottickedoff">rectWidth = lens _rectWidth $ \obj val -> obj{_rectWidth=val}</span></span>
|
||||
<span class="lineno"> 1196 </span>-- | Circle radius in local units.
|
||||
<span class="lineno"> 1197 </span>circleRadius :: Lens' Circle Double
|
||||
<span class="lineno"> 1198 </span><span class="decl"><span class="nottickedoff">circleRadius = iso _circleRadius Circle</span></span>
|
||||
<span class="lineno"> 1199 </span>
|
||||
<span class="lineno"> 1200 </span>instance Renderable Circle where
|
||||
<span class="lineno"> 1201 </span> <span class="decl"><span class="nottickedoff">toSVG (Circle r) = mkCircle r</span></span>
|
||||
<span class="lineno"> 1202 </span>
|
||||
<span class="lineno"> 1203 </span>-- | Rectangle height in local units.
|
||||
<span class="lineno"> 1204 </span>rectHeight :: Lens' Rectangle Double
|
||||
<span class="lineno"> 1205 </span><span class="decl"><span class="nottickedoff">rectHeight = lens _rectHeight $ \obj val -> obj{_rectHeight=val}</span></span>
|
||||
<span class="lineno"> 1206 </span>
|
||||
<span class="lineno"> 1207 </span>instance Renderable Rectangle where
|
||||
<span class="lineno"> 1208 </span> <span class="decl"><span class="nottickedoff">toSVG (Rectangle w h) = mkRect w h</span></span>
|
||||
<span class="lineno"> 1203 </span>-- | Basic object mapping to \<rect\/\> in SVG.
|
||||
<span class="lineno"> 1204 </span>data Rectangle = Rectangle { <span class="nottickedoff"><span class="decl"><span class="nottickedoff">_rectWidth</span></span></span> :: Double, <span class="nottickedoff"><span class="decl"><span class="nottickedoff">_rectHeight</span></span></span> :: Double }
|
||||
<span class="lineno"> 1205 </span>
|
||||
<span class="lineno"> 1206 </span>-- | Rectangle width in local units.
|
||||
<span class="lineno"> 1207 </span>rectWidth :: Lens' Rectangle Double
|
||||
<span class="lineno"> 1208 </span><span class="decl"><span class="nottickedoff">rectWidth = lens _rectWidth $ \obj val -> obj{_rectWidth=val}</span></span>
|
||||
<span class="lineno"> 1209 </span>
|
||||
<span class="lineno"> 1210 </span>-- | Object representing an interpolation between SVG nodes.
|
||||
<span class="lineno"> 1211 </span>data Morph = Morph { <span class="nottickedoff"><span class="decl"><span class="nottickedoff">_morphDelta</span></span></span> :: Double, <span class="nottickedoff"><span class="decl"><span class="nottickedoff">_morphSrc</span></span></span> :: SVG, <span class="nottickedoff"><span class="decl"><span class="nottickedoff">_morphDst</span></span></span> :: SVG }
|
||||
<span class="lineno"> 1212 </span>
|
||||
<span class="lineno"> 1213 </span>-- | Control variable for the interpolation. A value of 0 gives the
|
||||
<span class="lineno"> 1214 </span>-- source SVG and 1 gives the target svg.
|
||||
<span class="lineno"> 1215 </span>morphDelta :: Lens' Morph Double
|
||||
<span class="lineno"> 1216 </span><span class="decl"><span class="nottickedoff">morphDelta = lens _morphDelta $ \obj val -> obj{_morphDelta = val}</span></span>
|
||||
<span class="lineno"> 1217 </span>
|
||||
<span class="lineno"> 1218 </span>-- | Source shape.
|
||||
<span class="lineno"> 1219 </span>morphSrc :: Lens' Morph SVG
|
||||
<span class="lineno"> 1220 </span><span class="decl"><span class="nottickedoff">morphSrc = lens _morphSrc $ \obj val -> obj{_morphSrc = val}</span></span>
|
||||
<span class="lineno"> 1221 </span>
|
||||
<span class="lineno"> 1222 </span>-- | Target shape.
|
||||
<span class="lineno"> 1223 </span>morphDst :: Lens' Morph SVG
|
||||
<span class="lineno"> 1224 </span><span class="decl"><span class="nottickedoff">morphDst = lens _morphDst $ \obj val -> obj{_morphDst = val}</span></span>
|
||||
<span class="lineno"> 1225 </span>
|
||||
<span class="lineno"> 1226 </span>instance Renderable Morph where
|
||||
<span class="lineno"> 1227 </span> <span class="decl"><span class="nottickedoff">toSVG (Morph t src dst) = morph linear src dst t</span></span>
|
||||
<span class="lineno"> 1210 </span>-- | Rectangle height in local units.
|
||||
<span class="lineno"> 1211 </span>rectHeight :: Lens' Rectangle Double
|
||||
<span class="lineno"> 1212 </span><span class="decl"><span class="nottickedoff">rectHeight = lens _rectHeight $ \obj val -> obj{_rectHeight=val}</span></span>
|
||||
<span class="lineno"> 1213 </span>
|
||||
<span class="lineno"> 1214 </span>instance Renderable Rectangle where
|
||||
<span class="lineno"> 1215 </span> <span class="decl"><span class="nottickedoff">toSVG (Rectangle w h) = mkRect w h</span></span>
|
||||
<span class="lineno"> 1216 </span>
|
||||
<span class="lineno"> 1217 </span>-- | Object representing an interpolation between SVG nodes.
|
||||
<span class="lineno"> 1218 </span>data Morph = Morph { <span class="nottickedoff"><span class="decl"><span class="nottickedoff">_morphDelta</span></span></span> :: Double, <span class="nottickedoff"><span class="decl"><span class="nottickedoff">_morphSrc</span></span></span> :: SVG, <span class="nottickedoff"><span class="decl"><span class="nottickedoff">_morphDst</span></span></span> :: SVG }
|
||||
<span class="lineno"> 1219 </span>
|
||||
<span class="lineno"> 1220 </span>-- | Control variable for the interpolation. A value of 0 gives the
|
||||
<span class="lineno"> 1221 </span>-- source SVG and 1 gives the target svg.
|
||||
<span class="lineno"> 1222 </span>morphDelta :: Lens' Morph Double
|
||||
<span class="lineno"> 1223 </span><span class="decl"><span class="nottickedoff">morphDelta = lens _morphDelta $ \obj val -> obj{_morphDelta = val}</span></span>
|
||||
<span class="lineno"> 1224 </span>
|
||||
<span class="lineno"> 1225 </span>-- | Source shape.
|
||||
<span class="lineno"> 1226 </span>morphSrc :: Lens' Morph SVG
|
||||
<span class="lineno"> 1227 </span><span class="decl"><span class="nottickedoff">morphSrc = lens _morphSrc $ \obj val -> obj{_morphSrc = val}</span></span>
|
||||
<span class="lineno"> 1228 </span>
|
||||
<span class="lineno"> 1229 </span>-- | Cameras can take control of objects and manipulate them
|
||||
<span class="lineno"> 1230 </span>-- with convenient pan and zoom operations.
|
||||
<span class="lineno"> 1231 </span>data Camera = Camera
|
||||
<span class="lineno"> 1232 </span>instance Renderable Camera where
|
||||
<span class="lineno"> 1233 </span> <span class="decl"><span class="nottickedoff">toSVG Camera = None</span></span>
|
||||
<span class="lineno"> 1234 </span>
|
||||
<span class="lineno"> 1235 </span>-- | Connect an object to a camera such that
|
||||
<span class="lineno"> 1236 </span>-- camera settings (position, zoom, and rotation) is
|
||||
<span class="lineno"> 1237 </span>-- applied to the object.
|
||||
<span class="lineno"> 1238 </span>--
|
||||
<span class="lineno"> 1239 </span>-- Example
|
||||
<span class="lineno"> 1240 </span>--
|
||||
<span class="lineno"> 1241 </span>-- @
|
||||
<span class="lineno"> 1242 </span>-- do cam \<- 'newObject' 'Camera'
|
||||
<span class="lineno"> 1243 </span>-- circ \<- 'newObject' $ 'Circle' 2
|
||||
<span class="lineno"> 1244 </span>-- 'oModifyS' circ $
|
||||
<span class="lineno"> 1245 </span>-- 'oContext' .= 'withFillOpacity' 1 . 'withFillColor' "blue"
|
||||
<span class="lineno"> 1246 </span>-- 'oShow' circ
|
||||
<span class="lineno"> 1247 </span>-- 'cameraAttach' cam circ
|
||||
<span class="lineno"> 1248 </span>-- 'cameraZoom' cam 1 2
|
||||
<span class="lineno"> 1249 </span>-- 'cameraZoom' cam 1 1
|
||||
<span class="lineno"> 1250 </span>-- @
|
||||
<span class="lineno"> 1251 </span>--
|
||||
<span class="lineno"> 1252 </span>-- <<docs/gifs/doc_cameraAttach.gif>>
|
||||
<span class="lineno"> 1253 </span>cameraAttach :: Object s Camera -> Object s a -> Scene s ()
|
||||
<span class="lineno"> 1254 </span><span class="decl"><span class="nottickedoff">cameraAttach cam obj =</span>
|
||||
<span class="lineno"> 1255 </span><span class="spaces"> </span><span class="nottickedoff">spriteModify (objectSprite obj) $ do</span>
|
||||
<span class="lineno"> 1256 </span><span class="spaces"> </span><span class="nottickedoff">camData <- unVar (objectData cam)</span>
|
||||
<span class="lineno"> 1257 </span><span class="spaces"> </span><span class="nottickedoff">return $ \(svg,zindex) -></span>
|
||||
<span class="lineno"> 1258 </span><span class="spaces"> </span><span class="nottickedoff">let (x,y) = camData^.oTranslate</span>
|
||||
<span class="lineno"> 1259 </span><span class="spaces"> </span><span class="nottickedoff">ctx =</span>
|
||||
<span class="lineno"> 1260 </span><span class="spaces"> </span><span class="nottickedoff">translate (-x) (-y) .</span>
|
||||
<span class="lineno"> 1261 </span><span class="spaces"> </span><span class="nottickedoff">uncurry translate (camData^.oScaleOrigin) .</span>
|
||||
<span class="lineno"> 1262 </span><span class="spaces"> </span><span class="nottickedoff">scale (camData^.oScale) .</span>
|
||||
<span class="lineno"> 1263 </span><span class="spaces"> </span><span class="nottickedoff">uncurry translate (camData^.oScaleOrigin & both %~ negate)</span>
|
||||
<span class="lineno"> 1264 </span><span class="spaces"> </span><span class="nottickedoff">in (ctx svg, zindex)</span></span>
|
||||
<span class="lineno"> 1265 </span>
|
||||
<span class="lineno"> 1266 </span>-- |
|
||||
<span class="lineno"> 1267 </span>--
|
||||
<span class="lineno"> 1268 </span>-- Example
|
||||
<span class="lineno"> 1269 </span>--
|
||||
<span class="lineno"> 1270 </span>-- @
|
||||
<span class="lineno"> 1271 </span>-- do cam \<- 'newObject' 'Camera'
|
||||
<span class="lineno"> 1272 </span>-- circ \<- 'newObject' $ 'Circle' 2; 'oShow' circ
|
||||
<span class="lineno"> 1273 </span>-- 'oModify' circ $ 'oTranslate' .~ (-3,0)
|
||||
<span class="lineno"> 1274 </span>-- box \<- 'newObject' $ 'Rectangle' 4 4; 'oShow' box
|
||||
<span class="lineno"> 1275 </span>-- 'oModify' box $ 'oTranslate' .~ (3,0)
|
||||
<span class="lineno"> 1276 </span>-- 'cameraAttach' cam circ
|
||||
<span class="lineno"> 1277 </span>-- 'cameraAttach' cam box
|
||||
<span class="lineno"> 1278 </span>-- 'cameraFocus' cam (-3,0)
|
||||
<span class="lineno"> 1279 </span>-- 'cameraZoom' cam 2 2 -- Zoom in
|
||||
<span class="lineno"> 1280 </span>-- 'cameraZoom' cam 2 1 -- Zoom out
|
||||
<span class="lineno"> 1281 </span>-- 'cameraFocus' cam (3,0)
|
||||
<span class="lineno"> 1282 </span>-- 'cameraZoom' cam 2 2 -- Zoom in
|
||||
<span class="lineno"> 1283 </span>-- 'cameraZoom' cam 2 1 -- Zoom out
|
||||
<span class="lineno"> 1284 </span>-- @
|
||||
<span class="lineno"> 1285 </span>--
|
||||
<span class="lineno"> 1286 </span>-- <<docs/gifs/doc_cameraFocus.gif>>
|
||||
<span class="lineno"> 1287 </span>cameraFocus :: Object s Camera -> (Double, Double) -> Scene s ()
|
||||
<span class="lineno"> 1288 </span><span class="decl"><span class="nottickedoff">cameraFocus cam (x,y) = do</span>
|
||||
<span class="lineno"> 1289 </span><span class="spaces"> </span><span class="nottickedoff">(ox, oy) <- oRead cam oScaleOrigin</span>
|
||||
<span class="lineno"> 1290 </span><span class="spaces"> </span><span class="nottickedoff">(tx, ty) <- oRead cam oTranslate</span>
|
||||
<span class="lineno"> 1291 </span><span class="spaces"> </span><span class="nottickedoff">s <- oRead cam oScale</span>
|
||||
<span class="lineno"> 1292 </span><span class="spaces"> </span><span class="nottickedoff">let newLocation = (x-((x-ox)*s+ox-tx), y-((y-oy)*s+oy-ty))</span>
|
||||
<span class="lineno"> 1293 </span><span class="spaces"> </span><span class="nottickedoff">oModifyS cam $ do</span>
|
||||
<span class="lineno"> 1294 </span><span class="spaces"> </span><span class="nottickedoff">oTranslate .= newLocation</span>
|
||||
<span class="lineno"> 1295 </span><span class="spaces"> </span><span class="nottickedoff">oScaleOrigin .= (x,y)</span></span>
|
||||
<span class="lineno"> 1296 </span>
|
||||
<span class="lineno"> 1297 </span>-- | Instantaneously set camera zoom level.
|
||||
<span class="lineno"> 1298 </span>cameraSetZoom :: Object s Camera -> Double -> Scene s ()
|
||||
<span class="lineno"> 1299 </span><span class="decl"><span class="nottickedoff">cameraSetZoom cam s =</span>
|
||||
<span class="lineno"> 1300 </span><span class="spaces"> </span><span class="nottickedoff">oModifyS cam $</span>
|
||||
<span class="lineno"> 1301 </span><span class="spaces"> </span><span class="nottickedoff">oScale .= s</span></span>
|
||||
<span class="lineno"> 1302 </span>
|
||||
<span class="lineno"> 1303 </span>-- | Change camera zoom level over a set duration.
|
||||
<span class="lineno"> 1304 </span>cameraZoom :: Object s Camera -> Duration -> Double -> Scene s ()
|
||||
<span class="lineno"> 1305 </span><span class="decl"><span class="nottickedoff">cameraZoom cam d s =</span>
|
||||
<span class="lineno"> 1306 </span><span class="spaces"> </span><span class="nottickedoff">oTweenS cam d $ \t -></span>
|
||||
<span class="lineno"> 1307 </span><span class="spaces"> </span><span class="nottickedoff">oScale %= \v -> fromToS v s t</span></span>
|
||||
<span class="lineno"> 1308 </span>
|
||||
<span class="lineno"> 1309 </span>-- | Instantaneously set camera location.
|
||||
<span class="lineno"> 1310 </span>cameraSetPan :: Object s Camera -> (Double, Double) -> Scene s ()
|
||||
<span class="lineno"> 1311 </span><span class="decl"><span class="nottickedoff">cameraSetPan cam location =</span>
|
||||
<span class="lineno"> 1312 </span><span class="spaces"> </span><span class="nottickedoff">oModifyS cam $ do</span>
|
||||
<span class="lineno"> 1313 </span><span class="spaces"> </span><span class="nottickedoff">oTranslate .= location</span></span>
|
||||
<span class="lineno"> 1314 </span>
|
||||
<span class="lineno"> 1315 </span>-- | Change camera location over a set duration.
|
||||
<span class="lineno"> 1316 </span>cameraPan :: Object s Camera -> Duration -> (Double, Double) -> Scene s ()
|
||||
<span class="lineno"> 1317 </span><span class="decl"><span class="nottickedoff">cameraPan cam d (x,y) =</span>
|
||||
<span class="lineno"> 1318 </span><span class="spaces"> </span><span class="nottickedoff">oTweenS cam d $ \t -> do</span>
|
||||
<span class="lineno"> 1319 </span><span class="spaces"> </span><span class="nottickedoff">oTranslate._1 %= \v -> fromToS v x t</span>
|
||||
<span class="lineno"> 1320 </span><span class="spaces"> </span><span class="nottickedoff">oTranslate._2 %= \v -> fromToS v y t</span></span>
|
||||
<span class="lineno"> 1229 </span>-- | Target shape.
|
||||
<span class="lineno"> 1230 </span>morphDst :: Lens' Morph SVG
|
||||
<span class="lineno"> 1231 </span><span class="decl"><span class="nottickedoff">morphDst = lens _morphDst $ \obj val -> obj{_morphDst = val}</span></span>
|
||||
<span class="lineno"> 1232 </span>
|
||||
<span class="lineno"> 1233 </span>instance Renderable Morph where
|
||||
<span class="lineno"> 1234 </span> <span class="decl"><span class="nottickedoff">toSVG (Morph t src dst) = morph linear src dst t</span></span>
|
||||
<span class="lineno"> 1235 </span>
|
||||
<span class="lineno"> 1236 </span>-- | Cameras can take control of objects and manipulate them
|
||||
<span class="lineno"> 1237 </span>-- with convenient pan and zoom operations.
|
||||
<span class="lineno"> 1238 </span>data Camera = Camera
|
||||
<span class="lineno"> 1239 </span>instance Renderable Camera where
|
||||
<span class="lineno"> 1240 </span> <span class="decl"><span class="nottickedoff">toSVG Camera = None</span></span>
|
||||
<span class="lineno"> 1241 </span>
|
||||
<span class="lineno"> 1242 </span>-- | Connect an object to a camera such that
|
||||
<span class="lineno"> 1243 </span>-- camera settings (position, zoom, and rotation) is
|
||||
<span class="lineno"> 1244 </span>-- applied to the object.
|
||||
<span class="lineno"> 1245 </span>--
|
||||
<span class="lineno"> 1246 </span>-- Example
|
||||
<span class="lineno"> 1247 </span>--
|
||||
<span class="lineno"> 1248 </span>-- @
|
||||
<span class="lineno"> 1249 </span>-- do cam \<- 'newObject' 'Camera'
|
||||
<span class="lineno"> 1250 </span>-- circ \<- 'newObject' $ 'Circle' 2
|
||||
<span class="lineno"> 1251 </span>-- 'oModifyS' circ $
|
||||
<span class="lineno"> 1252 </span>-- 'oContext' .= 'withFillOpacity' 1 . 'withFillColor' "blue"
|
||||
<span class="lineno"> 1253 </span>-- 'oShow' circ
|
||||
<span class="lineno"> 1254 </span>-- 'cameraAttach' cam circ
|
||||
<span class="lineno"> 1255 </span>-- 'cameraZoom' cam 1 2
|
||||
<span class="lineno"> 1256 </span>-- 'cameraZoom' cam 1 1
|
||||
<span class="lineno"> 1257 </span>-- @
|
||||
<span class="lineno"> 1258 </span>--
|
||||
<span class="lineno"> 1259 </span>-- <<docs/gifs/doc_cameraAttach.gif>>
|
||||
<span class="lineno"> 1260 </span>cameraAttach :: Object s Camera -> Object s a -> Scene s ()
|
||||
<span class="lineno"> 1261 </span><span class="decl"><span class="nottickedoff">cameraAttach cam obj =</span>
|
||||
<span class="lineno"> 1262 </span><span class="spaces"> </span><span class="nottickedoff">spriteModify (objectSprite obj) $ do</span>
|
||||
<span class="lineno"> 1263 </span><span class="spaces"> </span><span class="nottickedoff">camData <- unVar (objectData cam)</span>
|
||||
<span class="lineno"> 1264 </span><span class="spaces"> </span><span class="nottickedoff">return $ \(svg,zindex) -></span>
|
||||
<span class="lineno"> 1265 </span><span class="spaces"> </span><span class="nottickedoff">let (x,y) = camData^.oTranslate</span>
|
||||
<span class="lineno"> 1266 </span><span class="spaces"> </span><span class="nottickedoff">ctx =</span>
|
||||
<span class="lineno"> 1267 </span><span class="spaces"> </span><span class="nottickedoff">translate (-x) (-y) .</span>
|
||||
<span class="lineno"> 1268 </span><span class="spaces"> </span><span class="nottickedoff">uncurry translate (camData^.oScaleOrigin) .</span>
|
||||
<span class="lineno"> 1269 </span><span class="spaces"> </span><span class="nottickedoff">scale (camData^.oScale) .</span>
|
||||
<span class="lineno"> 1270 </span><span class="spaces"> </span><span class="nottickedoff">uncurry translate (camData^.oScaleOrigin & both %~ negate)</span>
|
||||
<span class="lineno"> 1271 </span><span class="spaces"> </span><span class="nottickedoff">in (ctx svg, zindex)</span></span>
|
||||
<span class="lineno"> 1272 </span>
|
||||
<span class="lineno"> 1273 </span>-- |
|
||||
<span class="lineno"> 1274 </span>--
|
||||
<span class="lineno"> 1275 </span>-- Example
|
||||
<span class="lineno"> 1276 </span>--
|
||||
<span class="lineno"> 1277 </span>-- @
|
||||
<span class="lineno"> 1278 </span>-- do cam \<- 'newObject' 'Camera'
|
||||
<span class="lineno"> 1279 </span>-- circ \<- 'newObject' $ 'Circle' 2; 'oShow' circ
|
||||
<span class="lineno"> 1280 </span>-- 'oModify' circ $ 'oTranslate' .~ (-3,0)
|
||||
<span class="lineno"> 1281 </span>-- box \<- 'newObject' $ 'Rectangle' 4 4; 'oShow' box
|
||||
<span class="lineno"> 1282 </span>-- 'oModify' box $ 'oTranslate' .~ (3,0)
|
||||
<span class="lineno"> 1283 </span>-- 'cameraAttach' cam circ
|
||||
<span class="lineno"> 1284 </span>-- 'cameraAttach' cam box
|
||||
<span class="lineno"> 1285 </span>-- 'cameraFocus' cam (-3,0)
|
||||
<span class="lineno"> 1286 </span>-- 'cameraZoom' cam 2 2 -- Zoom in
|
||||
<span class="lineno"> 1287 </span>-- 'cameraZoom' cam 2 1 -- Zoom out
|
||||
<span class="lineno"> 1288 </span>-- 'cameraFocus' cam (3,0)
|
||||
<span class="lineno"> 1289 </span>-- 'cameraZoom' cam 2 2 -- Zoom in
|
||||
<span class="lineno"> 1290 </span>-- 'cameraZoom' cam 2 1 -- Zoom out
|
||||
<span class="lineno"> 1291 </span>-- @
|
||||
<span class="lineno"> 1292 </span>--
|
||||
<span class="lineno"> 1293 </span>-- <<docs/gifs/doc_cameraFocus.gif>>
|
||||
<span class="lineno"> 1294 </span>cameraFocus :: Object s Camera -> (Double, Double) -> Scene s ()
|
||||
<span class="lineno"> 1295 </span><span class="decl"><span class="nottickedoff">cameraFocus cam (x,y) = do</span>
|
||||
<span class="lineno"> 1296 </span><span class="spaces"> </span><span class="nottickedoff">(ox, oy) <- oRead cam oScaleOrigin</span>
|
||||
<span class="lineno"> 1297 </span><span class="spaces"> </span><span class="nottickedoff">(tx, ty) <- oRead cam oTranslate</span>
|
||||
<span class="lineno"> 1298 </span><span class="spaces"> </span><span class="nottickedoff">s <- oRead cam oScale</span>
|
||||
<span class="lineno"> 1299 </span><span class="spaces"> </span><span class="nottickedoff">let newLocation = (x-((x-ox)*s+ox-tx), y-((y-oy)*s+oy-ty))</span>
|
||||
<span class="lineno"> 1300 </span><span class="spaces"> </span><span class="nottickedoff">oModifyS cam $ do</span>
|
||||
<span class="lineno"> 1301 </span><span class="spaces"> </span><span class="nottickedoff">oTranslate .= newLocation</span>
|
||||
<span class="lineno"> 1302 </span><span class="spaces"> </span><span class="nottickedoff">oScaleOrigin .= (x,y)</span></span>
|
||||
<span class="lineno"> 1303 </span>
|
||||
<span class="lineno"> 1304 </span>-- | Instantaneously set camera zoom level.
|
||||
<span class="lineno"> 1305 </span>cameraSetZoom :: Object s Camera -> Double -> Scene s ()
|
||||
<span class="lineno"> 1306 </span><span class="decl"><span class="nottickedoff">cameraSetZoom cam s =</span>
|
||||
<span class="lineno"> 1307 </span><span class="spaces"> </span><span class="nottickedoff">oModifyS cam $</span>
|
||||
<span class="lineno"> 1308 </span><span class="spaces"> </span><span class="nottickedoff">oScale .= s</span></span>
|
||||
<span class="lineno"> 1309 </span>
|
||||
<span class="lineno"> 1310 </span>-- | Change camera zoom level over a set duration.
|
||||
<span class="lineno"> 1311 </span>cameraZoom :: Object s Camera -> Duration -> Double -> Scene s ()
|
||||
<span class="lineno"> 1312 </span><span class="decl"><span class="nottickedoff">cameraZoom cam d s =</span>
|
||||
<span class="lineno"> 1313 </span><span class="spaces"> </span><span class="nottickedoff">oTweenS cam d $ \t -></span>
|
||||
<span class="lineno"> 1314 </span><span class="spaces"> </span><span class="nottickedoff">oScale %= \v -> fromToS v s t</span></span>
|
||||
<span class="lineno"> 1315 </span>
|
||||
<span class="lineno"> 1316 </span>-- | Instantaneously set camera location.
|
||||
<span class="lineno"> 1317 </span>cameraSetPan :: Object s Camera -> (Double, Double) -> Scene s ()
|
||||
<span class="lineno"> 1318 </span><span class="decl"><span class="nottickedoff">cameraSetPan cam location =</span>
|
||||
<span class="lineno"> 1319 </span><span class="spaces"> </span><span class="nottickedoff">oModifyS cam $ do</span>
|
||||
<span class="lineno"> 1320 </span><span class="spaces"> </span><span class="nottickedoff">oTranslate .= location</span></span>
|
||||
<span class="lineno"> 1321 </span>
|
||||
<span class="lineno"> 1322 </span>-- | Change camera location over a set duration.
|
||||
<span class="lineno"> 1323 </span>cameraPan :: Object s Camera -> Duration -> (Double, Double) -> Scene s ()
|
||||
<span class="lineno"> 1324 </span><span class="decl"><span class="nottickedoff">cameraPan cam d (x,y) =</span>
|
||||
<span class="lineno"> 1325 </span><span class="spaces"> </span><span class="nottickedoff">oTweenS cam d $ \t -> do</span>
|
||||
<span class="lineno"> 1326 </span><span class="spaces"> </span><span class="nottickedoff">oTranslate._1 %= \v -> fromToS v x t</span>
|
||||
<span class="lineno"> 1327 </span><span class="spaces"> </span><span class="nottickedoff">oTranslate._2 %= \v -> fromToS v y t</span></span>
|
||||
|
||||
</pre>
|
||||
</body>
|
||||
|
|
|
|||
Loading…
Reference in a new issue