Mercurial > hg > orthanc-stone
comparison Framework/Scene2D/ZoomSceneTracker.cpp @ 958:769249e1f3b4
added guards to prevent calling methods on a dead controller (see comment in diff for expl.) + build fix
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Fri, 23 Aug 2019 10:16:32 +0200 |
parents | e42b491f1fb2 |
children | 2d8ab34c8c91 |
comparison
equal
deleted
inserted
replaced
957:966c96b694f6 | 958:769249e1f3b4 |
---|---|
74 z = MIN_ZOOM + (MAX_ZOOM - MIN_ZOOM) * (dy + 1.0) / 2.0; | 74 z = MIN_ZOOM + (MAX_ZOOM - MIN_ZOOM) * (dy + 1.0) / 2.0; |
75 } | 75 } |
76 | 76 |
77 double zoom = pow(2.0, z); | 77 double zoom = pow(2.0, z); |
78 | 78 |
79 GetController()->SetSceneToCanvasTransform( | 79 // The controller is a weak pointer. It could be deleted when the |
80 AffineTransform2D::Combine( | 80 // tracker is still alive (for instance, because of a lost WebGL |
81 AffineTransform2D::CreateScaling(zoom, zoom), | 81 // context) |
82 originalSceneToCanvas_)); | 82 if(GetController().get() != NULL) |
83 { | |
84 GetController()->SetSceneToCanvasTransform( | |
85 AffineTransform2D::Combine( | |
86 AffineTransform2D::CreateScaling(zoom, zoom), | |
87 originalSceneToCanvas_)); | |
83 | 88 |
84 aligner_.Apply(); | 89 aligner_.Apply(); |
90 } | |
85 } | 91 } |
86 } | 92 } |
87 | 93 |
88 void ZoomSceneTracker::Cancel() | 94 void ZoomSceneTracker::Cancel() |
89 { | 95 { |
90 GetController()->SetSceneToCanvasTransform(originalSceneToCanvas_); | 96 if(GetController().get() != NULL) |
97 { | |
98 GetController()->SetSceneToCanvasTransform(originalSceneToCanvas_); | |
99 } | |
91 } | 100 } |
92 } | 101 } |