|
//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);
|
|
}
|