export default class Cursor { constructor() { this.FINGER2CURSOR = { 'move': 'move', 'rotate': getRotateCursor, 'origin': 'crosshair', '1000': 'ns-resize', '1100': 'nesw-resize', '0100': 'ew-resize', '0110': 'nwse-resize', '0010': 'ns-resize', '0011': 'nesw-resize', '0001': 'ew-resize', '1001': 'nwse-resize', } } getCursor (props, state, x, y){ var {finger} = state var cursor = this.FINGER2CURSOR[finger] if (typeof cursor === 'string' && cursor.indexOf('resize') !== -1) { cursor = getScaleCursor } if (typeof cursor === 'function') { cursor = cursor(props, state, x, y) } return cursor } } function getRotateCursor(props, state, mx, my) { var po = props.coordinator.localToGlobal(state.pOrigin) var r = Math.atan2(my - po.y, mx - po.x) / Math.PI * 180 var svg = escape(``) return `url('data:image/svg+xml;utf8,${svg}') 16 16, all-scroll` } function getScaleCursor(props, state) { var FINGERS = ['0100', '0110', '0010', '0011', '0001', '1001', '1000', '1100'] var {coordinator, transform} = props var {pOrigin, finger} = state var sideDeg = FINGERS.indexOf(finger) * 45 var po = coordinator.localToGlobal(pOrigin) var oTweak = {x: pOrigin.x + 1234, y: pOrigin.y} var pot = coordinator.localToGlobal(oTweak) var baseRad = Math.atan2(pot.y - po.y, pot.x - po.x) + transform.rz var r = sideDeg + (baseRad / Math.PI * 180) var svg = escape(``) return `url(data:image/svg+xml;utf8,${svg}) 16 16, all-scroll` }