MCPcopy Create free account
hub / github.com/MeshInspector/MeshLib / preMouseMove_

Method preMouseMove_

source/MRViewer/MRMouseController.cpp:266–350  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

264}
265
266bool MouseController::preMouseMove_( int x, int y )
267{
268 auto& viewer = getViewerInstance();
269
270 // Click and dragging behavior
271 if ( clickButton_ != MouseButton::NoButton )
272 {
273 if ( std::abs( x - downMousePos_.x ) + std::abs( y - downMousePos_.y ) > cMouseClickDist ||
274 ( std::chrono::system_clock::now() - clickTime_ ).count() > cMouseClickNs )
275 {
276 // Moved the mouse far/long enough - replay mouse down in original position
277 MouseButton btn = clickButton_;
278 clickButton_ = MouseButton::NoButton;
279 // Note: currentMousePos_ is used as a position in pick functions
280 currentMousePos_ = downMousePos_;
281 if ( clickPendingDown_ == btn )
282 mouseDown_( btn, clickModifiers_ ); // Also handles dragging
283 // Continue mouse move handle as if it was a single event from downMousePos_
284 }
285 }
286
287 prevMousePos_ = currentMousePos_;
288 currentMousePos_ = { x,y };
289
290 if ( dragActive_ )
291 return viewer.drag( x, y );
292 if ( clickButton_ != MouseButton::NoButton )
293 return false;
294
295 // Own handle (camera control)
296
297 if ( currentMode_ == MouseMode::None )
298 return false;
299
300 auto& viewport = viewer.viewport();
301 AffineXf3f xf;
302 switch ( currentMode_ )
303 {
304 case MR::MouseMode::Rotation:
305 {
306 auto quat = viewport.getParameters().cameraTrackballAngle;
307 float maxDimension = float( std::max( viewer.framebufferSize.x, viewer.framebufferSize.y ) );
308 auto angle = PI_F * ( Vector2f( currentMousePos_ ) - Vector2f( prevMousePos_ ) ) / maxDimension * 4.0f;
309 quat = (
310 quat.inverse() *
311 Quaternionf( Vector3f{ 0,1,0 }, angle.x ) *
312 Quaternionf( Vector3f{ 1,0,0 }, angle.y ) *
313 quat
314 ).normalized();
315 xf = AffineXf3f::linear( Matrix3f( quat ) );
316 break;
317 }
318 case MR::MouseMode::Roll:
319 {
320 auto quat = viewport.getParameters().cameraTrackballAngle;
321 auto angle = PI_F * ( currentMousePos_.x - prevMousePos_.x ) / viewer.framebufferSize.x * 4.0f;
322 quat = (
323 quat.inverse() *

Callers

nothing calls this directly

Calls 9

absFunction · 0.85
maxFunction · 0.85
countMethod · 0.80
dragMethod · 0.80
screenToViewportMethod · 0.80
transformViewMethod · 0.80
normalizedMethod · 0.45
inverseMethod · 0.45

Tested by

no test coverage detected