From 06c7090814224d468290d074795707e145f8459e Mon Sep 17 00:00:00 2001 From: Dmitry Date: Fri, 2 Dec 2016 22:01:48 -0500 Subject: [PATCH] Implement simple touches --- camera.js | 33 ++++++++++++++++++++++++++------- example/simple.js | 4 ++-- package.json | 7 ++++--- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/camera.js b/camera.js index 59a634e..c8f5711 100644 --- a/camera.js +++ b/camera.js @@ -6,6 +6,7 @@ var now = require('right-now') var createView = require('3d-view') var mouseChange = require('mouse-change') var mouseWheel = require('mouse-wheel') +var mouseOffset = require('mouse-event-offset') function createCamera(element, options) { element = element || document.body @@ -59,8 +60,8 @@ function createCamera(element, options) { allEqual = allEqual && (pmatrix[i] === matrix[i]) pmatrix[i] = matrix[i] } - var sizeChanged = - element.clientWidth === width && + var sizeChanged = + element.clientWidth === width && element.clientHeight === height width = element.clientWidth height = element.clientHeight @@ -156,14 +157,31 @@ function createCamera(element, options) { enumerable: true } }) - + element.addEventListener('contextmenu', function(ev) { ev.preventDefault() return false }) - var lastX = 0, lastY = 0 - mouseChange(element, function(buttons, x, y, mods) { + var lastX = 0, lastY = 0, lastMods = {shift: false, control: false, alt: false, meta: false} + mouseChange(element, handleInteraction) + + //enable simple touch interactions + element.addEventListener('touchstart', function (ev) { + var xy = mouseOffset(ev.changedTouches[0], element) + handleInteraction(0, xy[0], xy[1], lastMods) + handleInteraction(1, xy[0], xy[1], lastMods) + }) + element.addEventListener('touchmove', function (ev) { + var xy = mouseOffset(ev.changedTouches[0], element) + handleInteraction(1, xy[0], xy[1], lastMods) + }) + element.addEventListener('touchend', function (ev) { + var xy = mouseOffset(ev.changedTouches[0], element) + handleInteraction(0, lastX, lastY, lastMods) + }) + + function handleInteraction (buttons, x, y, mods) { var scale = 1.0 / element.clientHeight var dx = scale * (x - lastX) var dy = scale * (y - lastY) @@ -190,7 +208,8 @@ function createCamera(element, options) { lastX = x lastY = y - }) + lastMods = mods + } mouseWheel(element, function(dx, dy, dz) { var flipX = camera.flipX ? 1 : -1 @@ -205,4 +224,4 @@ function createCamera(element, options) { }, true) return camera -} \ No newline at end of file +} diff --git a/example/simple.js b/example/simple.js index 938ea18..33f97f5 100644 --- a/example/simple.js +++ b/example/simple.js @@ -1,7 +1,7 @@ var createCamera = require('../camera') var bunny = require('bunny') var perspective = require('gl-mat4/perspective') -var createMesh = require('gl-simplicial-complex') +var createMesh = require('gl-mesh3d') var canvas = document.createElement('canvas') document.body.appendChild(canvas) @@ -33,4 +33,4 @@ function render() { }) } } -render() \ No newline at end of file +render() diff --git a/package.json b/package.json index 5d53e81..01d30da 100644 --- a/package.json +++ b/package.json @@ -8,14 +8,15 @@ }, "dependencies": { "3d-view": "^2.0.0", + "mouse-change": "^1.1.1", + "mouse-event-offset": "^3.0.2", "mouse-wheel": "^1.0.2", - "right-now": "^1.0.0", - "mouse-change": "^1.1.1" + "right-now": "^1.0.0" }, "devDependencies": { "bunny": "^1.0.1", "canvas-fit": "^1.2.0", - "gl-simplicial-complex": "^3.0.2", + "gl-mesh3d": "^1.2.0", "gl-mat4": "^1.1.2" }, "scripts": {