Doodle3D-Core/src/reducer/d2/pinchZoomReducer.js
2017-11-14 15:27:48 +01:00

42 lines
1.1 KiB
JavaScript

import update from 'react-addons-update';
import { Matrix } from 'cal';
import constrainMatrix from './constrainMatrix.js';
import { calculateGestureMatrix } from '../../utils/matrixUtils.js';
import * as actions from '../../actions/index.js';
import createDebug from 'debug';
const debug = createDebug('d3d:reducer:d2:pinchZoom');
export default function pinchZoomReducer(state, action) {
if (action.log !== false) debug(action.type);
switch (action.type) {
case actions.CLEAR:
return update(state, {
d2: { canvasMatrix: { $set: new Matrix() } }
});
case actions.D2_MULTITOUCH:
return multitouch(state, action);
default:
return state;
}
}
function multitouch(state, { positions, previousPositions, screenMatrixContainer }) {
const gestureMatrix = calculateGestureMatrix(positions, previousPositions, screenMatrixContainer, {
rotate: false, scale: true, pan: true
});
const { canvasMatrix } = state.d2;
const matrix = canvasMatrix.multiplyMatrix(gestureMatrix);
constrainMatrix(matrix);
return update(state, {
d2: {
canvasMatrix: { $set: matrix }
}
});
}