From: Ian Jackson Date: Tue, 13 Apr 2021 23:15:14 +0000 (+0100) Subject: js: Rework drag spread X-Git-Tag: otter-0.5.0~87 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=a4c3925857276e700666632d7de503c517d62363;p=otter.git js: Rework drag spread Now it is coherent Signed-off-by: Ian Jackson --- 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