Przeglądaj źródła

Allow middle-mouse dragging

master
Fen Dweller 5 lat temu
rodzic
commit
7384fa5f50
1 zmienionych plików z 42 dodań i 3 usunięć
  1. +42
    -3
      macrovision.js

+ 42
- 3
macrovision.js Wyświetl plik

@@ -9,6 +9,11 @@ let clickTimeout = null;
let dragOffsetX = null;
let dragOffsetY = null;

let panning = false;
let panReady = true;
let panOffsetX = null;
let panOffsetY = null;

let shiftHeld = false;
let altHeld = false;

@@ -617,7 +622,10 @@ function clickUp(e) {

}

function deselect() {
function deselect(e) {
if (e !== undefined && e.which == 1) {
return;
}
if (selected) {
selected.classList.remove("selected");
}
@@ -1195,7 +1203,7 @@ function displayEntity(entity, view, x, y, selectEntity = false, refresh = false
box.dataset.x = x;
box.dataset.y = y;

img.addEventListener("mousedown", e => { testClick(e); e.stopPropagation() });
img.addEventListener("mousedown", e => { if (e.which == 1) { testClick(e); e.stopPropagation() } });
img.addEventListener("touchstart", e => {
const fakeEvent = {
target: e.target,
@@ -1941,11 +1949,27 @@ document.addEventListener("DOMContentLoaded", () => {
}
checkFitWorld();
})

document.querySelector("#world").addEventListener("mousedown", e => {
// only middle mouse clicks
if (e.which == 2) {
panning = true;
panOffsetX = e.clientX;
panOffsetY = e.clientY;
}
});

document.querySelector("#world").addEventListener("mouseup", e => {
if (e.which == 2) {
panning = false;
}
});

document.querySelector("body").appendChild(testCtx.canvas);

updateSizes();

world.addEventListener("mousedown", e => deselect());
world.addEventListener("mousedown", e => deselect(e));
document.querySelector("#entities").addEventListener("mousedown", deselect);
document.querySelector("#display").addEventListener("mousedown", deselect);
document.addEventListener("mouseup", e => clickUp(e));
@@ -2773,6 +2797,21 @@ document.addEventListener("mousemove", (e) => {
document.querySelector("#menubar").classList.remove("hover-delete");
}
}
console.log(panning)
if (panning && panReady) {
const worldWidth = config.height.toNumber("meters") / canvasHeight * canvasWidth;
const worldHeight = config.height.toNumber("meters");

config.x += (e.clientX - panOffsetX) / canvasWidth * worldWidth;
config.y -= (e.clientY - panOffsetY) / canvasHeight * worldHeight;
panOffsetX = e.clientX;
panOffsetY = e.clientY;
console.log(config.x, config.y)
updateSizes();
panReady = false;
setTimeout(() => panReady=true, 50);
}
});

document.addEventListener("touchmove", (e) => {


Ładowanie…
Anuluj
Zapisz