Spaces:
Running
Running
File size: 1,622 Bytes
f23825d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
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,
}
}
}
|