annotate Platforms/WebAssembly/wasm-application.ts @ 231:5027cb2feb51 am

viewport is now part of the Application itself and not global anymore
author am@osimis.io
date Thu, 14 Jun 2018 18:49:19 +0200
parents 7d2631320615
children 68856534f005
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 // global functions
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
11 var WasmWebService_NotifyError: Function = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
12 var WasmWebService_NotifySuccess: Function = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
13 var NotifyUpdateContent: Function = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
14 var SetStartupParameter: Function = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
15 var CreateWasmApplication: Function = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
16 var CreateCppViewport: Function = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
17 var ReleaseCppViewport: Function = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
18 var StartWasmApplication: Function = null;
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
19
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
20
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
21 function UpdateContentThread() {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
22 if (NotifyUpdateContent != null) {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
23 NotifyUpdateContent();
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
24 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
25
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
26 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
27 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
28
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 function GetUriParameters() {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
31 var parameters = window.location.search.substr(1);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
32
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
33 if (parameters != null &&
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
34 parameters != '') {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
35 var result = {};
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
36 var tokens = parameters.split('&');
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
37
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
38 for (var i = 0; i < tokens.length; i++) {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
39 var tmp = tokens[i].split('=');
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
40 if (tmp.length == 2) {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
41 result[tmp[0]] = decodeURIComponent(tmp[1]);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
42 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
43 }
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 return result;
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 else {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
48 return {};
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
49 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
50 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
51
229
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
52 module Stone {
230
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 // export declare type InitializationCallback = () => void;
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 var StoneFrameworkModule : any;
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
57
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
58 //const ASSETS_FOLDER : string = "assets/lib";
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
59 //const WASM_FILENAME : string = "orthanc-framework";
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
60
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
61 export class WasmApplication {
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 private viewport_: WasmViewport;
229
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
64 private canvasId_: string;
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
65
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
66 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
67
229
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
68 public constructor(canvasId: string) {
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
69 this.canvasId_ = canvasId;
229
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
70 //this.module_ = module;
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
71 }
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
72 }
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
73 }
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
74
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
75
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
76 function InitializeWasmApplication(canvasId: string): void {
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 /************************************** */
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
79 CreateWasmApplication();
226
1fa4c65c7e1b WasmViewport in ts
am@osimis.io
parents: 225
diff changeset
80
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
81 // 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
82 var parameters = GetUriParameters();
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
83
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
84 for (var key in parameters) {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
85 if (parameters.hasOwnProperty(key)) {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
86 SetStartupParameter(key, parameters[key]);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
87 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
88 }
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
89
231
5027cb2feb51 viewport is now part of the Application itself and not global anymore
am@osimis.io
parents: 230
diff changeset
90 StartWasmApplication();
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
91 /************************************** */
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
92
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
93 UpdateContentThread();
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
94 }
226
1fa4c65c7e1b WasmViewport in ts
am@osimis.io
parents: 225
diff changeset
95
225
am@osimis.io
parents:
diff changeset
96 // Wait for the Orthanc Framework to be initialized (this initializes
229
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
97 // 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
98 Stone.Framework.Initialize(true, function () {
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 console.log("Connecting C++ methods to JS methods");
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 SetStartupParameter = StoneFrameworkModule.cwrap('SetStartupParameter', null, ['string', 'string']);
231
5027cb2feb51 viewport is now part of the Application itself and not global anymore
am@osimis.io
parents: 230
diff changeset
103 CreateWasmApplication = StoneFrameworkModule.cwrap('CreateWasmApplication', null, ['number']);
5027cb2feb51 viewport is now part of the Application itself and not global anymore
am@osimis.io
parents: 230
diff changeset
104 CreateCppViewport = StoneFrameworkModule.cwrap('CreateCppViewport', 'number', []);
5027cb2feb51 viewport is now part of the Application itself and not global anymore
am@osimis.io
parents: 230
diff changeset
105 ReleaseCppViewport = StoneFrameworkModule.cwrap('ReleaseCppViewport', null, ['number']);
230
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
106 StartWasmApplication = StoneFrameworkModule.cwrap('StartWasmApplication', null, []);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
107
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
108 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
109 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
110 NotifyUpdateContent = StoneFrameworkModule.cwrap('NotifyUpdateContent', null, []);
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 // Prevent scrolling
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
113 document.body.addEventListener('touchmove', function (event) {
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
114 event.preventDefault();
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
115 }, false);
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
116
7d2631320615 wasm-application.js is now in ts
am@osimis.io
parents: 229
diff changeset
117
229
b0ba3b38a23c ScheduleRedraw can handle multiple viewports
am@osimis.io
parents: 226
diff changeset
118 InitializeWasmApplication("canvas");
225
am@osimis.io
parents:
diff changeset
119 });