diff --git a/demo/client/html/svg.html b/demo/client/html/svg.html index 96266b50..8cc6d040 100644 --- a/demo/client/html/svg.html +++ b/demo/client/html/svg.html @@ -37,7 +37,7 @@
diff --git a/demo/client/src/app-controller.ts b/demo/client/src/app-controller.ts index 2c9ce8b2..242e8b70 100644 --- a/demo/client/src/app-controller.ts +++ b/demo/client/src/app-controller.ts @@ -8,10 +8,12 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +import {AntialiasingStrategyName} from "./aa-strategy"; import {ShaderLoader, ShaderMap, ShaderProgramSource} from './shader-loader'; -import {expectNotNull} from './utils'; +import {expectNotNull, unwrapUndef} from './utils'; +import {PathfinderView} from "./view"; -export default abstract class AppController { +export default abstract class AppController { constructor() {} start() { @@ -23,6 +25,18 @@ export default abstract class AppController { this.view = Promise.all([shaderLoader.common, shaderLoader.shaders]).then(allShaders => { return this.createView(canvas, allShaders[0], allShaders[1]); }); + + this.aaLevelSelect = document.getElementById('pf-aa-level-select') as HTMLSelectElement; + this.aaLevelSelect.addEventListener('change', () => this.updateAALevel(), false); + this.updateAALevel(); + } + + private updateAALevel() { + const selectedOption = this.aaLevelSelect.selectedOptions[0]; + const aaType = unwrapUndef(selectedOption.dataset.pfType) as + AntialiasingStrategyName; + const aaLevel = parseInt(unwrapUndef(selectedOption.dataset.pfLevel)); + this.view.then(view => view.setAntialiasingOptions(aaType, aaLevel)); } protected loadFile() { @@ -48,4 +62,5 @@ export default abstract class AppController { protected canvas: HTMLCanvasElement; protected loadFileButton: HTMLInputElement; + private aaLevelSelect: HTMLSelectElement; } diff --git a/demo/client/src/text.ts b/demo/client/src/text.ts index 84a76022..5e9f2601 100644 --- a/demo/client/src/text.ts +++ b/demo/client/src/text.ts @@ -100,18 +100,6 @@ opentype.Font.prototype.isSupported = function() { return (this as any).supported; } -// Various utility functions - -function expectNotUndef(value: T | undefined, message: string): T { - if (value === undefined) - throw new PathfinderError(message); - return value; -} - -function unwrapUndef(value: T | undefined): T { - return expectNotUndef(value, "Unexpected `undefined`!"); -} - /// The separating axis theorem. function rectsIntersect(a: glmatrix.vec4, b: glmatrix.vec4): boolean { return a[2] > b[0] && a[3] > b[1] && a[0] < b[2] && a[1] < b[3]; @@ -132,10 +120,6 @@ class TextDemoController extends AppController { this.loadFileButton = document.getElementById('pf-load-font-button') as HTMLInputElement; this.loadFileButton.addEventListener('change', () => this.loadFile(), false); - - this.aaLevelSelect = document.getElementById('pf-aa-level-select') as HTMLSelectElement; - this.aaLevelSelect.addEventListener('change', () => this.updateAALevel(), false); - this.updateAALevel(); } protected createView(canvas: HTMLCanvasElement, @@ -144,14 +128,6 @@ class TextDemoController extends AppController { return new TextDemoView(this, canvas, commonShaderSource, shaderSources); } - private updateAALevel() { - const selectedOption = this.aaLevelSelect.selectedOptions[0]; - const aaType = unwrapUndef(selectedOption.dataset.pfType) as - keyof AntialiasingStrategyTable; - const aaLevel = parseInt(unwrapUndef(selectedOption.dataset.pfLevel)); - this.view.then(view => view.setAntialiasingOptions(aaType, aaLevel)); - } - protected fileLoaded() { this.font = opentype.parse(this.fileData); if (!this.font.isSupported()) @@ -225,7 +201,6 @@ class TextDemoController extends AppController { this.view.then(view => view.attachText()); } - private aaLevelSelect: HTMLSelectElement; private fpsLabel: HTMLElement; font: opentype.Font; diff --git a/demo/client/src/utils.ts b/demo/client/src/utils.ts index 4f072fec..cbc3cb92 100644 --- a/demo/client/src/utils.ts +++ b/demo/client/src/utils.ts @@ -25,10 +25,20 @@ export function expectNotNull(value: T | null, message: string): T { return value; } +function expectNotUndef(value: T | undefined, message: string): T { + if (value === undefined) + throw new PathfinderError(message); + return value; +} + export function unwrapNull(value: T | null): T { return expectNotNull(value, "Unexpected null!"); } +export function unwrapUndef(value: T | undefined): T { + return expectNotUndef(value, "Unexpected `undefined`!"); +} + export class PathfinderError extends Error { constructor(message?: string | undefined) { super(message); diff --git a/demo/client/src/view.ts b/demo/client/src/view.ts index 7eea0e5c..3cd3c61b 100644 --- a/demo/client/src/view.ts +++ b/demo/client/src/view.ts @@ -239,7 +239,7 @@ export abstract class PathfinderView { private setTransformUniform(uniforms: UniformMap) { const transform = glmatrix.mat4.create(); - glmatrix.mat4.mul(transform, this.worldTransform, this.antialiasingStrategy.transform); + glmatrix.mat4.mul(transform, this.antialiasingStrategy.transform, this.worldTransform); this.gl.uniformMatrix4fv(uniforms.uTransform, false, transform); }