Mercurial > hg > orthanc-stone
diff Framework/Scene2D/ZoomSceneTracker.cpp @ 1305:a5326ce4f24b broker
Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Wed, 04 Mar 2020 09:45:38 +0100 |
parents | 2d8ab34c8c91 |
children | ab81ee8fce1f |
line wrap: on
line diff
--- a/Framework/Scene2D/ZoomSceneTracker.cpp Wed Mar 04 09:44:34 2020 +0100 +++ b/Framework/Scene2D/ZoomSceneTracker.cpp Wed Mar 04 09:45:38 2020 +0100 @@ -22,19 +22,19 @@ #include "ZoomSceneTracker.h" #include "../Scene2DViewport/ViewportController.h" -using boost::weak_ptr; -using boost::shared_ptr; - namespace OrthancStone { - ZoomSceneTracker::ZoomSceneTracker(weak_ptr<ViewportController> controllerW, + ZoomSceneTracker::ZoomSceneTracker(IViewport& viewport, const PointerEvent& event, unsigned int canvasHeight) - : OneGesturePointerTracker(controllerW) + : OneGesturePointerTracker(viewport) , clickY_(event.GetMainPosition().GetY()) - , aligner_(controllerW, event.GetMainPosition()) - , originalSceneToCanvas_(GetController()->GetSceneToCanvasTransform()) + , aligner_(viewport, event.GetMainPosition()) { + + std::unique_ptr<IViewport::ILock> lock(viewport_.Lock()); + originalSceneToCanvas_ = lock->GetController().GetSceneToCanvasTransform(); + if (canvasHeight <= 3) { active_ = false; @@ -76,26 +76,20 @@ double zoom = pow(2.0, z); - // The controller is a weak pointer. It could be deleted when the - // tracker is still alive (for instance, because of a lost WebGL - // context) - if(GetController().get() != NULL) - { - GetController()->SetSceneToCanvasTransform( - AffineTransform2D::Combine( - AffineTransform2D::CreateScaling(zoom, zoom), - originalSceneToCanvas_)); - - aligner_.Apply(); - } + std::unique_ptr<IViewport::ILock> lock(viewport_.Lock()); + lock->GetController().SetSceneToCanvasTransform( + AffineTransform2D::Combine( + AffineTransform2D::CreateScaling(zoom, zoom), + originalSceneToCanvas_)); + aligner_.Apply(); + lock->Invalidate(); } } void ZoomSceneTracker::Cancel() { - if(GetController().get() != NULL) - { - GetController()->SetSceneToCanvasTransform(originalSceneToCanvas_); - } + std::unique_ptr<IViewport::ILock> lock(viewport_.Lock()); + lock->GetController().SetSceneToCanvasTransform(originalSceneToCanvas_); + lock->Invalidate(); } }