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);
}