UNPKG

core-graphics

Version:

A core library for creating shape-based graphic editors

141 lines (119 loc) 5.72 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; exports.default = rubberBandStateReducer; exports.rubberBandEnterReducer = rubberBandEnterReducer; exports.rubberBandStateUpdateReducer = rubberBandStateUpdateReducer; exports.rubberBandFinishingReducer = rubberBandFinishingReducer; var _rubberBand = require('../../utils/rubber-band'); var _data = require('../../utils/data'); var _editorEvents = require('../editor-events'); 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; } } var REDUCERS = [rubberBandEnterReducer, rubberBandStateUpdateReducer, rubberBandFinishingReducer]; function rubberBandStateReducer(currentState, ev) { return REDUCERS.reduce(function (res, fn) { return fn(res, ev); }, currentState); } // entering function rubberBandEnterReducer(currentState, ev) { var mode = currentState.mode; if ((0, _modes.isSelectMode)(mode)) { var mouse = currentState.mouse; if (mouse.down && (0, _editorEvents.isEditorInputEvent)(ev) && (0, _editorEvents.isMouseMoveEvent)(ev)) { // enter mode var lastDownX = mouse.lastDownX; var lastDownY = mouse.lastDownY; var _ev$payload = ev.payload; var x = _ev$payload.x; var y = _ev$payload.y; var nextMode = (0, _modes.modeRubberbandSelection)({ pStart: { x: lastDownX, y: lastDownY }, pEnd: { x: x, y: y }, newlySelectedShapes: [], previouslySelectedShapes: [] }); return i.assoc(currentState, 'mode', nextMode); } return currentState; } if ((0, _modes.isSelectedMode)(mode)) { var _mouse = currentState.mouse; var modifierKeys = currentState.modifierKeys; if (_mouse.down && modifierKeys[_editorEvents.SceneModifierKey.Shift] && (0, _editorEvents.isEditorInputEvent)(ev) && (0, _editorEvents.isMouseMoveEvent)(ev)) { // enter mode var ids = mode.payload.ids; var _lastDownX = _mouse.lastDownX; var _lastDownY = _mouse.lastDownY; var _ev$payload2 = ev.payload; var _x = _ev$payload2.x; var _y = _ev$payload2.y; var _nextMode = (0, _modes.modeRubberbandSelection)({ pStart: { x: _lastDownX, y: _lastDownY }, pEnd: { x: _x, y: _y }, newlySelectedShapes: [], previouslySelectedShapes: ids }); return i.assoc(currentState, 'mode', _nextMode); } return currentState; } return currentState; } //updating function rubberBandStateUpdateReducer(currentState, ev) { var mode = currentState.mode; if ((0, _modes.isRubberBandSelectionMode)(mode)) { var mouse = currentState.mouse; if (mouse.down && (0, _editorEvents.isEditorInputEvent)(ev) && (0, _editorEvents.isMouseMoveEvent)(ev)) { var _ret = function () { var _ev$payload3 = ev.payload; var x = _ev$payload3.x; var y = _ev$payload3.y; var _mode$payload = mode.payload; var pStart = _mode$payload.pStart; var pEnd = _mode$payload.pEnd; var shapesDeclarations = currentState.shapesDeclarations; var _currentState$scene = currentState.scene; var shapes = _currentState$scene.shapes; var shapesOrder = _currentState$scene.shapesOrder; var shapesData = shapesOrder.map(function (id) { return shapes[id]; }); var selectedShapes = (0, _rubberBand.getShapesSelectedWithRubberBand)({ pStart: pStart, pEnd: pEnd, shapesData: shapesData, shapesDeclarations: shapesDeclarations }); var nextMode = i.merge(mode, { payload: { pEnd: { x: x, y: y }, newlySelectedShapes: selectedShapes } }); return { v: i.assoc(currentState, 'mode', nextMode) }; }(); if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; } return currentState; } return currentState; } // finishing function rubberBandFinishingReducer(currentState, ev) { var mode = currentState.mode; if ((0, _modes.isRubberBandSelectionMode)(mode) && (0, _editorEvents.isEditorInputEvent)(ev) && ((0, _editorEvents.isMouseUpEvent)(ev) || (0, _editorEvents.isMouseLeaveEvent)(ev))) { var _mode$payload2 = mode.payload; var newlySelectedShapes = _mode$payload2.newlySelectedShapes; var previouslySelectedShapes = _mode$payload2.previouslySelectedShapes; var selected = (0, _data.uniq)(previouslySelectedShapes.concat(newlySelectedShapes)); var newMode = (0, _modes.modeSelected)(selected); return i.assoc(currentState, 'mode', newMode); } return currentState; }