Mercurial > hg > orthanc-stone
diff Framework/Scene2DViewport/ViewportController.h @ 1331:ab81ee8fce1f broker
- Viewport is not passed and stored as a shared_ptr instead
of raw reference.
- ViewportController can now be injected with an undo
stack (not a ctor param anymore, as a preparation for the
move of the undo stack to an interactor)
- Added (temp) flag to disable emscripten events registration
in the WebAssemblyViewport (because legacy client code
deals with them directly)
- Added emscripten_clear_timeout in ~WebGLViewportsRegistry
- Removed GenericToolbox::HoldingRef whose responsibility is
better served with proper callback un-registration.
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Mon, 30 Mar 2020 14:23:46 +0200 |
parents | adf234ecaa00 |
children | 30deba7bc8e2 |
line wrap: on
line diff
--- a/Framework/Scene2DViewport/ViewportController.h Mon Mar 30 08:47:30 2020 +0200 +++ b/Framework/Scene2DViewport/ViewportController.h Mon Mar 30 14:23:46 2020 +0200 @@ -41,7 +41,7 @@ { } - virtual IFlexiblePointerTracker* CreateTracker(IViewport& viewport, + virtual IFlexiblePointerTracker* CreateTracker(boost::shared_ptr<IViewport> viewport, const PointerEvent& event, unsigned int viewportWidth, unsigned int viewportHeight) = 0; @@ -52,7 +52,7 @@ class DefaultViewportInteractor : public IViewportInteractor { public: - virtual IFlexiblePointerTracker* CreateTracker(IViewport& viewport, + virtual IFlexiblePointerTracker* CreateTracker(boost::shared_ptr<IViewport> viewport, const PointerEvent& event, unsigned int viewportWidth, unsigned int viewportHeight) ORTHANC_OVERRIDE; @@ -109,13 +109,10 @@ { public: ORTHANC_STONE_DEFINE_ORIGIN_MESSAGE(__FILE__, __LINE__, \ - SceneTransformChanged, ViewportController); - - ViewportController(IViewport& viewport); + SceneTransformChanged, \ + ViewportController); - ViewportController(IViewport& viewport, const Scene2D& scene /* will be cloned */); - - ViewportController(IViewport& viewport, boost::weak_ptr<UndoStack> undoStackW); + ViewportController(boost::shared_ptr<IViewport> viewport); ~ViewportController(); @@ -124,7 +121,8 @@ (in scene coords). A tracker can then be requested from the chosen measure tool, if needed */ - std::vector<boost::shared_ptr<MeasureTool> > HitTestMeasureTools(ScenePoint2D p); + std::vector<boost::shared_ptr<MeasureTool> > HitTestMeasureTools( + ScenePoint2D p); /** This function will traverse the measuring tools and will clear their @@ -223,6 +221,34 @@ return *scene_; } + /** + This method is used in a move pattern: when the ownership of the scene + managed by this viewport controller must be transferred to another + controller. + */ + Scene2D* ReleaseScene() + { + return scene_.release(); + } + + /** + This method is used when one wishes to replace the scene that is currently + managed by the controller. The previous scene is deleted and the controller + now has ownership of the new one. + */ + void AcquireScene(Scene2D* scene) + { + scene_.reset(scene); + } + + /** + Sets the undo stack that is used by PushCommand, Undo... + */ + void SetUndoStack(boost::weak_ptr<UndoStack> undoStackW) + { + undoStackW_ = undoStackW; + } + bool HasActiveTracker() const { return activeTracker_.get() != NULL; @@ -231,7 +257,7 @@ private: double GetCanvasToSceneFactor() const; - IViewport& viewport_; + boost::shared_ptr<IViewport> viewport_; boost::weak_ptr<UndoStack> undoStackW_; // Global stack, possibly shared by all viewports std::vector<boost::shared_ptr<MeasureTool> > measureTools_; boost::shared_ptr<IFlexiblePointerTracker> activeTracker_; // TODO - Couldn't this be a "std::unique_ptr"?