endo-yuki-t
initial commit
d7dbcdd
raw
history blame
No virus
5.44 kB
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<center>
<table><tr>
<td>
<canvas id="canvas" width="256" height="256" style="border: solid 1px #000;box-sizing: border-box;"></canvas>
</td>
<td>
<form action="./" method="POST" id="init_id">
<input type = "submit" value="Initialize">
</form>
<label><input type="checkbox" id="show_anchors" checked>Show anchor points</label>
</td>
</tr></table>
<table border="1">
<tr><td>Mouse drag:</td><td>Translation</td></tr>
<tr><td>Middle mouse button:</td><td>Set anchor point</td></tr>
<tr><td>Mouse wheel:</td><td>Zoom in & out</td></tr>
<tr><td>'i' or 'o' key + mouse drag:</td><td>Translation with zooming in & out</td></tr>
<tr><td>'s' key:</td><td>style mixing</td></tr>
</table>
</center>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
// Canvas
var cnvs = document.getElementById('canvas');
var ctx = cnvs.getContext('2d');
// Define variables
const cnvWidth = 256;
const cnvHeight = 256;
var clickFlg = 0;
var bgColor = "rgb(0,0,0)";
var img_base64 = {{canvas_img|tojson}};
var sx0, sy0, sx, sy;
  var dz = 0;
var stop_points = [];
var mouse_button;
var zoom_in = 0;
var zoom_out = 0;
var show_anchors = document.getElementById('show_anchors');
show_anchors.addEventListener('change', e => {
draw_image_on_canvas(img_base64);
});
setBgColor();
function draw_image_on_canvas(img_base64){
if(img_base64.length!=0){
var img = new Image();
img.src = img_base64;
ctx.drawImage(img, 0, 0, 256, 256);
img.onload = function(){
ctx.drawImage(img, 0, 0, 256, 256);
draw_points_on_canvas();
}
}
}
function draw_points_on_canvas(){
if(show_anchors.checked){
stop_points.forEach(function(value){
ctx.beginPath();
ctx.arc( value[0], value[1], 5, 0 * Math.PI / 180, 360 * Math.PI / 180, false );
ctx.fillStyle = "rgb(135,206,235)";
ctx.fill();
ctx.strokeStyle = "rgb(128,128,128)";
ctx.lineWidth = 2;
ctx.stroke();
});
}
}
draw_image_on_canvas(img_base64);
// Events on canva
$("#canvas").mousedown(function(e){
clickFlg = 1;
sx0 = e.offsetX;
sy0 = e.offsetY;
sx = e.offsetX;
sy = e.offsetY;
mouse_button = e.button;
if(mouse_button==1){
show_anchors.checked = 1;
let rad = 5;
let filtered_points = stop_points.filter((pt)=>{
return((pt[0]-sx)*(pt[0]-sx)+(pt[1]-sy)*(pt[1]-sy)>rad*rad);
});
if(filtered_points.length<stop_points.length){
stop_points = filtered_points;
}else{
stop_points.push([sx,sy]);
}
draw_image_on_canvas(img_base64);
}
}).mouseup(function(){
clickFlg = 0;
}).mousemove(function(e){
if(!clickFlg) return false;
//draw(e.offsetX, e.offsetY);
if(mouse_button==0){
show_anchors.checked = 0;
var ex = e.offsetX;
var ey = e.offsetY;
var dx0 = ex-sx0;
var dy0 = ey-sy0;
var dx = ex-sx;
var dy = ey-sy;
if(Math.sqrt(dx0*dx0+dy0*dy0)>5){
$.post("/translate", {dx:dx,dy:dy,dz:dz,sx:sx,sy:sy,stop_points:JSON.stringify(stop_points),zi:zoom_in,zo:zoom_out}).done(function(data) {
img_base64 = $.parseJSON(data).img;
draw_image_on_canvas(img_base64);
})
sx0 = ex;
sy0 = ey;
//sx = ex;
//sy = ey;
}
}
});
cnvs.addEventListener('wheel', (e) => {
show_anchors.checked = 0;
sx = e.offsetX;
sy = e.offsetY;
if(e.deltaY<0){
dz -= 1;
}else{
dz += 1;
}
$.post("/zoom", {dz:dz,sx:sx,sy:sy,stop_points:JSON.stringify(stop_points)}).done(function(data) {
img_base64 = $.parseJSON(data).img;
draw_image_on_canvas(img_base64);
})
});
document.addEventListener('keydown', e => {
if(e.key=="s"){
$.post("/changestyle").done(function(data) {
img_base64 = $.parseJSON(data).img;
stop_points = [];
dz = 0;
draw_image_on_canvas(img_base64);
})
}
if(e.key=="r"){
$.post("/reset").done(function(data) {
img_base64 = $.parseJSON(data).img;
stop_points = [];
dz = 0;
draw_image_on_canvas(img_base64);
})
}
if(e.key=="i"){
zoom_in = 1;
}
if(e.key=="o"){
zoom_out = 1;
}
});
document.addEventListener('keyup', e => {
if(e.key=="i"){
zoom_in = 0;
}
if(e.key=="o"){
zoom_out = 0;
}
});
function setBgColor(){
ctx.fillStyle = bgColor;
ctx.fillRect(0,0,cnvWidth,cnvHeight);
}
document.getElementById('init-id').addEventListener('submit', function (e) {
e.preventDefault();
var form = this;
var base64 = cnvs.toDataURL();
var newInput = document.createElement("input");
newInput.type="hidden";
newInput.name = "canvas";
newInput.value=base64;
form.appendChild(newInput);
form.submit();
}, false);
</script>
</body>
</html>