Mercurial > hg > orthanc-stone
diff Platforms/Wasm/Defaults.h @ 236:f73d722d98c8 am
renamed folder
author | am@osimis.io |
---|---|
date | Tue, 19 Jun 2018 16:06:32 +0200 |
parents | Platforms/WebAssembly/Defaults.h@68856534f005 |
children | 092db46c6291 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Platforms/Wasm/Defaults.h Tue Jun 19 16:06:32 2018 +0200 @@ -0,0 +1,74 @@ +#pragma once + +#include <emscripten/emscripten.h> + +#include <Framework/dev.h> +#include <Framework/Viewport/WidgetViewport.h> +#include <Framework/Widgets/LayerWidget.h> +#include <Framework/Widgets/LayoutWidget.h> +#include <Applications/Wasm/BasicWasmApplication.h> +#include <Applications/Wasm/BasicWasmApplicationContext.h> + +typedef OrthancStone::WidgetViewport* ViewportHandle; // the objects exchanged between JS and C++ + +#ifdef __cplusplus +extern "C" { +#endif + + // JS methods accessible from C++ + extern void ScheduleWebViewportRedrawFromCpp(ViewportHandle cppViewportHandle); + + // C++ methods accessible from JS + extern void EMSCRIPTEN_KEEPALIVE CreateWasmApplication(ViewportHandle cppViewportHandle); + +#ifdef __cplusplus +} +#endif + +extern OrthancStone::BasicWasmApplication* CreateUserApplication(); + +namespace OrthancStone { + + // default Ovserver to trigger Viewport redraw when something changes in the Viewport + class ChangeObserver : + public OrthancStone::IViewport::IObserver + { + private: + // Flag to avoid flooding JavaScript with redundant Redraw requests + bool isScheduled_; + + public: + ChangeObserver() : + isScheduled_(false) + { + } + + void Reset() + { + isScheduled_ = false; + } + + virtual void NotifyChange(const OrthancStone::IViewport &viewport) + { + if (!isScheduled_) + { + ScheduleWebViewportRedrawFromCpp((ViewportHandle)&viewport); // loosing constness when transmitted to Web + isScheduled_ = true; + } + } + }; + + // default status bar to log messages on the console/stdout + class StatusBar : public OrthancStone::IStatusBar + { + public: + virtual void ClearMessage() + { + } + + virtual void SetMessage(const std::string& message) + { + printf("%s\n", message.c_str()); + } + }; +} \ No newline at end of file