12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import {mat3} from 'gl-matrix';
- // Computes the transformation matrix that is used to render scaled
- // elements to the DOM and draw the view.
- export class TraceView {
- public x: number;
- public y: number;
- public width: number;
- public height: number;
- constructor(x: number, y: number, width: number, height: number) {
- this.x = x;
- this.y = y;
- this.width = width;
- this.height = height;
- }
- static From(view: TraceView): TraceView {
- return new TraceView(view.x, view.y, view.width, view.height);
- }
- static Empty(): TraceView {
- return new TraceView(0, 0, 1000, 1);
- }
- serialize() {
- return [this.x, this.y, this.width, this.height];
- }
- between(to: TraceView): mat3 {
- return mat3.fromValues(
- to.width / this.width,
- 0,
- 0,
- to.height / this.height,
- 0,
- 0,
- to.x - this.x * (to.width / this.width),
- to.y - this.y * (to.height / this.height),
- 1
- );
- }
- transform(mat: mat3): [number, number, number, number] {
- const x = this.x * mat[0] + this.y * mat[3] + mat[6];
- const y = this.x * mat[1] + this.y * mat[4] + mat[7];
- const width = this.width * mat[0] + this.height * mat[3];
- const height = this.width * mat[1] + this.height * mat[4];
- return [x, y, width, height];
- }
- get center() {
- return this.x + this.width / 2;
- }
- get left() {
- return this.x;
- }
- get right() {
- return this.x + this.width;
- }
- get top() {
- return this.y;
- }
- get bottom() {
- return this.y + this.height;
- }
- }
|