jonigata commited on
Commit
853c0d4
1 Parent(s): 772acdc

fix key reception sequence

Browse files
Files changed (1) hide show
  1. static/poseEditor.js +18 -10
static/poseEditor.js CHANGED
@@ -126,12 +126,19 @@ function repairPerson(personIndex) {
126
  // ドラッグ中の各キーが押されているかどうかのフラグ
127
  var keyDownFlags = {};
128
  // マウスカーソル
129
- var mouseCursor = [0, 0];
130
 
131
  function cross(lhs, rhs) {return lhs[0] * rhs[1] - lhs[1] * rhs[0];}
132
  function dot(lhs, rhs) {return lhs[0] * rhs[0] + lhs[1] * rhs[1];}
133
  function directedAngleTo(lhs, rhs) {return Math.atan2(cross(lhs, rhs), dot(lhs, rhs));}
134
 
 
 
 
 
 
 
 
135
  function clearCanvas() {
136
  var w = canvas.width;
137
  var h = canvas.height;
@@ -377,13 +384,6 @@ function getCanvasPosition(event) {
377
  return [x, y];
378
  }
379
 
380
- function isMouseOnCanvas(event) {
381
- const rect = canvas.getBoundingClientRect();
382
- const x = event.clientX - rect.left;
383
- const y = event.clientY - rect.top;
384
- return 0 <= x && x <= canvas.width && 0 <= y && y <= canvas.height;
385
- }
386
-
387
  function forEachMarkedNodes(fn) {
388
  for (let i = 0; i < dragMarks.length; i++) {
389
  for (let j = 0; j < dragMarks[i].length; j++) {
@@ -477,7 +477,6 @@ function handleMouseMove(event) {
477
  forEachMarkedNodes((i, j, node) => {
478
  const lp = latestPoseData[i][j];
479
  const np = rotateAndProject(rotateX, lp, center, angle);
480
- console.log(np);
481
  node[0] = np[0];
482
  node[1] = np[1];
483
  });
@@ -509,10 +508,14 @@ function handleMouseUp(event) {
509
  Redraw();
510
  }
511
 
 
 
 
 
512
  function ModifyDragRange(delta) { dragRange = Math.max(dragRangeDelta, Math.min(512, dragRange + delta)); }
513
 
514
  document.addEventListener('wheel', function(event) {
515
- if (!isMouseOnCanvas(event)) {return;}
516
  if (!event.altKey) {return;}
517
 
518
  event.preventDefault();
@@ -525,6 +528,8 @@ document.addEventListener('wheel', function(event) {
525
  }, {passive: false});
526
 
527
  document.addEventListener("keydown", (event) => {
 
 
528
  if (event.code == "BracketLeft") { ModifyDragRange(-dragRangeDelta); }
529
  if (event.code == "BracketRight") { ModifyDragRange(dragRangeDelta); }
530
  keyDownFlags[event.code] = true;
@@ -532,6 +537,8 @@ document.addEventListener("keydown", (event) => {
532
  event.preventDefault();
533
  });
534
  document.addEventListener("keyup", (event) => {
 
 
535
  keyDownFlags[event.code] = false;
536
  if (event.ctrlKey && event.code == "KeyE") {
537
  addPerson();
@@ -555,6 +562,7 @@ function initializeEditor() {
555
  canvas.addEventListener('mousedown', handleMouseDown);
556
  canvas.addEventListener('mousemove', handleMouseMove);
557
  canvas.addEventListener('mouseup', handleMouseUp);
 
558
  poseData = [];
559
  clearHistory();
560
  }
 
126
  // ドラッグ中の各キーが押されているかどうかのフラグ
127
  var keyDownFlags = {};
128
  // マウスカーソル
129
+ var mouseCursor = [-1, -1];
130
 
131
  function cross(lhs, rhs) {return lhs[0] * rhs[1] - lhs[1] * rhs[0];}
132
  function dot(lhs, rhs) {return lhs[0] * rhs[0] + lhs[1] * rhs[1];}
133
  function directedAngleTo(lhs, rhs) {return Math.atan2(cross(lhs, rhs), dot(lhs, rhs));}
134
 
135
+ function isMouseOnCanvas() {
136
+ // mouseCursorがcanvasの範囲内にあるかどうかを判定
137
+ var rect = canvas.getBoundingClientRect();
138
+ var f = 0 <= mouseCursor[0] && mouseCursor[0] <= rect.width && 0 <= mouseCursor[1] && mouseCursor[1] <= rect.height;
139
+ return f;
140
+ }
141
+
142
  function clearCanvas() {
143
  var w = canvas.width;
144
  var h = canvas.height;
 
384
  return [x, y];
385
  }
386
 
 
 
 
 
 
 
 
387
  function forEachMarkedNodes(fn) {
388
  for (let i = 0; i < dragMarks.length; i++) {
389
  for (let j = 0; j < dragMarks[i].length; j++) {
 
477
  forEachMarkedNodes((i, j, node) => {
478
  const lp = latestPoseData[i][j];
479
  const np = rotateAndProject(rotateX, lp, center, angle);
 
480
  node[0] = np[0];
481
  node[1] = np[1];
482
  });
 
508
  Redraw();
509
  }
510
 
511
+ function handleMouseLeave(event) {
512
+ mouseCursor = [-1,-1];
513
+ }
514
+
515
  function ModifyDragRange(delta) { dragRange = Math.max(dragRangeDelta, Math.min(512, dragRange + delta)); }
516
 
517
  document.addEventListener('wheel', function(event) {
518
+ if (!isMouseOnCanvas()) {return;}
519
  if (!event.altKey) {return;}
520
 
521
  event.preventDefault();
 
528
  }, {passive: false});
529
 
530
  document.addEventListener("keydown", (event) => {
531
+ if (!isMouseOnCanvas()) {return;}
532
+
533
  if (event.code == "BracketLeft") { ModifyDragRange(-dragRangeDelta); }
534
  if (event.code == "BracketRight") { ModifyDragRange(dragRangeDelta); }
535
  keyDownFlags[event.code] = true;
 
537
  event.preventDefault();
538
  });
539
  document.addEventListener("keyup", (event) => {
540
+ if (!isMouseOnCanvas()) {return;}
541
+
542
  keyDownFlags[event.code] = false;
543
  if (event.ctrlKey && event.code == "KeyE") {
544
  addPerson();
 
562
  canvas.addEventListener('mousedown', handleMouseDown);
563
  canvas.addEventListener('mousemove', handleMouseMove);
564
  canvas.addEventListener('mouseup', handleMouseUp);
565
+ canvas.addEventListener('mouseleave', handleMouseLeave);
566
  poseData = [];
567
  clearHistory();
568
  }