comparison Framework/Scene2D/Scene2D.cpp @ 654:462a5074f914

Turned the scene into an observable to be able to dynamically react to scene to canvas transform changes --> now the handles and angle measure adornments are immune to zoom changes
author Benjamin Golinvaux <bgo@osimis.io>
date Tue, 14 May 2019 13:51:00 +0200
parents b4fe9642e83b
children 059e1fd05fd6
comparison
equal deleted inserted replaced
653:4eccf698e52f 654:462a5074f914
73 return identifier_; 73 return identifier_;
74 } 74 }
75 }; 75 };
76 76
77 77
78 Scene2D::Scene2D(const Scene2D& other) : 78 Scene2D::Scene2D(const Scene2D& other)
79 sceneToCanvas_(other.sceneToCanvas_), 79 : IObservable(other.GetBroker())
80 canvasToScene_(other.canvasToScene_), 80 , sceneToCanvas_(other.sceneToCanvas_)
81 layerCounter_(0) 81 , canvasToScene_(other.canvasToScene_)
82 , layerCounter_(0)
82 { 83 {
83 for (Content::const_iterator it = other.content_.begin(); 84 for (Content::const_iterator it = other.content_.begin();
84 it != other.content_.end(); ++it) 85 it != other.content_.end(); ++it)
85 { 86 {
86 content_[it->first] = new Item(it->second->GetLayer().Clone(), layerCounter_++); 87 content_[it->first] = new Item(it->second->GetLayer().Clone(), layerCounter_++);
218 // Make sure the transform is invertible before making any change 219 // Make sure the transform is invertible before making any change
219 AffineTransform2D inverse = AffineTransform2D::Invert(transform); 220 AffineTransform2D inverse = AffineTransform2D::Invert(transform);
220 221
221 sceneToCanvas_ = transform; 222 sceneToCanvas_ = transform;
222 canvasToScene_ = inverse; 223 canvasToScene_ = inverse;
223 } 224 BroadcastMessage(SceneTransformChanged(*this));
224 225 }
225 226
226 void Scene2D::FitContent(unsigned int canvasWidth, 227 void Scene2D::FitContent(unsigned int canvasWidth,
227 unsigned int canvasHeight) 228 unsigned int canvasHeight)
228 { 229 {
229 Extent2D extent; 230 Extent2D extent;