From a4c3925857276e700666632d7de503c517d62363 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 14 Apr 2021 00:15:14 +0100 Subject: [PATCH] js: Rework drag spread Now it is coherent Signed-off-by: Ian Jackson --- templates/script.ts | 59 ++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/templates/script.ts b/templates/script.ts index 6168baf2..2c5bc9a9 100644 --- a/templates/script.ts +++ b/templates/script.ts @@ -812,13 +812,33 @@ function piece_xy(p: PieceInfo): Pos { parseFloat(p.uelem.getAttributeNS(null,"y")!) ]; } -function drag_add_piece(piece: PieceId, p: PieceInfo) { - let [dox, doy] = piece_xy(p); - drag_pieces.push({ - piece: piece, - dox: dox + p.drag_delta, - doy: doy, - }); +function drag_start_prepare(new_dragging: DRAGGING) { + dragging = new_dragging; + + let spos_map = Object.create(null); + for (let piece of Object.keys(pieces)) { + let p = pieces[piece]!; + if (p.held != us) continue; + let spos = piece_xy(p); + let sposk = `${spos[0]} ${spos[1]}`; + if (spos_map[sposk] === undefined) spos_map[sposk] = [spos, []]; + spos_map[sposk][1].push([spos, piece,p]); + } + + for (let sposk of Object.keys(spos_map)) { + let [[dox, doy], ents] = spos_map[sposk]; + for (let i=0; i= 0) continue; - let tp = pieces[tpiece]!; - if (tp.held != us) continue; - drag_add_piece(tpiece,tp); - } + drag_start_prepare(DRAGGING.MAYBE_UNGRAB); } else if (held == null || wresting) { if (!shifted) { ungrab_all_except(note_already); @@ -1014,18 +1024,7 @@ function drag_mousedown(e : MouseEvent, shifted: boolean) { return; } grab_clicked(clicked); - dragging = DRAGGING.MAYBE_GRAB; - let for_drag = note_already - ? Object.keys(note_already).concat(clicked) - : clicked; - for (let i=0; i