@gorpacrate/core-graphics
Version:
A core library for creating shape-based graphic editors
49 lines • 2.2 kB
JavaScript
;
exports.__esModule = true;
var i = require("icepick");
var modes_1 = require("../../declarations/modes");
var editor_events_1 = require("../editor-events");
var input_1 = require("../events/input");
function viewportStateReducer(currentState, ev) {
var m = movingViewportModeReducer(currentState, ev);
return viewportEventsReducer(m, ev);
}
exports["default"] = viewportStateReducer;
function viewportEventsReducer(currentState, ev) {
if (editor_events_1.isEditorViewportEvent(ev) && editor_events_1.isSetViewportEvent(ev)) {
var value = ev.payload.value;
return i.assoc(currentState, 'viewport', value);
}
return currentState;
}
function movingViewportModeReducer(currentState, ev) {
var mode = currentState.mode, mouse = currentState.mouse;
if (input_1.isEditorInputEvent(ev) && modes_1.isMovingViewportMode(mode) && !mode.payload.moving && mouse.down && input_1.isMouseMoveEvent(ev)) {
var lastDownX = mouse.lastDownX, lastDownY = mouse.lastDownY;
var _a = ev.payload, x = _a.x, y = _a.y;
var dx = lastDownX - x;
var dy = lastDownY - y;
return i.assoc(currentState, 'mode', modes_1.modeMovingViewport({ moving: true, dx: dx, dy: dy }));
}
if (input_1.isEditorInputEvent(ev) && modes_1.isMovingViewportMode(mode) && mode.payload.moving) {
if (input_1.isMouseMoveEvent(ev)) {
var lastDownX = mouse.lastDownX, lastDownY = mouse.lastDownY;
var _b = ev.payload, x = _b.x, y = _b.y;
var dx = lastDownX - x;
var dy = lastDownY - y;
return i.assoc(currentState, 'mode', modes_1.modeMovingViewport({ moving: true, dx: dx, dy: dy }));
}
if (input_1.isMouseUpEvent(ev)) {
var _c = mode.payload, dx = _c.dx, dy = _c.dy;
var _d = currentState.viewport, x = _d.x, y = _d.y;
var vx = x + dx;
var vy = y + dy;
return i.chain(currentState)
.assoc('mode', modes_1.modeMovingViewport())
.assoc('viewport', { x: vx, y: vy })
.value();
}
}
return currentState;
}
//# sourceMappingURL=move-viewport.js.map