annotate Platforms/WebAssembly/wasm-application.ts @ 230:7d2631320615 am

wasm-application.js is now in ts
author am@osimis.io
date Thu, 14 Jun 2018 17:14:10 +0200
parents b0ba3b38a23c
children 5027cb2feb51
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
225
am@osimis.io
parents:
diff changeset
1 ///<reference path='stone-framework-loader.ts'/>
229
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
2 ///<reference path='wasm-viewport.ts'/>
225
am@osimis.io
parents:
diff changeset
3
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
4 if (!('WebAssembly' in window)) {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
5 alert('Sorry, your browser does not support WebAssembly :(');
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
6 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
7
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
8 declare var StoneFrameworkModule : Stone.Framework;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
9
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
10 var viewport = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
11
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
12 // global functions
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
13 var WasmWebService_NotifyError: Function = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
14 var WasmWebService_NotifySuccess: Function = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
15 var NotifyUpdateContent: Function = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
16 var SetStartupParameter: Function = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
17 var CreateWasmApplication: Function = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
18 var CreateCppViewport: Function = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
19 var ReleaseCppViewport: Function = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
20 var StartWasmApplication: Function = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
21
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
22
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
23 function UpdateContentThread() {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
24 if (NotifyUpdateContent != null) {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
25 NotifyUpdateContent();
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
26 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
27
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
28 setTimeout(UpdateContentThread, 100); // Update the viewport content every 100ms if need be
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
29 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
30
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
31
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
32 function GetUriParameters() {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
33 var parameters = window.location.search.substr(1);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
34
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
35 if (parameters != null &&
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
36 parameters != '') {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
37 var result = {};
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
38 var tokens = parameters.split('&');
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
39
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
40 for (var i = 0; i < tokens.length; i++) {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
41 var tmp = tokens[i].split('=');
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
42 if (tmp.length == 2) {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
43 result[tmp[0]] = decodeURIComponent(tmp[1]);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
44 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
45 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
46
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
47 return result;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
48 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
49 else {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
50 return {};
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
51 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
52 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
53
229
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
54 module Stone {
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
55
229
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
56 // export declare type InitializationCallback = () => void;
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
57
229
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
58 // export declare var StoneFrameworkModule : any;
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
59
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
60 //const ASSETS_FOLDER : string = "assets/lib";
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
61 //const WASM_FILENAME : string = "orthanc-framework";
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
62
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
63 export class WasmApplication {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
64
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
65 private viewport_: WasmViewport;
229
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
66 private canvasId_: string;
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
67
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
68 private pimpl_: any; // Private pointer to the underlying WebAssembly C++ object
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
69
229
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
70 public constructor(canvasId: string) {
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
71 this.canvasId_ = canvasId;
229
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
72 //this.module_ = module;
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
73 }
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
74 }
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
75 }
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
76
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
77
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
78 function InitializeWasmApplication(canvasId: string): void {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
79
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
80 console.log("Creating main viewport");
229
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
81
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
82 viewport = new Stone.WasmViewport(StoneFrameworkModule, canvasId);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
83 viewport.Initialize(CreateCppViewport());
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
84
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
85 document.getElementById(canvasId).onclick = function () {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
86 viewport.Redraw();
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
87 };
225
am@osimis.io
parents:
diff changeset
88
am@osimis.io
parents:
diff changeset
89
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
90 /************************************** */
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
91 CreateWasmApplication();
226
1fa4c65c7e1b WasmViewport in ts
am@osimis.io
parents: 225
diff changeset
92
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
93 // parse uri and transmit the parameters to the app before initializing it
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
94 var parameters = GetUriParameters();
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
95
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
96 for (var key in parameters) {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
97 if (parameters.hasOwnProperty(key)) {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
98 SetStartupParameter(key, parameters[key]);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
99 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
100 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
101
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
102 StartWasmApplication(viewport.GetCppViewport());
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
103 /************************************** */
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
104
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
105 UpdateContentThread();
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
106 }
226
1fa4c65c7e1b WasmViewport in ts
am@osimis.io
parents: 225
diff changeset
107
225
am@osimis.io
parents:
diff changeset
108 // Wait for the Orthanc Framework to be initialized (this initializes
229
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
109 // the WebAssembly environment) and then, create and initialize the Wasm application
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
110 Stone.Framework.Initialize(true, function () {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
111
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
112 console.log("Connecting C++ methods to JS methods");
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
113
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
114 SetStartupParameter = StoneFrameworkModule.cwrap('SetStartupParameter', null, ['string', 'string']);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
115 CreateWasmApplication = StoneFrameworkModule.cwrap('CreateWasmApplication', null, ['any']);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
116 CreateCppViewport = StoneFrameworkModule.cwrap('CreateCppViewport', 'any', []);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
117 ReleaseCppViewport = StoneFrameworkModule.cwrap('ReleaseCppViewport', null, ['any']);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
118 StartWasmApplication = StoneFrameworkModule.cwrap('StartWasmApplication', null, []);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
119
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
120 WasmWebService_NotifySuccess = StoneFrameworkModule.cwrap('WasmWebService_NotifySuccess', null, ['number', 'string', 'array', 'number', 'number']);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
121 WasmWebService_NotifyError = StoneFrameworkModule.cwrap('WasmWebService_NotifyError', null, ['number', 'string', 'number']);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
122 NotifyUpdateContent = StoneFrameworkModule.cwrap('NotifyUpdateContent', null, []);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
123
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
124 // Prevent scrolling
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
125 document.body.addEventListener('touchmove', function (event) {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
126 event.preventDefault();
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
127 }, false);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
128
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
129
229
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
130 InitializeWasmApplication("canvas");
225
am@osimis.io
parents:
diff changeset
131 });