comparison Framework/Widgets/WorldSceneWidget.cpp @ 331:7ccf919faff0 am-2

simplify WorldSceneWidget
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 17 Oct 2018 15:18:48 +0200
parents 7a364e44fbb4
children 50e5ec1bdd46
comparison
equal deleted inserted replaced
330:7a364e44fbb4 331:7ccf919faff0
174 ViewportGeometry view = GetView(); 174 ViewportGeometry view = GetView();
175 view.ApplyTransform(context); 175 view.ApplyTransform(context);
176 176
177 double sceneX, sceneY; 177 double sceneX, sceneY;
178 MapMouseToScene(sceneX, sceneY, view, x, y); 178 MapMouseToScene(sceneX, sceneY, view, x, y);
179 RenderSceneMouseOver(context, view, sceneX, sceneY); 179
180 if (interactor_)
181 {
182 interactor_->MouseOver(context, *this, view, sceneX, sceneY, GetStatusBar());
183 }
180 } 184 }
181 185
182 186
183 void WorldSceneWidget::SetSceneExtent(ViewportGeometry& view) 187 void WorldSceneWidget::SetSceneExtent(ViewportGeometry& view)
184 { 188 {
230 { 234 {
231 double sceneX, sceneY; 235 double sceneX, sceneY;
232 MapMouseToScene(sceneX, sceneY, view_, x, y); 236 MapMouseToScene(sceneX, sceneY, view_, x, y);
233 237
234 // asks the Widget Interactor to provide a mouse tracker 238 // asks the Widget Interactor to provide a mouse tracker
235 std::auto_ptr<IWorldSceneMouseTracker> tracker 239 std::auto_ptr<IWorldSceneMouseTracker> tracker;
236 (CreateMouseSceneTracker(view_, button, sceneX, sceneY, modifiers)); 240
237 241 if (interactor_)
242 {
243 tracker.reset(interactor_->CreateMouseTracker(*this, view_, button, modifiers, sceneX, sceneY, GetStatusBar()));
244 }
245
238 if (tracker.get() != NULL) 246 if (tracker.get() != NULL)
239 { 247 {
240 return new SceneMouseTracker(view_, tracker.release()); 248 return new SceneMouseTracker(view_, tracker.release());
241 } 249 }
250
242 //TODO: allow Interactor to create Pan & Zoom 251 //TODO: allow Interactor to create Pan & Zoom
243 switch (button) 252 switch (button)
244 { 253 {
245 case MouseButton_Middle: 254 case MouseButton_Middle:
246 return new PanMouseTracker(*this, x, y); 255 return new PanMouseTracker(*this, x, y);
247 256
248 case MouseButton_Right: 257 case MouseButton_Right:
249 return new ZoomMouseTracker(*this, x, y); 258 return new ZoomMouseTracker(*this, x, y);
250 259
251 default: 260 default:
252 return NULL;
253 }
254 }
255
256
257 void WorldSceneWidget::RenderSceneMouseOver(CairoContext& context,
258 const ViewportGeometry& view,
259 double x,
260 double y)
261 {
262 if (interactor_)
263 {
264 interactor_->MouseOver(context, *this, view, x, y, GetStatusBar());
265 }
266 }
267
268 IWorldSceneMouseTracker* WorldSceneWidget::CreateMouseSceneTracker(const ViewportGeometry& view,
269 MouseButton button,
270 double x,
271 double y,
272 KeyboardModifiers modifiers)
273 {
274 if (interactor_)
275 {
276 return interactor_->CreateMouseTracker(*this, view, button, modifiers, x, y, GetStatusBar());
277 }
278 else
279 {
280 return NULL; 261 return NULL;
281 } 262 }
282 } 263 }
283 264
284 265