chiark / gitweb /
js: Handle special_count of zero
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 3 Apr 2021 22:10:24 +0000 (23:10 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 4 Apr 2021 19:07:53 +0000 (20:07 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
templates/script.ts

index 2cd23735ec690a07a0cd622c333e3d65c3900a1c..6a1f163d31fca13f4f087d5d8095f4a0d7a625a6 100644 (file)
@@ -820,7 +820,7 @@ function drag_mousedown(e : MouseEvent, shifted: boolean) {
     return [piece];
   }
 
-  if (true) {
+  if (special_count == null) {
     let target = e.target as SVGGraphicsElement; // we check this just now!
     let piece: PieceId | undefined = target.dataset.piece;
     if (piece) {
@@ -828,6 +828,25 @@ function drag_mousedown(e : MouseEvent, shifted: boolean) {
     } else {
       clicked = [];
     }
+  } else if (special_count == 0) {
+    let clickpos = mouseevent_pos(e);
+    let uelem = pieces_marker;
+    for (;;) {
+      uelem = uelem.nextElementSibling as any;
+      if (uelem == defs_marker) {
+       clicked = [];
+       break;
+      }
+      let piece = uelem.dataset.piece!;
+      let p = pieces[piece]!;
+      if (p_bbox_contains(p, clickpos)) {
+       clicked = clicked_one(piece);
+       break;
+      }
+    }
+  } else {
+    mouseevent_pos(e);
+    return;
   }
 
   if (!clicked.length) {
@@ -892,6 +911,16 @@ function mouseevent_pos(e: MouseEvent): Pos {
   return pos;
 }
 
+function p_bbox_contains(p: PieceInfo, test: Pos) {
+  let ctr = piece_xy(p);
+  for (let i of [0,1]) {
+    let offset = test[i] - ctr[i];
+    if (offset < p.bbox[0][i] || offset > p.bbox[1][i])
+      return false;
+  }
+  return true;
+}
+
 function ungrab_all() {
   for (let tpiece of Object.keys(pieces)) {
     let tp = pieces[tpiece]!;