diff --git a/engine/CHANGELOG.md b/engine/CHANGELOG.md index 7e12d18f..5e15bac4 100644 --- a/engine/CHANGELOG.md +++ b/engine/CHANGELOG.md @@ -1,3 +1,12 @@ +# @wwtelescope/engine 7.29.3 (2023-11-10) + +- Improve handling of touch gestures: don't be so eager to rotate, and + avoid panning as the user lifts up their fingers (#283, @Carifio24) +- Build the UMD module with a `globalObject` of `this` rather than `self` (#282, + @pkgw). This should make the distributed files work in a wider variety of + contexts, including the Constellations dev builds. + + # @wwtelescope/engine 7.29.2 (2023-11-03) - Correct world <-> screen coordinate transformations for when the camera roll diff --git a/engine/esm/wwt_control.js b/engine/esm/wwt_control.js index 5dc76757..0b59e46c 100644 --- a/engine/esm/wwt_control.js +++ b/engine/esm/wwt_control.js @@ -115,6 +115,9 @@ export function WWTControl() { this._pointerIds = new Array(2); this._pinchingZoomRect = new Array(2); this._moved = false; + this._zooming = false; + this._rotating = false; + this._dragThreshold = 4; this._foregroundCanvas = null; this._fgDevice = null; @@ -1154,13 +1157,15 @@ var WWTControl$ = { onTouchMove: function (e) { var ev = e; + if (this._hasTwoTouches) { var t0 = ev.touches[0]; var t1 = ev.touches[1]; var newRect = new Array(2); newRect[0] = Vector2d.create(t0.pageX, t0.pageY); newRect[1] = Vector2d.create(t1.pageX, t1.pageY); - if (this._pinchingZoomRect[0] != null && this._pinchingZoomRect[1] != null) { + + if (!this._dragging && this._pinchingZoomRect[0] != null && this._pinchingZoomRect[1] != null) { var centerPoint = Vector2d.create(this.renderContext.width / 2, this.renderContext.height / 2); var delta1 = Vector2d.subtract(newRect[0], this._pinchingZoomRect[0]); var delta2 = Vector2d.subtract(newRect[1], this._pinchingZoomRect[1]); @@ -1176,13 +1181,14 @@ var WWTControl$ = { var angularComponent2 = Vector2d.subtract(delta2, radialComponent2); var radialMagnitude = radialComponent1.get_length() + radialComponent2.get_length(); var angularMagnitude = angularComponent1.get_length() + angularComponent2.get_length(); - if (radialMagnitude >= angularMagnitude) { + + if (radialMagnitude >= 0.5 * angularMagnitude && !this._rotating) { var oldDist = this.getDistance(this._pinchingZoomRect[0], this._pinchingZoomRect[1]); var newDist = this.getDistance(newRect[0], newRect[1]); var ratio = oldDist / newDist; this.zoom(ratio); - } - else { + this._zooming = true; + } else if (!this._zooming) { var oldCenterDelta1 = Vector2d.subtract(this._pinchingZoomRect[0], centerPoint); var oldCenterDelta2 = Vector2d.subtract(this._pinchingZoomRect[1], centerPoint); var newCenterDelta1 = Vector2d.subtract(newRect[0], centerPoint); @@ -1191,26 +1197,31 @@ var WWTControl$ = { var cross2 = this.crossProductZ(oldCenterDelta2, newCenterDelta2); var angle1 = Math.asin(cross1 / (oldCenterDelta1.get_length() * newCenterDelta1.get_length())); var angle2 = Math.asin(cross2 / (oldCenterDelta2.get_length() * newCenterDelta2.get_length())); + if (angle1 * angle2 >= 0) { var angle = angle1 + angle2; if (this.get_planetLike() || this.get_solarSystemMode()) { angle *= -1; } this.roll(angle); + this._rotating = true; } } } + this._pinchingZoomRect = newRect; ev.stopPropagation(); ev.preventDefault(); return; } + ev.preventDefault(); ev.stopPropagation(); - if (this._mouseDown) { - this._dragging = true; + + if (this._mouseDown && !(this._rotating || this._zooming)) { var curX = ev.targetTouches[0].pageX - this._lastX; var curY = ev.targetTouches[0].pageY - this._lastY; + this._dragging = this._dragging || (Math.sqrt(curX * curX + curY * curY) > this._dragThreshold); this.move(curX, curY); this._lastX = ev.targetTouches[0].pageX; this._lastY = ev.targetTouches[0].pageY; @@ -1248,6 +1259,8 @@ var WWTControl$ = { } this._mouseDown = false; this._dragging = false; + this._zooming = false; + this._rotating = false; }, // Pointer events diff --git a/engine/package.json b/engine/package.json index ea5af85d..f620d9b6 100644 --- a/engine/package.json +++ b/engine/package.json @@ -56,5 +56,5 @@ "tscheck": "tsc" }, "types": "./src/index.d.ts", - "version": "7.29.2" + "version": "7.29.3" } diff --git a/engine/webpack.config.js b/engine/webpack.config.js index 363fefb7..29335dca 100644 --- a/engine/webpack.config.js +++ b/engine/webpack.config.js @@ -4,6 +4,7 @@ var config = { entry: "./esm/index.js", output: { path: path.resolve(__dirname, "src"), + globalObject: "this", library: { name: "wwtlib", type: "umd" diff --git a/research-app-messages/CHANGELOG.md b/research-app-messages/CHANGELOG.md index 2f1b5948..c542d68d 100644 --- a/research-app-messages/CHANGELOG.md +++ b/research-app-messages/CHANGELOG.md @@ -1,3 +1,9 @@ +# @wwtelescope/research-app-messages 0.17.3 (2023-11-10) + +- Update to the latest typedoc, and other improvements to the documentation + infrastructure (#274, #275, #276, #277, #278, @pkgw). + + # @wwtelescope/research-app-messages 0.17.2 (2023-09-15) - Update sponsorship branding and "front door" email address (#269, #271, @pkgw). diff --git a/research-app-messages/package.json b/research-app-messages/package.json index a419b523..97a327e4 100644 --- a/research-app-messages/package.json +++ b/research-app-messages/package.json @@ -33,5 +33,5 @@ }, "type": "module", "types": "./dist/src/index.d.ts", - "version": "0.17.2" + "version": "0.17.3" }