From 36441691765791d12d0667c643dd9a54146f6a6b Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 16 Oct 2022 23:20:09 -0400 Subject: [PATCH] mobile pinch zoom and layer slider improvements --- release.md | 1 + src/moto/orbit.js | 31 ++++++++++++++----------------- src/moto/space.js | 7 +++++-- web/kiri/index.html | 1 + 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/release.md b/release.md index 0b923c02..e99ecc67 100644 --- a/release.md +++ b/release.md @@ -5,6 +5,7 @@ Full docs @ https://docs.grid.space/projects/kiri-moto # Release 3.6 +* mobile pinch zoom and layer slider improvements * update CLI to work in CAM mode and add working samples * improved FDM preview rendering speed and reduced memory usage * threaded task and message passing performance improvements diff --git a/src/moto/orbit.js b/src/moto/orbit.js index b0ad3a72..24e0f8dc 100644 --- a/src/moto/orbit.js +++ b/src/moto/orbit.js @@ -234,18 +234,14 @@ moto.Orbit = function (object, domElement, notify, slider) { return pos; }; - this.dollyIn = function (dollyScale) { - if (dollyScale === undefined) { - dollyScale = getZoomScale(); - } - scale *= dollyScale; + this.dollyIn = function (factor = 1) { + let dollyScale = getZoomScale(factor); + scale = scale * dollyScale; }; - this.dollyOut = function (dollyScale) { - if (dollyScale === undefined) { - dollyScale = getZoomScale(); - } - scale /= dollyScale; + this.dollyOut = function (factor = 1) { + let dollyScale = getZoomScale(factor); + scale = scale / dollyScale; }; this.update = function () { @@ -338,8 +334,8 @@ moto.Orbit = function (object, domElement, notify, slider) { return theta }; - function getZoomScale() { - return Math.pow(0.95, scope.zoomSpeed); + function getZoomScale(factor = 1) { + return Math.pow(0.95, factor * scope.zoomSpeed); } function onMouseDown(event) { @@ -561,6 +557,7 @@ moto.Orbit = function (object, domElement, notify, slider) { case 2: // two-fingered touch: dolly if (scope.noZoom === true) return; if (state !== STATE.TOUCH_DOLLY) return; + let dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; let dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; let distance = Math.sqrt(dx * dx + dy * dy); @@ -574,15 +571,15 @@ moto.Orbit = function (object, domElement, notify, slider) { dollyEnd.set(0, distance); dollyDelta.subVectors(dollyEnd, dollyStart); - if (touchSlide || (Math.abs(ddy/ddx) > 10 && slider)) { + if (touchSlide || (Math.abs(dy/dx) < 1 && slider)) { touchSlide = true; - slider(lastDY ? lastDY - ddy : ddy); + slider(lastDY ? (lastDY - ddy) : ddy); lastDY = ddy; } else { if (dollyDelta.y > 0) { - scope.dollyOut(); - } else { - scope.dollyIn(); + scope.dollyOut(0.5); + } else if (dollyDelta.y < 0) { + scope.dollyIn(0.5); } } diff --git a/src/moto/space.js b/src/moto/space.js index 603d6200..8b01f7a7 100644 --- a/src/moto/space.js +++ b/src/moto/space.js @@ -1316,8 +1316,11 @@ gapp.register("moto.space", [], (root, exports) => { domelement.style.height = height(); // workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=1321452 - let Renderer = nav.platform === 'MacIntel' && - nav.vendor.indexOf('Google') >= 0 ? WebGL1Renderer : WebGLRenderer; + // and android requires older rendered to avoid visual Z order artifacts + let Renderer = + (nav.platform.indexOf('Linux') >= 0) || + (nav.platform === 'MacIntel' && nav.vendor.indexOf('Google') >= 0) ? + WebGL1Renderer : WebGLRenderer; renderer = new Renderer({ antialias: antiAlias, diff --git a/web/kiri/index.html b/web/kiri/index.html index c01a1a3c..5b8b7d50 100644 --- a/web/kiri/index.html +++ b/web/kiri/index.html @@ -15,6 +15,7 @@ + Kiri:Moto