/** * WHITEBOPHIR ********************************************************* * @licstart The following is the entire license notice for the * JavaScript code in this page. * * Copyright (C) 2020 Ophir LOJKINE * * * The JavaScript code in this page is free software: you can * redistribute it and/or modify it under the terms of the GNU * General Public License (GNU GPL) as published by the Free Software * Foundation, either version 3 of the License, or (at your option) * any later version. The code is distributed WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. * * As additional permission under GNU GPL version 3 section 7, you * may distribute non-source (e.g., minimized or compacted) forms of * that code without the copy of the GNU GPL normally required by * section 4, provided you include this license notice and a URL * through which recipients can access the Corresponding Source. * * @licend */ (function grid() { //Code isolation var index = 0; //grid off by default var states = ["none", "url(#grid)", "url(#dots)"]; function toggleGrid(evt) { index = (index + 1) % states.length; gridContainer.setAttributeNS(null, "fill", states[index]); } function createPatterns() { // create patterns // small (inner) grid var smallGrid = Tools.createSVGElement("pattern", { id: "smallGrid", width: "30", height: "30", patternUnits: "userSpaceOnUse" }); smallGrid.appendChild( Tools.createSVGElement("path", { d: "M 30 0 L 0 0 0 30", fill: "none", stroke: "gray", 'stroke-width': "0.5" }) ); // (outer) grid var grid = Tools.createSVGElement("pattern", { id: "grid", width: "300", height: "300", patternUnits: "userSpaceOnUse" }); grid.appendChild(Tools.createSVGElement("rect", { width: "300", height: "300", fill: "url(#smallGrid)" })); grid.appendChild( Tools.createSVGElement("path", { d: "M 300 0 L 0 0 0 300", fill: "none", stroke: "gray", 'stroke-width': "1" }) ); // dots var dots = Tools.createSVGElement("pattern", { id: "dots", width: "30", height: "30", x: "-10", y: "-10", patternUnits: "userSpaceOnUse" }); dots.appendChild(Tools.createSVGElement("circle", { fill: "gray", cx: "10", cy: "10", r: "2" })); var defs = Tools.svg.getElementById("defs"); defs.appendChild(smallGrid); defs.appendChild(grid); defs.appendChild(dots); } var gridContainer = (function init() { // initialize patterns createPatterns(); // create grid container var gridContainer = Tools.createSVGElement("rect", { id: "gridContainer", width: "100%", height: "100%", fill: states[index] }); Tools.svg.insertBefore(gridContainer, Tools.drawingArea); return gridContainer; })(); Tools.add({ //The new tool "name": "Grid", "shortcut": "g", "listeners": {}, "icon": "tools/grid/icon.svg", "oneTouch": true, "onstart": toggleGrid, "mouseCursor": "crosshair", }); })(); //End of code isolation