core-graphics
Version:
A core library for creating shape-based graphic editors
73 lines (60 loc) • 2.85 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = viewportStateReducer;
var _editorEvents = require('../editor-events');
var _input = require('../events/input');
var _modes = require('../../declarations/modes');
var _icepick = require('icepick');
var i = _interopRequireWildcard(_icepick);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function viewportStateReducer(currentState, ev) {
var m = movingViewportModeReducer(currentState, ev);
return viewportEventsReducer(m, ev);
}
function viewportEventsReducer(currentState, ev) {
if ((0, _editorEvents.isEditorViewportEvent)(ev) && (0, _editorEvents.isSetViewportEvent)(ev)) {
var value = ev.payload.value;
return i.assoc(currentState, 'viewport', value);
}
return currentState;
}
function movingViewportModeReducer(currentState, ev) {
var mode = currentState.mode;
var mouse = currentState.mouse;
if ((0, _input.isEditorInputEvent)(ev) && (0, _modes.isMovingViewportMode)(mode) && !mode.payload.moving && mouse.down && (0, _input.isMouseMoveEvent)(ev)) {
var lastDownX = mouse.lastDownX;
var lastDownY = mouse.lastDownY;
var _ev$payload = ev.payload;
var x = _ev$payload.x;
var y = _ev$payload.y;
var dx = lastDownX - x;
var dy = lastDownY - y;
return i.assoc(currentState, 'mode', (0, _modes.modeMovingViewport)({ moving: true, dx: dx, dy: dy }));
}
if ((0, _input.isEditorInputEvent)(ev) && (0, _modes.isMovingViewportMode)(mode) && mode.payload.moving) {
if ((0, _input.isMouseMoveEvent)(ev)) {
var _lastDownX = mouse.lastDownX;
var _lastDownY = mouse.lastDownY;
var _ev$payload2 = ev.payload;
var _x = _ev$payload2.x;
var _y = _ev$payload2.y;
var _dx = _lastDownX - _x;
var _dy = _lastDownY - _y;
return i.assoc(currentState, 'mode', (0, _modes.modeMovingViewport)({ moving: true, dx: _dx, dy: _dy }));
}
if ((0, _input.isMouseUpEvent)(ev)) {
var _mode$payload = mode.payload;
var _dx2 = _mode$payload.dx;
var _dy2 = _mode$payload.dy;
var _currentState$viewpor = currentState.viewport;
var _x2 = _currentState$viewpor.x;
var _y2 = _currentState$viewpor.y;
var vx = _x2 + _dx2;
var vy = _y2 + _dy2;
return i.chain(currentState).assoc('mode', (0, _modes.modeMovingViewport)()).assoc('viewport', { x: vx, y: vy }).value();
}
}
return currentState;
}