zircle
Version:
A frontend library to develop zoomable user interfaces
72 lines (68 loc) • 2.35 kB
JavaScript
import store from '../store'
function calcCoords (distance, angle, parentSize) {
let X = 0
let Y = 0
let Xi = 0
let Yi = 0
if (distance !== 0) {
X = ((store.actions.getComponentWidth(parentSize) / 2) * distance / 100) * Math.cos(angle * (Math.PI / 180))
Y = ((store.actions.getComponentWidth(parentSize) / 2) * distance / 100) * Math.sin(angle * (Math.PI / 180))
Xi = -X
Yi = -Y
}
return {
X,
Y,
Xi,
Yi
}
}
function determinePosition (pos) {
if (store.state.history[store.state.history.length - pos]) {
return store.state.history[store.state.history.length - pos].position
} else {
return {
X: 0, Y: 0, Xi: 0, Yi: 0, scale: 0, scalei: 0
}
}
}
const position = {
getCurrentPosition () {
return determinePosition(1)
},
getPreviousPosition () {
return determinePosition(2)
},
getPastPosition () {
return determinePosition(3)
},
calcViewPosition (viewName) {
store.actions.setLog('calcViewPosition() ' + viewName)
return store.actions.getCurrentViewName() === viewName ? store.actions.getCurrentPosition() : store.actions.getPastPosition()
},
calcPosition (component) {
const parentPosition =
['z-view', 'z-list', 'z-spot'].includes(component.$parent.componentType)
? {
Xi: component.$parent.position.Xi,
Yi: component.$parent.position.Yi,
X: component.$parent.position.X,
Y: component.$parent.position.Y,
scalei: component.$parent.position.scalei,
scale: component.$parent.position.scale
}
: { Xi: 0, Yi: 0, X: 0, Y: 0, scalei: 1, scale: 1 }
const newCoords = calcCoords(component.distance, component.angle, component.$parent.size)
return {
X: newCoords.X,
Y: newCoords.Y,
Xi: parentPosition.Xi + newCoords.Xi * parentPosition.scalei,
Yi: parentPosition.Yi + newCoords.Yi * parentPosition.scalei,
scale: parentPosition.scale * store.state.diameters.xxl / store.actions.getComponentWidth(component.size),
scalei: parentPosition.scalei * store.actions.getComponentWidth(component.size) / store.state.diameters.xxl,
Xabs: parentPosition.X + newCoords.X * parentPosition.scalei,
Yabs: parentPosition.Y + newCoords.Y * parentPosition.scalei
}
}
}
export default position