Mercurial > hg > orthanc-stone
diff OrthancStone/Sources/Scene2D/GrayscaleWindowingSceneTracker.cpp @ 1606:874e178f34e9
- ViewportController now has weak ptr to Viewport
- Measuring tools + related commands and all trackers now store only a weak_ptr to the Viewport and lock() on demand for usage
- LayerHolder and FixedPoint aligner store only a weak_ptr to the Viewport, too
- Fixed float/double warning in GrayscaleWindowingSceneTracker
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Wed, 28 Oct 2020 20:14:34 +0100 |
parents | 8563ea5d8ae4 |
children | 5cdc5b98f14d |
line wrap: on
line diff
--- a/OrthancStone/Sources/Scene2D/GrayscaleWindowingSceneTracker.cpp Wed Oct 28 20:06:55 2020 +0100 +++ b/OrthancStone/Sources/Scene2D/GrayscaleWindowingSceneTracker.cpp Wed Oct 28 20:14:34 2020 +0100 @@ -38,10 +38,11 @@ FloatTextureSceneLayer* layer_; public: - GrayscaleLayerAccessor(boost::shared_ptr<IViewport> viewport, + GrayscaleLayerAccessor(boost::weak_ptr<IViewport> viewportWeak, int layerIndex) : layer_(NULL) { + boost::shared_ptr<IViewport> viewport = viewportWeak.lock(); if (viewport != NULL) { lock_.reset(viewport->Lock()); @@ -89,7 +90,8 @@ { if (active_) { - GrayscaleLayerAccessor accessor(viewport_, layerIndex_); + boost::shared_ptr<IViewport> viewport = viewport_.lock(); + GrayscaleLayerAccessor accessor(viewport, layerIndex_); if (accessor.IsValid()) { @@ -100,7 +102,7 @@ } - GrayscaleWindowingSceneTracker::GrayscaleWindowingSceneTracker(boost::shared_ptr<IViewport> viewport, + GrayscaleWindowingSceneTracker::GrayscaleWindowingSceneTracker(boost::weak_ptr<IViewport> viewport, int layerIndex, const PointerEvent& event, unsigned int canvasWidth, @@ -115,7 +117,8 @@ if (canvasWidth > 3 && canvasHeight > 3) { - GrayscaleLayerAccessor accessor(viewport_, layerIndex_); + boost::weak_ptr<IViewport> viewport = viewport_.lock(); + GrayscaleLayerAccessor accessor(viewport, layerIndex_); if (accessor.IsValid()) { @@ -143,8 +146,8 @@ const double x = event.GetMainPosition().GetX(); const double y = event.GetMainPosition().GetY(); - float center = originalCenter_ + (x - clickX_) * normalization_; - float width = originalWidth_ + (y - clickY_) * normalization_; + float center = originalCenter_ + static_cast<float>((x - clickX_) * normalization_); + float width = originalWidth_ + static_cast<float>((y - clickY_) * normalization_); if (width <= 1) {