Spaces:
Running
Running
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, | |
} | |
} | |
} | |