GAL: update cursor position on panning and scrolling

Fixes: lp:1749082
* https://bugs.launchpad.net/kicad/+bug/1749082
This commit is contained in:
Maciej Suminski 2018-02-13 09:45:03 +01:00
parent c9d9cec6ad
commit 365ab99a6a
3 changed files with 27 additions and 8 deletions

View File

@ -153,6 +153,7 @@ void WX_VIEW_CONTROLS::onWheel( wxMouseEvent& aEvent )
VECTOR2D delta( scrollX, scrollY );
m_view->SetCenter( m_view->GetCenter() + delta );
refreshMouse();
}
else
{
@ -413,13 +414,13 @@ void WX_VIEW_CONTROLS::SetGrabMouse( bool aEnabled )
VECTOR2D WX_VIEW_CONTROLS::GetMousePosition( bool aWorldCoordinates ) const
{
wxPoint msp = wxGetMousePosition();
m_parentPanel->ScreenToClient( &msp.x, &msp.y );
wxPoint msp = getMouseScreenPosition();
VECTOR2D screenPos( msp.x, msp.y );
return aWorldCoordinates ? m_view->ToWorld( screenPos ) : screenPos;
}
VECTOR2D WX_VIEW_CONTROLS::GetRawCursorPosition( bool aEnableSnapping ) const
{
if( aEnableSnapping )
@ -432,6 +433,7 @@ VECTOR2D WX_VIEW_CONTROLS::GetRawCursorPosition( bool aEnableSnapping ) const
}
}
VECTOR2D WX_VIEW_CONTROLS::GetCursorPosition( bool aEnableSnapping ) const
{
if( m_settings.m_forceCursorPosition )
@ -471,7 +473,7 @@ void WX_VIEW_CONTROLS::SetCrossHairCursorPosition( const VECTOR2D& aPosition, bo
void WX_VIEW_CONTROLS::WarpCursor( const VECTOR2D& aPosition, bool aWorldCoordinates,
bool aWarpView ) const
bool aWarpView )
{
if( aWorldCoordinates )
{
@ -575,10 +577,13 @@ bool WX_VIEW_CONTROLS::handleAutoPanning( const wxMouseEvent& aEvent )
}
void WX_VIEW_CONTROLS::refreshMouse() const
void WX_VIEW_CONTROLS::refreshMouse()
{
// Notify tools that the cursor position has changed in the world coordinates
wxMouseEvent moveEvent( EVT_REFRESH_MOUSE );
wxPoint msp = getMouseScreenPosition();
moveEvent.SetX( msp.x );
moveEvent.SetY( msp.y );
// Set the modifiers state
#if wxCHECK_VERSION( 3, 0, 0 )
@ -593,6 +598,15 @@ void WX_VIEW_CONTROLS::refreshMouse() const
#endif
wxPostEvent( m_parentPanel, moveEvent );
onMotion( moveEvent );
}
wxPoint WX_VIEW_CONTROLS::getMouseScreenPosition() const
{
wxPoint msp = wxGetMousePosition();
m_parentPanel->ScreenToClient( &msp.x, &msp.y );
return msp;
}

View File

@ -299,7 +299,7 @@ public:
* specified in the world coordinates and its not visible in the current viewport).
*/
virtual void WarpCursor( const VECTOR2D& aPosition, bool aWorldCoordinates = false,
bool aWarpView = false ) const = 0;
bool aWarpView = false ) = 0;
/**
* Function EnableCursorWarping()

View File

@ -88,7 +88,7 @@ public:
/// @copydoc VIEW_CONTROLS::CursorWarp()
void WarpCursor( const VECTOR2D& aPosition, bool aWorldCoordinates = false,
bool aWarpView = false ) const override;
bool aWarpView = false ) override;
/// @copydoc VIEW_CONTROLS::CenterOnCursor()
void CenterOnCursor() const override;
@ -124,7 +124,12 @@ private:
* that the cursor position in the world coordinates has changed, whereas the screen coordinates
* remained the same (e.g. frame edge autopanning).
*/
void refreshMouse() const;
void refreshMouse();
/**
* Gets the cursor position in the screen coordinates.
*/
wxPoint getMouseScreenPosition() const;
/// Current state of VIEW_CONTROLS
STATE m_state;