# HG changeset patch # User am@osimis.io # Date 1529065765 -7200 # Node ID 68856534f005fff816e219673e6493997cd1562b # Parent 7d3b2c4f9ba1276216f42a34aebf20bf24549f7b added layout to VSOL, SDL & wasm working diff -r 7d3b2c4f9ba1 -r 68856534f005 Applications/IBasicApplication.h --- a/Applications/IBasicApplication.h Fri Jun 15 11:23:04 2018 +0200 +++ b/Applications/IBasicApplication.h Fri Jun 15 14:29:25 2018 +0200 @@ -65,9 +65,9 @@ const boost::program_options::variables_map& parameters) = 0; #if ORTHANC_ENABLE_SDL == 1 - virtual BasicApplicationContext& CreateApplicationContext(Orthanc::WebServiceParameters& orthancWebService) = 0; + virtual BasicApplicationContext& CreateApplicationContext(Orthanc::WebServiceParameters& orthancWebService, OrthancStone::WidgetViewport* centralViewport) = 0; #else - virtual BasicApplicationContext& CreateApplicationContext(IWebService& orthancWebService) = 0; + virtual BasicApplicationContext& CreateApplicationContext(IWebService& orthancWebService, std::shared_ptr centralViewport) = 0; #endif virtual std::string GetTitle() const = 0; diff -r 7d3b2c4f9ba1 -r 68856534f005 Applications/Sdl/BasicSdlApplication.cpp --- a/Applications/Sdl/BasicSdlApplication.cpp Fri Jun 15 11:23:04 2018 +0200 +++ b/Applications/Sdl/BasicSdlApplication.cpp Fri Jun 15 14:29:25 2018 +0200 @@ -243,7 +243,8 @@ LOG(WARNING) << "Creating the widgets of the application"; LogStatusBar statusBar; - BasicSdlApplicationContext& context = dynamic_cast(application.CreateApplicationContext(webService)); + OrthancStone::WidgetViewport* centralViewport = new OrthancStone::WidgetViewport(); + BasicSdlApplicationContext& context = dynamic_cast(application.CreateApplicationContext(webService, centralViewport)); application.Initialize(statusBar, parameters); diff -r 7d3b2c4f9ba1 -r 68856534f005 Applications/Sdl/BasicSdlApplicationContext.cpp --- a/Applications/Sdl/BasicSdlApplicationContext.cpp Fri Jun 15 11:23:04 2018 +0200 +++ b/Applications/Sdl/BasicSdlApplicationContext.cpp Fri Jun 15 14:29:25 2018 +0200 @@ -25,7 +25,7 @@ { IWidget& BasicSdlApplicationContext::SetCentralWidget(IWidget* widget) // Takes ownership { - centralViewport_.SetCentralWidget(widget); + centralViewport_->SetCentralWidget(widget); return *widget; } @@ -44,10 +44,11 @@ } - BasicSdlApplicationContext::BasicSdlApplicationContext(Orthanc::WebServiceParameters& orthanc) : + BasicSdlApplicationContext::BasicSdlApplicationContext(Orthanc::WebServiceParameters& orthanc, WidgetViewport* centralViewport) : oracle_(viewportMutex_, 4), // Use 4 threads to download //oracle_(viewportMutex_, 1), // Disable threading to be reproducible webService_(oracle_, orthanc), + centralViewport_(centralViewport), stopped_(true), updateDelay_(100) // By default, 100ms between each refresh of the content { @@ -59,7 +60,7 @@ { oracle_.Start(); - if (centralViewport_.HasUpdateContent()) + if (centralViewport_->HasUpdateContent()) { stopped_ = false; updateThread_ = boost::thread(UpdateThread, this); diff -r 7d3b2c4f9ba1 -r 68856534f005 Applications/Sdl/BasicSdlApplicationContext.h --- a/Applications/Sdl/BasicSdlApplicationContext.h Fri Jun 15 11:23:04 2018 +0200 +++ b/Applications/Sdl/BasicSdlApplicationContext.h Fri Jun 15 14:29:25 2018 +0200 @@ -42,7 +42,7 @@ Oracle oracle_; OracleWebService webService_; boost::mutex viewportMutex_; - WidgetViewport centralViewport_; + std::unique_ptr centralViewport_; boost::thread updateThread_; bool stopped_; unsigned int updateDelay_; @@ -57,7 +57,7 @@ public: ViewportLocker(BasicSdlApplicationContext& that) : lock_(that.viewportMutex_), - viewport_(that.centralViewport_) + viewport_(*(that.centralViewport_.get())) { } @@ -68,7 +68,7 @@ }; - BasicSdlApplicationContext(Orthanc::WebServiceParameters& orthanc); + BasicSdlApplicationContext(Orthanc::WebServiceParameters& orthanc, WidgetViewport* centralViewport); virtual ~BasicSdlApplicationContext() {} diff -r 7d3b2c4f9ba1 -r 68856534f005 Platforms/WebAssembly/Defaults.cpp --- a/Platforms/WebAssembly/Defaults.cpp Fri Jun 15 11:23:04 2018 +0200 +++ b/Platforms/WebAssembly/Defaults.cpp Fri Jun 15 14:29:25 2018 +0200 @@ -81,7 +81,7 @@ boost::program_options::variables_map parameters; application->GetStartupParameters(parameters); - BasicWasmApplicationContext& context = dynamic_cast(application->CreateApplicationContext(OrthancStone::WasmWebService::GetInstance())); + BasicWasmApplicationContext& context = dynamic_cast(application->CreateApplicationContext(OrthancStone::WasmWebService::GetInstance(), NULL)); application->Initialize(statusBar_, parameters); // viewport->SetSize(width_, height_); diff -r 7d3b2c4f9ba1 -r 68856534f005 Platforms/WebAssembly/Defaults.h --- a/Platforms/WebAssembly/Defaults.h Fri Jun 15 11:23:04 2018 +0200 +++ b/Platforms/WebAssembly/Defaults.h Fri Jun 15 14:29:25 2018 +0200 @@ -9,7 +9,7 @@ #include #include -typedef OrthancStone::IViewport* ViewportHandle; // the objects exchanged between JS and C++ +typedef OrthancStone::WidgetViewport* ViewportHandle; // the objects exchanged between JS and C++ #ifdef __cplusplus extern "C" { diff -r 7d3b2c4f9ba1 -r 68856534f005 Platforms/WebAssembly/wasm-application.ts --- a/Platforms/WebAssembly/wasm-application.ts Fri Jun 15 11:23:04 2018 +0200 +++ b/Platforms/WebAssembly/wasm-application.ts Fri Jun 15 14:29:25 2018 +0200 @@ -103,7 +103,7 @@ CreateWasmApplication = StoneFrameworkModule.cwrap('CreateWasmApplication', null, ['number']); CreateCppViewport = StoneFrameworkModule.cwrap('CreateCppViewport', 'number', []); ReleaseCppViewport = StoneFrameworkModule.cwrap('ReleaseCppViewport', null, ['number']); - StartWasmApplication = StoneFrameworkModule.cwrap('StartWasmApplication', null, []); + StartWasmApplication = StoneFrameworkModule.cwrap('StartWasmApplication', null, ['number']); WasmWebService_NotifySuccess = StoneFrameworkModule.cwrap('WasmWebService_NotifySuccess', null, ['number', 'string', 'array', 'number', 'number']); WasmWebService_NotifyError = StoneFrameworkModule.cwrap('WasmWebService_NotifyError', null, ['number', 'string', 'number']);