# HG changeset patch # User am@osimis.io # Date 1528989250 -7200 # Node ID 7d2631320615e23aa811cbc807c327ce7630ebd2 # Parent b0ba3b38a23c64a0a38f45dda9f3ee9ea6255432 wasm-application.js is now in ts diff -r b0ba3b38a23c -r 7d2631320615 Platforms/WebAssembly/wasm-application.js --- a/Platforms/WebAssembly/wasm-application.js Thu Jun 14 16:51:43 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ - - -// Global context used by "library.js" -var viewport = null; -var WasmWebService_NotifyError = null; -var WasmWebService_NotifySuccess = null; -var NotifyUpdateContent = null; - -function UpdateContentThread() -{ - if (NotifyUpdateContent != null) { - NotifyUpdateContent(); - } - - setTimeout(UpdateContentThread, 100); // Update the viewport content every 100ms if need be -} - - -function GetUriParameters() -{ - var parameters = window.location.search.substr(1); - - if (parameters != null && - parameters != '') - { - var result = {}; - var tokens = parameters.split('&'); - - for (var i = 0; i < tokens.length; i++) { - var tmp = tokens[i].split('='); - if (tmp.length == 2) { - result[tmp[0]] = decodeURIComponent(tmp[1]); - } - } - - return result; - } - else - { - return {}; - } -} - - - -function InitializeWasmApplication(canvasId) -{ - console.log("Initializing wasm-app"); - - console.log("Connecting C++ methods to JS methods"); - SetStartupParameter = StoneFrameworkModule.cwrap('SetStartupParameter', null, [ 'string', 'string' ]); - CreateWasmApplication = StoneFrameworkModule.cwrap('CreateWasmApplication', null, [ 'any' ], [ ]); - CreateCppViewport = StoneFrameworkModule.cwrap('CreateCppViewport', 'any', [ ], [ ]); - ReleaseCppViewport = StoneFrameworkModule.cwrap('ReleaseCppViewport', null, [ 'any' ], [ ]); - StartWasmApplication = StoneFrameworkModule.cwrap('StartWasmApplication', null, [ ], [ ]); - WasmWebService_NotifySuccess = StoneFrameworkModule.cwrap('WasmWebService_NotifySuccess', null, - [ 'number', 'string', 'array', 'number', 'number' ]); - WasmWebService_NotifyError = StoneFrameworkModule.cwrap('WasmWebService_NotifyError', null, - [ 'number', 'string', 'number' ]); - NotifyUpdateContent = StoneFrameworkModule.cwrap('NotifyUpdateContent', null, [ ]); - - console.log("Creating main viewport"); - - viewport = new Stone.WasmViewport(StoneFrameworkModule, canvasId); - viewport.Initialize(CreateCppViewport()); - - // Prevent scrolling - document.body.addEventListener('touchmove', function(event) { - event.preventDefault(); - }, false); - - document.getElementById(canvasId).onclick = function() { - viewport.Redraw(); - }; - - - /************************************** */ - CreateWasmApplication(); - - // parse uri and transmit the parameters to the app before initializing it - var parameters = GetUriParameters(); - - for (var key in parameters) { - if (parameters.hasOwnProperty(key)) { - SetStartupParameter(key, parameters[key]); - } - } - - StartWasmApplication(viewport.GetCppViewport()); - /************************************** */ - - UpdateContentThread(); -} - -if (!('WebAssembly' in window)) { - alert('Sorry, your browser does not support WebAssembly :('); -} else { - -} diff -r b0ba3b38a23c -r 7d2631320615 Platforms/WebAssembly/wasm-application.ts --- a/Platforms/WebAssembly/wasm-application.ts Thu Jun 14 16:51:43 2018 +0200 +++ b/Platforms/WebAssembly/wasm-application.ts Thu Jun 14 17:14:10 2018 +0200 @@ -1,37 +1,131 @@ /// /// +if (!('WebAssembly' in window)) { + alert('Sorry, your browser does not support WebAssembly :('); +} + +declare var StoneFrameworkModule : Stone.Framework; + +var viewport = null; + +// global functions +var WasmWebService_NotifyError: Function = null; +var WasmWebService_NotifySuccess: Function = null; +var NotifyUpdateContent: Function = null; +var SetStartupParameter: Function = null; +var CreateWasmApplication: Function = null; +var CreateCppViewport: Function = null; +var ReleaseCppViewport: Function = null; +var StartWasmApplication: Function = null; + + +function UpdateContentThread() { + if (NotifyUpdateContent != null) { + NotifyUpdateContent(); + } + + setTimeout(UpdateContentThread, 100); // Update the viewport content every 100ms if need be +} + + +function GetUriParameters() { + var parameters = window.location.search.substr(1); + + if (parameters != null && + parameters != '') { + var result = {}; + var tokens = parameters.split('&'); + + for (var i = 0; i < tokens.length; i++) { + var tmp = tokens[i].split('='); + if (tmp.length == 2) { + result[tmp[0]] = decodeURIComponent(tmp[1]); + } + } + + return result; + } + else { + return {}; + } +} + module Stone { - + // export declare type InitializationCallback = () => void; - + // export declare var StoneFrameworkModule : any; - - //const ASSETS_FOLDER : string = "assets/lib"; - //const WASM_FILENAME : string = "orthanc-framework"; - - export class WasmApplication { - - private viewport_ : WasmViewport; + + //const ASSETS_FOLDER : string = "assets/lib"; + //const WASM_FILENAME : string = "orthanc-framework"; + + export class WasmApplication { + + private viewport_: WasmViewport; private canvasId_: string; - - private pimpl_ : any; // Private pointer to the underlying WebAssembly C++ object - + + private pimpl_: any; // Private pointer to the underlying WebAssembly C++ object + public constructor(canvasId: string) { - this.canvasId_ = canvasId; + this.canvasId_ = canvasId; //this.module_ = module; } } } - + + +function InitializeWasmApplication(canvasId: string): void { + + console.log("Creating main viewport"); -declare function InitializeWasmApplication(canvasId: string) :void; // still in a js file + viewport = new Stone.WasmViewport(StoneFrameworkModule, canvasId); + viewport.Initialize(CreateCppViewport()); + + document.getElementById(canvasId).onclick = function () { + viewport.Redraw(); + }; + /************************************** */ + CreateWasmApplication(); + // parse uri and transmit the parameters to the app before initializing it + var parameters = GetUriParameters(); + + for (var key in parameters) { + if (parameters.hasOwnProperty(key)) { + SetStartupParameter(key, parameters[key]); + } + } + + StartWasmApplication(viewport.GetCppViewport()); + /************************************** */ + + UpdateContentThread(); +} // Wait for the Orthanc Framework to be initialized (this initializes // the WebAssembly environment) and then, create and initialize the Wasm application -Stone.Framework.Initialize(true, function() { +Stone.Framework.Initialize(true, function () { + + console.log("Connecting C++ methods to JS methods"); + + SetStartupParameter = StoneFrameworkModule.cwrap('SetStartupParameter', null, ['string', 'string']); + CreateWasmApplication = StoneFrameworkModule.cwrap('CreateWasmApplication', null, ['any']); + CreateCppViewport = StoneFrameworkModule.cwrap('CreateCppViewport', 'any', []); + ReleaseCppViewport = StoneFrameworkModule.cwrap('ReleaseCppViewport', null, ['any']); + StartWasmApplication = StoneFrameworkModule.cwrap('StartWasmApplication', null, []); + + WasmWebService_NotifySuccess = StoneFrameworkModule.cwrap('WasmWebService_NotifySuccess', null, ['number', 'string', 'array', 'number', 'number']); + WasmWebService_NotifyError = StoneFrameworkModule.cwrap('WasmWebService_NotifyError', null, ['number', 'string', 'number']); + NotifyUpdateContent = StoneFrameworkModule.cwrap('NotifyUpdateContent', null, []); + + // Prevent scrolling + document.body.addEventListener('touchmove', function (event) { + event.preventDefault(); + }, false); + + InitializeWasmApplication("canvas"); }); \ No newline at end of file diff -r b0ba3b38a23c -r 7d2631320615 Platforms/WebAssembly/wasm-viewport.ts --- a/Platforms/WebAssembly/wasm-viewport.ts Thu Jun 14 16:51:43 2018 +0200 +++ b/Platforms/WebAssembly/wasm-viewport.ts Thu Jun 14 17:14:10 2018 +0200 @@ -1,17 +1,16 @@ - - var isPendingRedraw = false; +var isPendingRedraw = false; - function ScheduleWebViewportRedraw(cppViewportHandle: any) : void - { - if (!isPendingRedraw) { - isPendingRedraw = true; - console.log('Scheduling a refresh of the viewport, as its content changed'); - window.requestAnimationFrame(function() { - isPendingRedraw = false; - Stone.WasmViewport.GetFromCppViewport(cppViewportHandle).Redraw(); - }); - } +function ScheduleWebViewportRedraw(cppViewportHandle: any) : void +{ + if (!isPendingRedraw) { + isPendingRedraw = true; + console.log('Scheduling a refresh of the viewport, as its content changed'); + window.requestAnimationFrame(function() { + isPendingRedraw = false; + Stone.WasmViewport.GetFromCppViewport(cppViewportHandle).Redraw(); + }); } +} module Stone {