Spaces:
Sleeping
Sleeping
| import { ItemValue } from "../../main/components/ControlPane/LineGraph/LineGraph" | |
| import { IPoint, IRect } from "../geometry" | |
| import { ControlSelection } from "../selection/ControlSelection" | |
| export class ControlCoordTransform { | |
| private _maxValue: number | |
| private _height: number | |
| private _lineWidth: number | |
| private _pixelsPerTick: number | |
| constructor( | |
| pixelsPerTick: number, | |
| maxValue: number, | |
| height: number, | |
| lineWidth: number, | |
| ) { | |
| this._pixelsPerTick = pixelsPerTick | |
| this._maxValue = maxValue | |
| this._height = height | |
| this._lineWidth = lineWidth | |
| } | |
| get maxValue() { | |
| return this._maxValue | |
| } | |
| getX(tick: number) { | |
| return tick * this._pixelsPerTick | |
| } | |
| getTicks(pixels: number) { | |
| return Math.floor(pixels / this._pixelsPerTick) | |
| } | |
| getY(value: number) { | |
| return ( | |
| (1 - value / this._maxValue) * (this._height - this._lineWidth * 2) + | |
| this._lineWidth | |
| ) | |
| } | |
| getValue(y: number) { | |
| return Math.floor( | |
| (1 - (y - this._lineWidth) / (this._height - this._lineWidth * 2)) * | |
| this._maxValue, | |
| ) | |
| } | |
| toPosition(tick: number, value: number): IPoint { | |
| return { | |
| x: Math.round(this.getX(tick)), | |
| y: Math.round(this.getY(value)), | |
| } | |
| } | |
| fromPosition(position: IPoint): ItemValue { | |
| return { | |
| tick: this.getTicks(position.x), | |
| value: this.getValue(position.y), | |
| } | |
| } | |
| transformSelection(selection: ControlSelection): IRect { | |
| const x = this.getX(selection.fromTick) | |
| return { | |
| x, | |
| y: 0, | |
| width: this.getX(selection.toTick) - x, | |
| height: this._height, | |
| } | |
| } | |
| } | |