computerscare-vcv-modules

computerscare modules for VCV Rack
Log | Files | Refs

commit 165c0703111ae3e11d0254d4a88b3c3c9170ab2c
parent d41bece8fcdd35441c3e45e3d906ee75d5fe75b7
Author: Adam M <aemalone@gmail.com>
Date:   Sat, 27 Oct 2018 00:52:06 -0500

I Love Cookies start

Diffstat:
Ares/ComputerscareILoveCookiesPanel.svg | 387+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/Computerscare.cpp | 1+
Msrc/Computerscare.hpp | 1+
Asrc/ComputerscareILoveCookies.cpp | 334+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 723 insertions(+), 0 deletions(-)

diff --git a/res/ComputerscareILoveCookiesPanel.svg b/res/ComputerscareILoveCookiesPanel.svg @@ -0,0 +1,387 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="200" + height="380" + viewBox="0 0 52.916669 100.54167" + version="1.1" + id="svg8" + inkscape:version="0.92.2 5c3e80d, 2017-08-06" + sodipodi:docname="ComputerscareILoveCookiesPanel.svg" + style="enable-background:new"> + <defs + id="defs2"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 50.270835 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="23.812501 : 50.270835 : 1" + inkscape:persp3d-origin="11.906251 : 33.51389 : 1" + id="perspective1881" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.4142136" + inkscape:cx="26.10989" + inkscape:cy="139.24147" + inkscape:document-units="mm" + inkscape:current-layer="text1651" + showgrid="false" + units="px" + inkscape:snap-bbox="true" + inkscape:snap-page="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:window-width="1440" + inkscape:window-height="856" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="0" + inkscape:snap-nodes="false" + inkscape:snap-others="false" + inkscape:snap-global="false" /> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + style="display:inline" + transform="translate(0,-196.45832)" + id="g1669" + inkscape:groupmode="layer" + inkscape:label="Layer 1 copy"> + <path + inkscape:connector-curvature="0" + id="path1647" + d="M 0,196.45832 H 52.916667 V 297 H 0 Z" + style="opacity:1;vector-effect:none;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.72459143;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> + <g + aria-label="computerscare" + transform="matrix(0.98656289,0.0441007,-0.12576361,1.0079983,50.102321,-2.779225)" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + id="text1651"> + <path + d="m 6.6805153,294.74087 -0.016688,0.21573 q -0.091784,-0.0455 -0.1869432,-0.0633 -0.093833,-0.0192 -0.1922912,-0.0106 -0.2202194,0.0192 -0.3530674,0.17279 -0.1327584,0.15233 -0.1526496,0.40948 -0.019887,0.25711 0.090844,0.38948 0.1108289,0.13112 0.3310431,0.11194 0.098425,-0.009 0.1964041,-0.0432 0.09932,-0.036 0.1994563,-0.0984 l -0.016492,0.21322 q -0.09823,0.0535 -0.2020758,0.0849 -0.1026226,0.0313 -0.2170348,0.0413 -0.3112454,0.027 -0.4791286,-0.15633 -0.1678799,-0.18346 -0.1416814,-0.52211 0.026586,-0.34368 0.226355,-0.55668 0.2009995,-0.2131 0.523323,-0.24118 0.1045662,-0.009 0.2024381,0.006 0.098002,0.0127 0.1881007,0.0485 z" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.23769678" + id="path1701" + inkscape:connector-curvature="0" /> + <path + d="m 7.6022319,294.7677 q -0.1820776,0.0159 -0.2991302,0.17058 -0.1169599,0.15346 -0.1364596,0.40556 -0.019498,0.25212 0.073816,0.3885 0.094643,0.13502 0.277948,0.11906 0.1808374,-0.0158 0.297902,-0.17048 0.1170552,-0.15472 0.1364596,-0.40557 0.01931,-0.24958 -0.075238,-0.38588 -0.094449,-0.13753 -0.2752952,-0.12177 z m 0.015134,-0.19566 q 0.2952536,-0.0257 0.4486639,0.15525 0.153406,0.18099 0.1266273,0.52716 -0.026679,0.34494 -0.2104596,0.55653 -0.1836786,0.21035 -0.4789357,0.23608 -0.2964931,0.0258 -0.4498964,-0.15514 -0.1520785,-0.18236 -0.1253963,-0.52727 0.026781,-0.34618 0.2092287,-0.55642 0.1836792,-0.21036 0.4801681,-0.23619 z" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.23769678" + id="path1703" + inkscape:connector-curvature="0" /> + <path + d="m 10.251377,294.84502 q 0.17921,-0.12523 0.345108,-0.18504 0.165889,-0.0598 0.331807,-0.0603 0.223344,-4.8e-4 0.254151,0.12307 0.03156,0.12267 -0.134593,0.35048 l -0.496966,0.68144 -0.23608,9e-5 0.492559,-0.67539 q 0.118357,-0.1623 0.102964,-0.24074 -0.01541,-0.0784 -0.164722,-0.078 -0.1825,4.4e-4 -0.358263,0.0965 -0.175764,0.096 -0.296331,0.26137 l -0.4653557,0.6381 -0.2360821,9e-5 0.4925593,-0.6754 q 0.1190965,-0.16331 0.1029539,-0.24073 -0.015409,-0.0784 -0.1672727,-0.078 -0.1799435,4e-4 -0.3564458,0.0975 -0.1757627,0.096 -0.2955924,0.26035 l -0.4653582,0.63811 -0.2360748,9e-5 0.8233759,-1.12901 0.2360804,-9e-5 -0.127912,0.17539 q 0.1561197,-0.10403 0.3044503,-0.15374 0.1483225,-0.0497 0.3027299,-0.05 0.155711,-6.2e-4 0.218621,0.0618 0.06418,0.0622 0.02976,0.18102 z" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.21756229" + id="path1705" + inkscape:connector-curvature="0" /> + <path + d="m 11.470278,295.6447 -0.166298,0.6538 -0.226498,0.0407 0.432828,-1.70163 0.226499,-0.0406 -0.04759,0.1871 q 0.09895,-0.12297 0.220025,-0.1954 0.122591,-0.0737 0.27304,-0.10108 0.249389,-0.0458 0.35952,0.10461 0.111224,0.14981 0.03731,0.4404 -0.07392,0.29057 -0.275835,0.49738 -0.2007,0.20658 -0.450227,0.25202 -0.150376,0.0276 -0.245911,-0.006 -0.09391,-0.0342 -0.136875,-0.13149 z m 0.875182,-0.56976 q 0.05684,-0.22343 -0.01371,-0.33131 -0.06905,-0.10919 -0.247639,-0.0767 -0.178587,0.0325 -0.313807,0.1789 -0.133721,0.14505 -0.190557,0.36849 -0.05684,0.22344 0.01221,0.33263 0.07055,0.10787 0.249141,0.0754 0.178588,-0.0325 0.312306,-0.17756 0.135225,-0.14638 0.192054,-0.36983 z" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.21756229" + id="path1707" + inkscape:connector-curvature="0" /> + <path + d="m 12.631037,295.5364 0.491324,-0.73927 0.234932,5e-4 -0.486251,0.73166 q -0.115221,0.17336 -0.09403,0.26066 0.0219,0.0862 0.180229,0.0863 0.190253,2e-5 0.368889,-0.10335 0.17992,-0.1035 0.298766,-0.28232 l 0.460161,-0.6924 0.23493,5.1e-4 -0.811622,1.22122 -0.234932,-5.1e-4 0.124642,-0.18755 q -0.15946,0.11115 -0.309324,0.16557 -0.147856,0.0533 -0.297227,0.0532 -0.246395,-9.2e-4 -0.287136,-0.13115 -0.04071,-0.13096 0.126673,-0.38281 z" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.2266023" + id="path1709" + inkscape:connector-curvature="0" /> + <path + d="m 14.922754,294.31023 -0.0074,0.31552 0.490495,-10e-4 -0.0033,0.14188 -0.490495,10e-4 -0.01421,0.60325 q -0.0032,0.13593 0.04376,0.17449 0.04828,0.0385 0.1971,0.0381 l 0.244588,-8e-4 -0.0036,0.15279 -0.24459,8e-4 q -0.275683,10e-4 -0.378642,-0.0773 -0.102958,-0.0791 -0.09804,-0.28743 l 0.0142,-0.60324 -0.174707,3.2e-4 0.0033,-0.14189 0.174708,-3.2e-4 0.0074,-0.31552 z" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.21756229" + id="path1711" + inkscape:connector-curvature="0" /> + <path + d="m 16.94157,295.07858 -0.0011,0.0968 -1.095364,-5.5e-4 q 0.01312,0.20442 0.143907,0.31207 0.132097,0.10657 0.369038,0.1067 0.137232,2.4e-4 0.265754,-0.0278 0.129809,-0.0279 0.257357,-0.0838 l -0.0022,0.1872 q -0.128717,0.0451 -0.26365,0.0687 -0.134936,0.0236 -0.273472,0.0235 -0.34698,-6.1e-4 -0.548281,-0.16812 -0.199994,-0.16793 -0.196604,-0.45409 0.0035,-0.29585 0.197182,-0.46896 0.194983,-0.17417 0.521261,-0.174 0.292604,2.1e-4 0.460367,0.1573 0.169059,0.15608 0.165873,0.42504 z m -0.237545,-0.0583 q -7.08e-4,-0.16245 -0.106982,-0.25931 -0.105024,-0.0969 -0.28111,-0.097 -0.199387,-4.6e-4 -0.320912,0.0934 -0.120228,0.0935 -0.140368,0.26351 z" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.2266023" + id="path1713" + inkscape:connector-curvature="0" /> + <path + d="m 18.549259,294.59448 q -0.05705,-0.0213 -0.122602,-0.0295 -0.06376,-0.0115 -0.139034,-0.011 -0.267558,1.2e-4 -0.387876,0.12251 -0.118969,0.11945 -0.07508,0.34233 l 0.136229,0.69199 -0.316855,0.003 -0.258668,-1.31363 0.316855,-0.003 0.04014,0.20407 q 0.07586,-0.12023 0.223981,-0.17893 0.147867,-0.0598 0.375872,-0.0614 0.03256,-2.3e-4 0.07273,0.003 0.03969,0.003 0.08898,0.007 z" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.27243829" + id="path1715" + inkscape:connector-curvature="0" /> + <path + d="m 20.020774,294.70537 0.163841,0.15458 q -0.169368,-0.0451 -0.330051,-0.0731 -0.160718,-0.0281 -0.312717,-0.0391 -0.231342,-0.0167 -0.308256,0.0123 -0.07522,0.0291 0.0038,0.10366 0.06024,0.0569 0.177817,0.0957 0.116672,0.038 0.397635,0.0853 l 0.119486,0.0201 q 0.370505,0.0612 0.581467,0.13959 0.21171,0.0776 0.340721,0.19936 0.146886,0.13858 0.02317,0.2043 -0.122019,0.0658 -0.486704,0.0396 -0.151904,-0.0109 -0.334439,-0.0389 -0.179827,-0.027 -0.395147,-0.0712 l -0.178909,-0.1688 q 0.222156,0.0595 0.414732,0.0956 0.191703,0.0352 0.355387,0.0469 0.219567,0.0159 0.29632,-0.0147 0.07583,-0.0314 -4.15e-4,-0.1034 -0.07064,-0.0666 -0.194414,-0.10839 -0.122062,-0.0416 -0.445674,-0.0953 l -0.122185,-0.0211 q -0.322573,-0.0528 -0.520655,-0.12782 -0.198958,-0.0759 -0.321363,-0.19139 -0.148765,-0.14036 -0.04062,-0.20312 0.108159,-0.0628 0.456066,-0.0376 0.172254,0.0125 0.338359,0.0367 0.166102,0.0243 0.322671,0.0602 z" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.22598772" + id="path1717" + inkscape:connector-curvature="0" /> + <path + d="m 21.07703,294.34744 0.202525,0.15424 q -0.170334,-0.038 -0.316101,-0.056 -0.145478,-0.019 -0.2681,-0.0182 -0.275278,10e-4 -0.292155,0.10462 -0.0188,0.10219 0.222524,0.28601 0.241357,0.18381 0.527353,0.28518 0.284858,0.10046 0.559379,0.0989 0.122248,-10e-4 0.217613,-0.0202 0.09529,-0.0204 0.164278,-0.0596 l 0.200173,0.15242 q -0.07566,0.0329 -0.181797,0.0498 -0.104608,0.0168 -0.247111,0.0177 -0.387915,0.002 -0.803708,-0.1391 -0.415675,-0.14127 -0.733518,-0.38337 -0.322586,-0.2457 -0.277333,-0.38778 0.04677,-0.14208 0.448589,-0.14434 0.12975,-10e-4 0.275701,0.0146 0.144236,0.0145 0.302094,0.0454 z" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.22598772" + id="path1719" + inkscape:connector-curvature="0" /> + <path + d="m 22.852612,294.8592 q -0.323826,0.0145 -0.379334,0.0668 -0.0554,0.0523 0.112069,0.165 0.133534,0.0898 0.305426,0.13883 0.172032,0.048 0.333192,0.0408 0.222208,-0.01 0.208762,-0.11484 -0.01338,-0.1059 -0.258531,-0.27084 l -0.05591,-0.0376 z m 0.429558,-0.0934 0.87031,0.58557 -0.266295,0.0125 -0.231538,-0.15579 q 0.04741,0.0975 -0.02238,0.14854 -0.07123,0.05 -0.268633,0.0589 -0.249863,0.0111 -0.528734,-0.0703 -0.278814,-0.0823 -0.499448,-0.23079 -0.25748,-0.17321 -0.205161,-0.26933 0.05373,-0.0962 0.418283,-0.11244 l 0.374754,-0.0167 -0.02447,-0.0164 q -0.172958,-0.11637 -0.388957,-0.17416 -0.215912,-0.0588 -0.435279,-0.049 -0.139718,0.006 -0.24028,0.0332 -0.100886,0.027 -0.160131,0.0747 l -0.231519,-0.15578 q 0.09362,-0.0423 0.20567,-0.0658 0.110747,-0.0245 0.241429,-0.0303 0.353293,-0.0155 0.698876,0.092 0.345914,0.1077 0.69458,0.34229 z" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.22872864" + id="path1721" + inkscape:connector-curvature="0" /> + <path + d="m 24.273091,294.36188 q -0.07114,-0.0156 -0.13655,-0.021 -0.06558,-0.006 -0.129387,-0.003 -0.226834,0.01 -0.201179,0.11456 0.02574,0.10364 0.301345,0.28875 l 0.85584,0.57481 -0.269621,0.0113 -1.624583,-1.09115 0.269623,-0.0113 0.252401,0.16951 q -0.06357,-0.10305 6.35e-4,-0.15667 0.06271,-0.0546 0.25629,-0.063 0.0278,-10e-4 0.06512,-2e-5 0.03622,3.3e-4 0.08513,0.005 z" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.23585747" + id="path1723" + inkscape:connector-curvature="0" /> + <path + d="m 26.435459,294.65755 0.122579,0.0825 -1.228813,0.0547 q 0.276221,0.17333 0.560566,0.25837 0.284441,0.0841 0.550258,0.0722 0.153887,-0.007 0.262416,-0.0371 0.109851,-0.0303 0.181351,-0.0843 l 0.236966,0.15945 q -0.0865,0.045 -0.207612,0.0718 -0.121116,0.0269 -0.276504,0.0338 -0.389855,0.0169 -0.829772,-0.11545 -0.43907,-0.13286 -0.801349,-0.3766 -0.37454,-0.252 -0.378879,-0.40914 -0.0042,-0.15809 0.361815,-0.1744 0.328175,-0.0147 0.717379,0.11068 0.389237,0.12434 0.729734,0.35344 z m -0.340851,-0.0376 q -0.208621,-0.13824 -0.451691,-0.21534 -0.241692,-0.0772 -0.439223,-0.0683 -0.224707,0.009 -0.240259,0.0957 -0.01515,0.0857 0.17973,0.23137 z" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.22872864" + id="path1725" + inkscape:connector-curvature="0" /> + <g + aria-label="rst" + transform="matrix(1.9119826,-0.34464307,0.50786191,1.8921039,-31.034445,-146.38064)" + style="font-style:normal;font-weight:normal;font-size:1.90312397px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.01258837" + id="text864"> + <path + d="m -41.275716,202.9985 c -0.02809,-0.0143 -0.05823,-0.0258 -0.09042,-0.0344 -0.03141,-0.009 -0.06577,-0.0154 -0.10308,-0.0195 -0.132321,-0.0146 -0.228975,0.007 -0.289963,0.0641 -0.06027,0.0567 -0.08086,0.14576 -0.06177,0.26708 l 0.08886,0.56511 -0.235378,-0.026 -0.168693,-1.07274 0.235378,0.026 0.0415,0.11733 c 0.03893,-0.0598 0.08009,-0.0516 0.154062,-0.0742 0.07386,-0.0233 0.167187,-0.0287 0.27999,-0.0162 0.01617,0.002 0.03416,0.005 0.05395,0.009 0.01967,0.003 0.04168,0.008 0.06602,0.0144 z" + style="stroke-width:0.01482364" + id="path870" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccccccccccccc" /> + <path + d="m -40.410807,203.11285 v 0.16169 q -0.07248,-0.0372 -0.15054,-0.0557 -0.07806,-0.0186 -0.161691,-0.0186 -0.127309,0 -0.191428,0.039 -0.06319,0.039 -0.06319,0.11709 0,0.0595 0.04553,0.0939 0.04553,0.0334 0.183064,0.0641 l 0.05854,0.013 q 0.182135,0.039 0.258334,0.11058 0.07713,0.0706 0.07713,0.19793 0,0.14497 -0.115228,0.22953 -0.114299,0.0846 -0.315019,0.0846 -0.08363,0 -0.174701,-0.0167 -0.09014,-0.0158 -0.190498,-0.0483 v -0.17656 q 0.09479,0.0493 0.186781,0.0743 0.092,0.0242 0.182135,0.0242 0.120804,0 0.185852,-0.0409 0.06505,-0.0418 0.06505,-0.11709 0,-0.0697 -0.04739,-0.10686 -0.04646,-0.0372 -0.205366,-0.0716 l -0.05947,-0.0139 q -0.158903,-0.0335 -0.229527,-0.10222 -0.07062,-0.0697 -0.07062,-0.1905 0,-0.14682 0.104077,-0.22674 0.104077,-0.0799 0.295505,-0.0799 0.09478,0 0.178418,0.0139 0.08363,0.0139 0.154257,0.0418 z" + style="stroke-width:0.01258837" + id="path872" + inkscape:connector-curvature="0" /> + <path + d="m -39.571383,202.62755 -0.03453,0.33682 0.483556,0.002 -0.03123,0.14077 -0.467876,0.008 -0.06611,0.644 c -0.0099,0.0967 -0.0042,0.15873 0.01728,0.18596 0.02211,0.0272 0.0709,0.0403 0.146369,0.0394 l 0.18607,-0.003 -0.01679,0.16312 -0.18607,0.003 c -0.139777,0.002 -0.233377,-0.0247 -0.280802,-0.0801 -0.04736,-0.0558 -0.06343,-0.15786 -0.0482,-0.30618 l 0.06611,-0.64399 -0.132895,0.002 0.01555,-0.15148 0.132895,-0.002 0.03453,-0.33681 z" + style="stroke-width:0.0138234" + id="path874" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccccccccccccccccc" /> + </g> + <g + aria-label="clk" + transform="matrix(2.3525877,-0.10292753,0.2449229,1.9213172,45.198743,-143.34561)" + style="font-style:normal;font-weight:normal;font-size:1.90312397px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.01258837" + id="text868"> + <path + d="m -47.023791,202.8756 0.02953,0.23933 c -0.06229,-0.0399 -0.123696,-0.0697 -0.184208,-0.0892 -0.05988,-0.0203 -0.119243,-0.0305 -0.178089,-0.0305 -0.13166,0 -0.227374,0.0529 -0.287143,0.15862 -0.05989,0.10481 -0.0781,0.2523 -0.05464,0.44245 0.02345,0.19016 0.07812,0.33811 0.163998,0.44386 0.08575,0.10481 0.194455,0.15721 0.326112,0.15721 0.05884,0 0.115746,-0.01 0.170717,-0.0291 0.05558,-0.0205 0.08125,0.026 0.133717,-0.0139 l 0.05753,0.16011 c -0.05251,0.0335 -0.108257,0.0585 -0.167252,0.0751 -0.05826,0.0167 -0.12159,0.025 -0.189991,0.025 -0.186089,0 -0.343029,-0.0737 -0.470822,-0.22124 -0.127791,-0.14748 -0.207137,-0.34644 -0.238039,-0.59689 -0.03136,-0.25416 -8.57e-4,-0.45405 0.09151,-0.59967 0.0931,-0.14563 0.235998,-0.21844 0.428707,-0.21844 0.06252,0 0.124597,0.008 0.18623,0.025 0.06153,0.0157 0.12224,0.0398 0.182141,0.0723 z" + style="stroke-width:0.0167841" + id="path877" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccscccsccccscscsccc" /> + <path + d="m -46.874682,202.76379 0.142911,-0.0353 0.477431,1.633 -0.142911,0.0353 z" + style="stroke-width:0.01266381" + id="path879" + inkscape:connector-curvature="0" /> + <path + d="m -45.316254,202.73781 h 0.105823 l -0.30408,0.97435 0.684115,-0.51209 0.06147,0.0849 0.0099,0.0299 -0.587562,0.44072 0.393944,0.6319 -0.370906,-0.0255 -0.220701,-0.55448 -0.180998,0.57995 h -0.176676 z" + style="stroke-width:0.01363125" + id="path881" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccccccccccc" /> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:3.52777767px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.07000434" + x="-18.08774" + y="188.72037" + id="text876" + transform="matrix(1.0079983,-0.0441007,0.12576363,0.98656289,0,0)"><tspan + sodipodi:role="line" + id="tspan874" + x="-18.08774" + y="191.84163" + style="stroke-width:0.07000434" /></text> + <g + aria-label="out" + transform="matrix(1.0468606,0.36920082,-0.20179075,0.85789222,80.50944,88.545352)" + style="font-style:normal;font-weight:normal;font-size:3.52777767px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.07000434" + id="text888"> + <path + d="m -13.369682,192.47237 q -0.273983,0 -0.433189,0.22592 -0.159206,0.22396 -0.159206,0.61541 0,0.39146 0.157354,0.61737 0.159207,0.22397 0.435041,0.22397 0.272131,0 0.431338,-0.22591 0.159207,-0.22592 0.159207,-0.61543 0,-0.38755 -0.159207,-0.61347 -0.159207,-0.22786 -0.431338,-0.22786 z m 0,-0.30381 q 0.444296,0 0.697916,0.30381 0.253619,0.30382 0.253619,0.84133 0,0.53557 -0.253619,0.84134 -0.25362,0.30381 -0.697916,0.30381 -0.446148,0 -0.699767,-0.30381 -0.251769,-0.30577 -0.251769,-0.84134 0,-0.53751 0.251769,-0.84133 0.253619,-0.30381 0.699767,-0.30381 z" + style="stroke-width:0.07716621" + id="path901" + inkscape:connector-curvature="0" /> + <path + d="m -11.925778,193.38936 -0.0093,-1.16785 0.316938,-0.003 0.0092,1.15579 q 0.0022,0.27389 0.110065,0.41083 0.107876,0.13523 0.321465,0.13353 0.256652,-0.002 0.403486,-0.16685 0.148558,-0.16482 0.146313,-0.44731 l -0.0087,-1.09379 0.316938,-0.003 0.01533,1.9292 -0.316938,0.003 -0.0024,-0.29627 q -0.114012,0.17661 -0.26663,0.26396 -0.150909,0.0856 -0.35244,0.0872 -0.332442,0.003 -0.506333,-0.20269 -0.173891,-0.20533 -0.177052,-0.60323 z" + style="stroke-width:0.07000434" + id="path903" + inkscape:connector-curvature="0" /> + <path + d="m -9.2205509,191.66729 v 0.65016 h 0.7963034 v 0.29238 h -0.7963034 v 1.24307 q 0,0.28011 0.077739,0.35984 0.079841,0.0798 0.3214628,0.0798 h 0.3971013 v 0.31485 h -0.3971013 q -0.4475267,0 -0.617713,-0.16152 -0.1701861,-0.16357 -0.1701861,-0.59291 v -1.24308 H -9.892892 v -0.29237 h 0.2836438 v -0.65017 z" + style="stroke-width:0.08423072" + id="path905" + inkscape:connector-curvature="0" /> + </g> + <g + aria-label="one" + transform="matrix(0.96137546,-0.34508222,-0.14753322,1.1131988,64.524557,29.534027)" + style="font-style:normal;font-weight:normal;font-size:3.52777767px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.07000434" + id="text892"> + <path + d="m -21.637912,192.23885 q -0.254937,0 -0.403076,0.19981 -0.148139,0.1981 -0.148139,0.54433 0,0.34623 0.146417,0.54605 0.148139,0.19809 0.404798,0.19809 0.253215,0 0.401354,-0.19982 0.148139,-0.19981 0.148139,-0.54432 0,-0.34279 -0.148139,-0.5426 -0.148139,-0.20154 -0.401354,-0.20154 z m 0,-0.26872 q 0.413412,0 0.649401,0.26872 0.235989,0.26872 0.235989,0.74414 0,0.4737 -0.235989,0.74414 -0.235989,0.26872 -0.649401,0.26872 -0.415134,0 -0.651123,-0.26872 -0.234266,-0.27044 -0.234266,-0.74414 0,-0.47542 0.234266,-0.74414 0.235989,-0.26872 0.651123,-0.26872 z" + style="stroke-width:0.07000434" + id="path894" + inkscape:connector-curvature="0" /> + <path + d="m -18.657729,192.65297 0.191769,1.13213 -0.317087,0.0526 -0.190066,-1.12207 q -0.04511,-0.26629 -0.174362,-0.38088 -0.129256,-0.11459 -0.342945,-0.0791 -0.256773,0.0426 -0.378027,0.22625 -0.121254,0.18367 -0.07473,0.45833 l 0.179571,1.06012 -0.318811,0.0529 -0.317724,-1.87572 0.318811,-0.0529 0.04936,0.2914 q 0.08508,-0.18801 0.224276,-0.29717 0.140918,-0.10943 0.342544,-0.14286 0.332598,-0.0552 0.537247,0.11753 0.204365,0.171 0.270179,0.55954 z" + style="stroke-width:0.07000434" + id="path896" + inkscape:connector-curvature="0" /> + <path + d="m -16.339355,192.90203 v 0.15503 h -1.457275 q 0.02067,0.32728 0.19637,0.49954 0.177423,0.17053 0.492649,0.17053 0.18259,0 0.353122,-0.0448 0.172255,-0.0448 0.341065,-0.13436 v 0.29973 q -0.170533,0.0723 -0.349678,0.11024 -0.179144,0.0379 -0.363457,0.0379 -0.461643,0 -0.732083,-0.26872 -0.268717,-0.26872 -0.268717,-0.72692 0,-0.4737 0.254937,-0.75103 0.256659,-0.27905 0.690741,-0.27905 0.389296,0 0.61495,0.25149 0.227376,0.24977 0.227376,0.68041 z m -0.316949,-0.093 q -0.0034,-0.2601 -0.146416,-0.41513 -0.141249,-0.15503 -0.375516,-0.15503 -0.265272,0 -0.425469,0.14986 -0.158474,0.14986 -0.18259,0.42202 z" + style="stroke-width:0.07000434" + id="path898" + inkscape:connector-curvature="0" /> + </g> + <g + aria-label="I Love Cookies" + transform="matrix(1.0079983,-0.0441007,0.12576363,0.9865629,0,0)" + style="font-style:normal;font-weight:normal;font-size:4.94244957px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.03269225" + id="text901"> + <path + d="m -42.578917,200.47688 h 0.487488 v 3.60306 h -0.487488 z" + style="stroke-width:0.03269225" + id="path904" /> + <path + d="m -39.667469,199.86261 0.551459,-0.0397 0.216288,4.14763 1.984706,-0.1428 0.02779,0.53296 -2.536165,0.18247 z" + style="stroke-width:0.03970517" + id="path906" + inkscape:connector-curvature="0" /> + <path + d="m -35.357614,201.29188 q -0.404796,0 -0.640016,0.37017 -0.23522,0.36697 -0.23522,1.00838 0,0.64142 0.232485,1.01158 0.235219,0.36697 0.642751,0.36697 0.402062,0 0.637281,-0.37017 0.23522,-0.37016 0.23522,-1.00838 0,-0.63502 -0.23522,-1.0052 -0.235219,-0.37335 -0.637281,-0.37335 z m 0,-0.49782 q 0.656427,0 1.031137,0.49782 0.374711,0.49781 0.374711,1.37855 0,0.87755 -0.374711,1.37855 -0.37471,0.49782 -1.031137,0.49782 -0.659162,0 -1.033873,-0.49782 -0.371974,-0.501 -0.371974,-1.37855 0,-0.88074 0.371974,-1.37855 0.374711,-0.49782 1.033873,-0.49782 z" + style="stroke-width:0.04002121" + id="path908" + inkscape:connector-curvature="0" /> + <path + d="m -33.475857,200.88022 h 0.533347 l 0.957289,2.99964 0.957289,-2.99964 h 0.533347 l -1.148747,3.57404 h -0.683778 z" + style="stroke-width:0.04002121" + id="path910" + inkscape:connector-curvature="0" /> + <path + d="m -27.17963,202.84877 v 0.24067 h -2.313905 q 0.03282,0.50806 0.311803,0.77547 0.281717,0.26473 0.782243,0.26473 0.289921,0 0.560697,-0.0695 0.273512,-0.0695 0.541553,-0.20858 v 0.46528 q -0.270777,0.11231 -0.555228,0.17114 -0.284452,0.0588 -0.577109,0.0588 -0.73301,0 -1.162423,-0.41715 -0.426677,-0.41715 -0.426677,-1.12845 0,-0.73537 0.404797,-1.1659 0.407531,-0.43319 1.096779,-0.43319 0.618135,0 0.976435,0.39041 0.361035,0.38774 0.361035,1.05625 z m -0.50326,-0.1444 q -0.0054,-0.40378 -0.232485,-0.64445 -0.224279,-0.24066 -0.596254,-0.24066 -0.421208,0 -0.675573,0.23263 -0.251631,0.23265 -0.289922,0.65515 z" + style="stroke-width:0.0366358" + id="path912" + inkscape:connector-curvature="0" /> + <path + d="m -23.085996,200.92591 v 0.77129 q -0.246157,-0.344 -0.526101,-0.5142 -0.27753,-0.17018 -0.59126,-0.17018 -0.617806,0 -0.946015,0.5685 -0.32821,0.5649 -0.32821,1.63675 0,1.06822 0.32821,1.63673 0.328209,0.5649 0.946015,0.5649 0.31373,0 0.59126,-0.1702 0.279944,-0.17018 0.526101,-0.5142 v 0.76406 q -0.255811,0.26072 -0.542994,0.39109 -0.28477,0.13039 -0.603326,0.13039 -0.818111,0 -1.288705,-0.74958 -0.470595,-0.7532 -0.470595,-2.05316 0,-1.3036 0.470595,-2.05318 0.470594,-0.75318 1.288705,-0.75318 0.323383,0 0.608153,0.13039 0.287183,0.12679 0.538167,0.38384 z" + style="stroke-width:0.04004603" + id="path914" + inkscape:connector-curvature="0" /> + <path + d="m -21.466727,202.53026 q -0.357169,0 -0.48726,0.27994 -0.130756,0.27753 0.0035,0.7626 0.134213,0.48508 0.416798,0.76502 0.284331,0.27753 0.643914,0.27753 0.354756,0 0.484846,-0.27994 0.130087,-0.27995 -0.0035,-0.76261 -0.132874,-0.48024 -0.417875,-0.76019 -0.285665,-0.28235 -0.640421,-0.28235 z m -0.104166,-0.37648 q 0.579193,0 1.013982,0.37648 0.434785,0.37647 0.619075,1.04254 0.183622,0.66366 -0.04217,1.04255 -0.226457,0.37648 -0.80565,0.37648 -0.581607,0 -1.016396,-0.37648 -0.433041,-0.37889 -0.616663,-1.04255 -0.18429,-0.66607 0.03976,-1.04254 0.226457,-0.37648 0.808064,-0.37648 z" + style="stroke-width:0.03269225" + id="path916" + inkscape:connector-curvature="0" /> + <path + d="m -18.44527,202.53026 q -0.357169,0 -0.487259,0.27994 -0.130756,0.27753 0.0035,0.7626 0.134213,0.48508 0.416798,0.76502 0.284331,0.27753 0.643913,0.27753 0.354756,0 0.484847,-0.27994 0.130087,-0.27995 -0.0035,-0.76261 -0.132874,-0.48024 -0.417875,-0.76019 -0.285666,-0.28235 -0.640422,-0.28235 z m -0.104166,-0.37648 q 0.579194,0 1.013983,0.37648 0.434784,0.37647 0.619074,1.04254 0.183622,0.66366 -0.04217,1.04255 -0.226457,0.37648 -0.805651,0.37648 -0.581606,0 -1.016395,-0.37648 -0.433042,-0.37889 -0.616664,-1.04255 -0.18429,-0.66607 0.03976,-1.04254 0.226457,-0.37648 0.808063,-0.37648 z" + style="stroke-width:0.03269225" + id="path918" + inkscape:connector-curvature="0" /> + <path + d="m -16.865342,201.16674 h 0.446462 l 0.613634,2.21783 1.002396,-1.16563 h 0.567126 l -1.083619,1.26457 1.891796,1.43833 h -0.579193 l -1.738414,-1.32008 0.365243,1.32008 h -0.446462 z" + style="stroke-width:0.03269225" + id="path920" + inkscape:connector-curvature="0" /> + <path + d="m -13.4376,201.37704 h 0.582962 v 2.7029 H -13.4376 Z m 0,-1.0522 h 0.582962 v 0.5623 H -13.4376 Z" + style="stroke-width:0.03745848" + id="path922" + inkscape:connector-curvature="0" /> + <path + d="m -8.6028135,202.61748 v 0.2172 h -2.6803615 q 0.03802,0.45852 0.361184,0.69985 0.326331,0.23892 0.906126,0.23892 0.335838,0 0.649497,-0.0627 0.3168268,-0.0627 0.6273175,-0.18824 v 0.41991 q -0.3136586,0.10136 -0.6431595,0.15445 -0.3294997,0.0531 -0.668506,0.0531 -0.849098,0 -1.346517,-0.37648 -0.494251,-0.37647 -0.494251,-1.01841 0,-0.66366 0.468906,-1.05221 0.472072,-0.39095 1.270477,-0.39095 0.7160305,0 1.1310746,0.35234 0.4182129,0.34993 0.4182129,0.95326 z m -0.5829634,-0.13032 q -0.0063,-0.36441 -0.2693034,-0.58161 -0.2597986,-0.21719 -0.6906837,-0.21719 -0.487914,0 -0.782564,0.20995 -0.291482,0.20996 -0.335837,0.59126 z" + style="stroke-width:0.03745848" + id="path924" + inkscape:connector-curvature="0" /> + <path + d="m -5.3838476,201.45668 v 0.41991 q -0.2471254,-0.0965 -0.5132606,-0.1448 -0.2661352,-0.0483 -0.55128,-0.0483 -0.4340537,0 -0.6526647,0.10136 -0.2154427,0.10136 -0.2154427,0.30407 0,0.15446 0.1552454,0.24375 0.1552456,0.0869 0.6241503,0.16652 l 0.1996013,0.0338 q 0.6209821,0.10136 0.8807807,0.28719 0.2629668,0.18341 0.2629668,0.51403 0,0.37648 -0.3928662,0.59609 -0.3896977,0.21961 -1.0740453,0.21961 -0.2851448,0 -0.5956357,-0.0434 -0.3073228,-0.041 -0.6494966,-0.12549 v -0.45853 q 0.3231642,0.1279 0.6368234,0.19306 0.3136593,0.0627 0.620982,0.0627 0.4118758,0 0.6336551,-0.10619 0.2217793,-0.1086 0.2217793,-0.30407 0,-0.181 -0.1615821,-0.27753 -0.1584138,-0.0965 -0.7001888,-0.18583 l -0.2027697,-0.0362 q -0.5417751,-0.0869 -0.782564,-0.26546 -0.2407889,-0.181 -0.2407889,-0.49473 0,-0.3813 0.3548468,-0.58885 0.3548468,-0.20754 1.0075115,-0.20754 0.3231642,0 0.608309,0.0362 0.2851448,0.0362 0.5259337,0.1086 z" + style="stroke-width:0.03745848" + id="path926" + inkscape:connector-curvature="0" /> + </g> + </g> + <text + id="text983" + y="224.61163" + x="31.011026" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="stroke-width:0.26458332" + y="233.9754" + x="31.011026" + id="tspan981" + sodipodi:role="line" /></text> + <g + aria-label="father &amp; son" + transform="matrix(1.0190173,0,0,0.9813376,0.5291667,0.52916667)" + style="font-style:normal;font-weight:normal;font-size:8.01353455px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20033836" + id="text1057" /> + <g + id="g8072" + transform="matrix(0.26889251,-0.01002392,-0.03200614,0.19788514,10.15233,292.24297)"> + <g + style="display:inline" + inkscape:label="Layer 1" + id="layer4" /> + <path + id="rect5872" + d="m 11.987289,9.3234482 h 7.991524 v 3.9957608 h -7.991524 z" + style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + id="rect5874" + d="m 14.667374,10.662096 h 3.995763 v 1.331921 h -3.995763 z" + style="opacity:1;fill:#ffffff;fill-opacity:0.98571424;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + id="rect5878" + d="m -29.323654,9.3234482 h 7.989551 v 3.9957608 h -7.989551 z" + style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="scale(-1,1)" + inkscape:connector-curvature="0" /> + <path + id="rect5880" + d="m -26.64423,10.662096 h 3.994777 v 1.331921 h -3.994777 z" + style="opacity:1;fill:#ffffff;fill-opacity:0.98571424;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="scale(-1,1)" + inkscape:connector-curvature="0" /> + <path + id="rect5882" + d="m 19.995058,14.667374 h 1.331921 v 3.995762 h -1.331921 z" + style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + id="rect5884" + d="m 21.326979,17.331215 h 1.315677 v 1.33192 h -1.315677 z" + style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + id="rect5886" + d="m 11.954803,20.011301 h 2.696328 v 2.663842 h -2.696328 z" + style="opacity:1;fill:#001800;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + id="rect5888" + d="m 27.970341,20.011301 h 2.696327 v 2.663842 h -2.696327 z" + style="opacity:1;fill:#001800;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + id="rect5890" + d="m 14.651131,20.011301 h 13.351695 v 1.33192 H 14.651131 Z" + style="opacity:1;fill:#001800;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + </g> + </g> +</svg> diff --git a/src/Computerscare.cpp b/src/Computerscare.cpp @@ -12,4 +12,5 @@ void init(Plugin *p) { p->addModel(modelComputerscareDebug); p->addModel(modelComputerscarePatchSequencer); p->addModel(modelComputerscareLaundrySoup); + p->addModel(modelComputerscareILoveCookies); } diff --git a/src/Computerscare.hpp b/src/Computerscare.hpp @@ -30,6 +30,7 @@ static const NVGcolor COLOR_COMPUTERSCARE_GREEN = nvgRGB(0x24, 0xc9, 0xa6); extern Model *modelComputerscareDebug; extern Model *modelComputerscarePatchSequencer; extern Model *modelComputerscareLaundrySoup; +extern Model *modelComputerscareILoveCookies; struct ComputerscareGreenLight : GrayModuleLightWidget { ComputerscareGreenLight() { diff --git a/src/ComputerscareILoveCookies.cpp b/src/ComputerscareILoveCookies.cpp @@ -0,0 +1,334 @@ +#include "Computerscare.hpp" +#include "dsp/digital.hpp" +#include "dsp/filter.hpp" +#include "window.hpp" +#include "dtpulse.hpp" + +#include <string> +#include <sstream> +#include <iomanip> + +struct ComputerscareILoveCookies; + +const int numFields = 3; +const std::string b64lookup = "123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&$0"; + +class MyTextFieldCookie : public LedDisplayTextField { + +public: + int fontSize = 18; + MyTextFieldCookie() : LedDisplayTextField() {} + void setModule(ComputerscareILoveCookies* _module) { + module = _module; + } + virtual void onTextChange() override; + int getTextPosition(Vec mousePos) override { + bndSetFont(font->handle); + int textPos = bndIconLabelTextPosition(gVg, textOffset.x, textOffset.y, + box.size.x - 2*textOffset.x, box.size.y - 2*textOffset.y, + -1, fontSize, text.c_str(), mousePos.x, mousePos.y); + bndSetFont(gGuiFont->handle); + return textPos; + } + void draw(NVGcontext *vg) override { + nvgScissor(vg, 0, 0, box.size.x, box.size.y); + + // Background + nvgFontSize(vg, fontSize); + nvgBeginPath(vg); + nvgRoundedRect(vg, 0, 0, box.size.x, box.size.y, 5.0); + nvgFillColor(vg, nvgRGB(0x00, 0x00, 0x00)); + nvgFill(vg); + + // Text + if (font->handle >= 0) { + bndSetFont(font->handle); + + NVGcolor highlightColor = color; + highlightColor.a = 0.5; + int begin = min(cursor, selection); + int end = (this == gFocusedWidget) ? max(cursor, selection) : -1; + //bndTextField(vg,textOffset.x,textOffset.y+2, box.size.x, box.size.y, -1, 0, 0, const char *text, int cbegin, int cend); + bndIconLabelCaret(vg, textOffset.x, textOffset.y - 3, + box.size.x - 2*textOffset.x, box.size.y - 2*textOffset.y, + -1, color, fontSize, text.c_str(), highlightColor, begin, end); + + bndSetFont(gGuiFont->handle); + } + + nvgResetScissor(vg); + }; + +private: + ComputerscareILoveCookies* module; +}; + +struct ComputerscareILoveCookies : Module { + enum ParamIds { + NUM_PARAMS + }; + enum InputIds { + GLOBAL_CLOCK_INPUT, + GLOBAL_RESET_INPUT, + CLOCK_INPUT, + RESET_INPUT = CLOCK_INPUT + numFields, + NUM_INPUTS = RESET_INPUT + numFields + }; + enum OutputIds { + TRG_OUTPUT, + FIRST_STEP_OUTPUT = TRG_OUTPUT + numFields, + NUM_OUTPUTS = FIRST_STEP_OUTPUT + numFields + }; + enum LightIds { + SWITCH_LIGHTS, + NUM_LIGHTS + }; + + SchmittTrigger globalClockTrigger; + SchmittTrigger globalResetTriggerInput; + + SchmittTrigger clockTriggers[numFields]; + SchmittTrigger resetTriggers[numFields]; + + MyTextFieldCookie* textFields[numFields]; + + std::vector<int> absoluteSequences[numFields]; + + int absoluteStep[numFields] = {0}; + int numSteps[numFields] = {0}; + +ComputerscareILoveCookies() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} + void step() override; + + json_t *toJson() override + { + json_t *rootJ = json_object(); + + json_t *sequencesJ = json_array(); + for (int i = 0; i < numFields; i++) { + json_t *sequenceJ = json_string(textFields[i]->text.c_str()); + json_array_append_new(sequencesJ, sequenceJ); + } + json_object_set_new(rootJ, "sequences", sequencesJ); + + return rootJ; + } + + void fromJson(json_t *rootJ) override + { + json_t *sequencesJ = json_object_get(rootJ, "sequences"); + if (sequencesJ) { + for (int i = 0; i < numFields; i++) { + json_t *sequenceJ = json_array_get(sequencesJ, i); + if (sequenceJ) + textFields[i]->text = json_string_value(sequenceJ); + } + } + onCreate(); + } + + void onRandomize() override { + randomizeAllFields(); + } + + void randomizeAllFields() { + std::string mainlookup ="111111111111111111122223333333344444444444444445556667778888888888888999"; + std::string string = ""; + std::string randchar = ""; + int length = 0; + + for (int i = 0; i < numFields; i++) { + length = rand() % 12 + 1; + string = ""; + for(int j = 0; j < length; j++) { + randchar = mainlookup[rand() % mainlookup.size()]; + string = string + randchar; + } + textFields[i]->text = string; + } + onCreate(); + + } + + void parseFormula(std::string expr, int index) { + std::vector<int> absoluteSequence; + absoluteSequence = parseEntireString(expr,b64lookup); + numSteps[index] = absoluteSequence.size(); + absoluteSequences[index] = absoluteSequence; + } + +void onCreate () override + { + for(int i = 0; i < numFields; i++) { + if(textFields[i]->text.size() > 0) { + parseFormula(textFields[i]->text,i); + } + resetOneOfThem(i); + } + } + + void onReset () override + { + onCreate(); + } + + /* + lets say the sequence "332" is entered in the 0th (first) + numSteps[0] would then be 8 (3 + 3 + 2) + absoluteSequences[0] would be the vector (1,0,0,1,0,0,1,0) + absoluteStep[0] would run from 0 to 7 + + 332-4 (332 offset by 4) + + */ + void incrementInternalStep(int i) { + this->absoluteStep[i] +=1; + this->absoluteStep[i] %= this->numSteps[i]; + } + + void resetOneOfThem(int i) { + this->absoluteStep[i] = 0; + } +}; + + +void ComputerscareILoveCookies::step() { + + bool globalGateIn = globalClockTrigger.isHigh(); + bool activeStep = false; + bool atFirstStep = false; + bool clocked = globalClockTrigger.process(inputs[GLOBAL_CLOCK_INPUT].value); + bool currentTriggerIsHigh; + bool currentTriggerClocked; + bool globalResetTriggered = globalResetTriggerInput.process(inputs[GLOBAL_RESET_INPUT].value / 2.f); + bool currentResetActive; + bool currentResetTriggered; + + for(int i = 0; i < numFields; i++) { + activeStep = false; + currentResetActive = inputs[RESET_INPUT + i].active; + currentResetTriggered = resetTriggers[i].process(inputs[RESET_INPUT+i].value / 2.f); + currentTriggerIsHigh = clockTriggers[i].isHigh(); + currentTriggerClocked = clockTriggers[i].process(inputs[CLOCK_INPUT + i].value); + + if(this->numSteps[i] > 0) { + if (inputs[CLOCK_INPUT + i].active) { + if(currentTriggerClocked) { + incrementInternalStep(i); + } + } + else { + if (inputs[GLOBAL_CLOCK_INPUT].active && clocked) { + incrementInternalStep(i); + } + } + if((currentResetActive && currentResetTriggered) || (!currentResetActive && globalResetTriggered)) { + resetOneOfThem(i); + } + + activeStep = absoluteSequences[i][this->absoluteStep[i]]==1; + atFirstStep = (this->absoluteStep[i] == 0); + } + if(inputs[CLOCK_INPUT + i].active) { + outputs[TRG_OUTPUT + i].value = (currentTriggerIsHigh && activeStep) ? 10.0f : 0.0f; + outputs[FIRST_STEP_OUTPUT + i].value = (currentTriggerIsHigh && atFirstStep) ? 10.f : 0.0f; + } + else { + outputs[TRG_OUTPUT + i].value = (globalGateIn && activeStep) ? 10.0f : 0.0f; + outputs[FIRST_STEP_OUTPUT + i].value = (globalGateIn && atFirstStep) ? 10.f : 0.0f; + } + } +} + +///////////////////////////////////////////////// +struct NumberDisplayWidget3 : TransparentWidget { + + int *value; + std::shared_ptr<Font> font; + + NumberDisplayWidget3() { + font = Font::load(assetPlugin(plugin, "res/digital-7.ttf")); + }; + + void draw(NVGcontext *vg) override + { + // Background + NVGcolor backgroundColor = nvgRGB(0x00, 0x00, 0x00); + + nvgBeginPath(vg); + nvgRoundedRect(vg, 0.0, 0.0, box.size.x, box.size.y, 4.0); + nvgFillColor(vg, backgroundColor); + nvgFill(vg); + + // text + nvgFontSize(vg, 13); + nvgFontFaceId(vg, font->handle); + nvgTextLetterSpacing(vg, 2.5); + + std::stringstream to_display; + to_display << std::setw(3) << *value; + + Vec textPos = Vec(6.0f, 17.0f); + NVGcolor textColor = nvgRGB(0xC0, 0xE7, 0xDE); + nvgFillColor(vg, textColor); + nvgText(vg, textPos.x, textPos.y, to_display.str().c_str(), NULL); + } +}; + +void MyTextFieldCookie::onTextChange() { + module->onCreate(); +} + +struct ComputerscareILoveCookiesWidget : ModuleWidget { + + double verticalSpacing = 18.4; + int verticalStart = 82; + ComputerscareILoveCookiesWidget(ComputerscareILoveCookies *module) : ModuleWidget(module) { + setPanel(SVG::load(assetPlugin(plugin, "res/ComputerscareILoveCookiesPanel.svg"))); + + //global clock input + addInput(Port::create<InPort>(mm2px(Vec(2 , 59)), Port::INPUT, module, ComputerscareILoveCookies::GLOBAL_CLOCK_INPUT)); + + //global reset input + addInput(Port::create<InPort>(mm2px(Vec(12 , 59)), Port::INPUT, module, ComputerscareILoveCookies::GLOBAL_RESET_INPUT)); + + for(int i = 0; i < numFields; i++) { + //first-step output + addOutput(Port::create<OutPort>(mm2px(Vec(42 , verticalStart + verticalSpacing*i - 11)), Port::OUTPUT, module, ComputerscareILoveCookies::FIRST_STEP_OUTPUT + i)); + + //individual output + addOutput(Port::create<OutPort>(mm2px(Vec(54 , verticalStart + verticalSpacing*i - 11)), Port::OUTPUT, module, ComputerscareILoveCookies::TRG_OUTPUT + i)); + + //individual clock input + addInput(Port::create<InPort>(mm2px(Vec(2, verticalStart + verticalSpacing*i-10)), Port::INPUT, module, ComputerscareILoveCookies::CLOCK_INPUT + i)); + + //individual reset input + addInput(Port::create<InPort>(mm2px(Vec(12, verticalStart + verticalSpacing*i-10)), Port::INPUT, module, ComputerscareILoveCookies::RESET_INPUT + i)); + + //sequence input field + textField = Widget::create<MyTextFieldCookie>(mm2px(Vec(1, verticalStart + verticalSpacing*i))); + textField->setModule(module); + textField->box.size = mm2px(Vec(63, 7)); + textField->multiline = false; + textField->color = nvgRGB(0xC0, 0xE7, 0xDE); + addChild(textField); + module->textFields[i] = textField; + + //active step display + NumberDisplayWidget3 *display = new NumberDisplayWidget3(); + display->box.pos = mm2px(Vec(24,verticalStart - 9.2 +verticalSpacing*i)); + display->box.size = Vec(50, 20); + if(&module->numSteps[i]) { + display->value = &module->absoluteStep[i]; + } + else { + display->value = 0; + } + addChild(display); + } + + } + MyTextFieldCookie* textField; +}; + +Model *modelComputerscareILoveCookies = Model::create<ComputerscareILoveCookies, ComputerscareILoveCookiesWidget>("computerscare", "computerscare-i-love-cookies", "I Love Cookies", SEQUENCER_TAG);