//Copyright (c) 2013, Playful Invention Company. //Permission is hereby granted, free of charge, to any person obtaining a copy //of this software and associated documentation files (the "Software"), to deal //in the Software without restriction, including without limitation the rights //to use, copy, modify, merge, publish, distribute, sublicense, and/or sell //copies of the Software, and to permit persons to whom the Software is //furnished to do so, subject to the following conditions: //The above copyright notice and this permission notice shall be included in //all copies or substantial portions of the Software. //THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR //IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, //FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE //AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER //LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, //OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN //THE SOFTWARE. // ----- // GridPaint has been kept extremely minimal as an explicit design choice. // If you want to add features please make a fork with a different name. // Thanks in advance var onStart, onMove, onEnd; var zoom; var touchScreen = false; function eventInit(){ touchScreen = ("ontouchstart" in document.documentElement); if (touchScreen) { document.getElementById("canvas").addEventListener("touchstart", evMousedown, false); frame.addEventListener("touchmove", evMousemove, false); frame.addEventListener("touchend", evMouseup, false); } else { document.getElementById("canvas").onmousedown = evMousedown; frame.onmousemove = evMousemove; frame.onmouseup = evMouseup; } var wsize = document.body.clientHeight-55; zoom = wsize/748; document.getElementById("canvas").style.zoom = zoom; var useragent = navigator.userAgent.toLowerCase(); if (useragent.indexOf('chrome') == -1) { document.getElementById("canvas").style.MozTransform = "scale("+zoom+")"; document.getElementById("canvas").style.MozTransformOrigin = "0 0"; document.getElementById("canvas").style.width = "1024px"; document.getElementById("canvas").style.height = "748px"; } } function evMousedown(e){ e.preventDefault(); if (touchScreen) e = e.touches[0]; var x=localx(e.clientX), y=localy(e.clientY); onStart(x,y); // HACK: Force refresh on Android if (/Android/i.test(navigator.userAgent) && document.location.protocol.substr(0,4) != "http") { cnv.style.display='none'; cnv.offsetHeight; cnv.style.display='block'; } } function evMousemove(e){ e.preventDefault(); if (touchScreen) e = e.touches[0]; if(!onMove) return; var x=localx(e.clientX), y=localy(e.clientY); onMove(x,y); } function evMouseup(e){ e.preventDefault(); if(!onEnd) return; onEnd(); } function localx(gx){return (gx/zoom-frame.getBoundingClientRect().left);} function localy(gy){ return (gy/zoom-frame.getBoundingClientRect().top); }