VIEW_CONTROLS: added ForceCursorPosition() and ShowCursor() methods
This commit is contained in:
parent
dea793209d
commit
88ee288465
|
@ -28,7 +28,6 @@
|
||||||
#include <view/view.h>
|
#include <view/view.h>
|
||||||
#include <view/wx_view_controls.h>
|
#include <view/wx_view_controls.h>
|
||||||
#include <gal/graphics_abstraction_layer.h>
|
#include <gal/graphics_abstraction_layer.h>
|
||||||
#include <tool/tool_dispatcher.h>
|
|
||||||
|
|
||||||
using namespace KiGfx;
|
using namespace KiGfx;
|
||||||
|
|
||||||
|
@ -59,13 +58,19 @@ WX_VIEW_CONTROLS::WX_VIEW_CONTROLS( VIEW* aView, wxWindow* aParentPanel ) :
|
||||||
WX_VIEW_CONTROLS::onTimer ), NULL, this );
|
WX_VIEW_CONTROLS::onTimer ), NULL, this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VIEW_CONTROLS::ShowCursor ( bool aEnabled )
|
||||||
|
{
|
||||||
|
m_view->GetGAL()->SetCursorEnabled( aEnabled );
|
||||||
|
}
|
||||||
|
|
||||||
void WX_VIEW_CONTROLS::onMotion( wxMouseEvent& aEvent )
|
void WX_VIEW_CONTROLS::onMotion( wxMouseEvent& aEvent )
|
||||||
{
|
{
|
||||||
m_mousePosition.x = aEvent.GetX();
|
m_mousePosition.x = aEvent.GetX();
|
||||||
m_mousePosition.y = aEvent.GetY();
|
m_mousePosition.y = aEvent.GetY();
|
||||||
|
|
||||||
if( m_snappingEnabled )
|
if( m_forceCursorPosition )
|
||||||
|
m_cursorPosition = m_view->ToScreen (m_forcedPosition);
|
||||||
|
else if( m_snappingEnabled )
|
||||||
m_cursorPosition = m_view->GetGAL()->GetGridPoint( m_mousePosition );
|
m_cursorPosition = m_view->GetGAL()->GetGridPoint( m_mousePosition );
|
||||||
else
|
else
|
||||||
m_cursorPosition = m_mousePosition;
|
m_cursorPosition = m_mousePosition;
|
||||||
|
@ -185,28 +190,26 @@ void WX_VIEW_CONTROLS::onTimer( wxTimerEvent& aEvent )
|
||||||
{
|
{
|
||||||
switch( m_state )
|
switch( m_state )
|
||||||
{
|
{
|
||||||
case AUTO_PANNING:
|
case AUTO_PANNING:
|
||||||
{
|
{
|
||||||
double borderSize = std::min( m_autoPanMargin * m_view->GetScreenPixelSize().x,
|
double borderSize = std::min( m_autoPanMargin * m_view->GetScreenPixelSize().x,
|
||||||
m_autoPanMargin * m_view->GetScreenPixelSize().y );
|
m_autoPanMargin * m_view->GetScreenPixelSize().y );
|
||||||
|
|
||||||
VECTOR2D dir( m_panDirection );
|
VECTOR2D dir( m_panDirection );
|
||||||
|
|
||||||
if( dir.EuclideanNorm() > borderSize )
|
if( dir.EuclideanNorm() > borderSize )
|
||||||
dir = dir.Resize( borderSize );
|
dir = dir.Resize( borderSize );
|
||||||
|
|
||||||
dir = m_view->ToWorld( dir, false );
|
dir = m_view->ToWorld( dir, false );
|
||||||
m_view->SetCenter( m_view->GetCenter() + dir * m_autoPanSpeed );
|
m_view->SetCenter( m_view->GetCenter() + dir * m_autoPanSpeed );
|
||||||
|
m_parentPanel->Refresh();
|
||||||
// Notify tools that the cursor position has changed in the world coordinates
|
|
||||||
wxCommandEvent moveEvent( TOOL_DISPATCHER::EVT_REFRESH_MOUSE );
|
}
|
||||||
wxPostEvent( m_parentPanel, moveEvent );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IDLE: // Just remove unnecessary warnings
|
|
||||||
case DRAG_PANNING:
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case IDLE: // Just remove unnecessary warnings
|
||||||
|
case DRAG_PANNING:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -127,17 +127,21 @@ public:
|
||||||
return m_cursorPosition;
|
return m_cursorPosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Function SetCursorPosition()
|
/**
|
||||||
* Allows to move the cursor to a different location.
|
* Function ForceCursorPosition()
|
||||||
*
|
* Places the cursor immediately at a given point. Mouse movement is ignored.
|
||||||
* @param aPosition is the new location expressed in screen coordinates.
|
* @param aEnabled enable forced cursor position
|
||||||
|
* @param aPosition the position
|
||||||
*/
|
*/
|
||||||
virtual void SetCursorPosition( const VECTOR2D& aPosition )
|
virtual void ForceCursorPosition( bool aEnabled, const VECTOR2D& aPosition = VECTOR2D(0, 0) )
|
||||||
{
|
{
|
||||||
m_cursorPosition = aPosition;
|
m_forcedPosition = aPosition;
|
||||||
|
m_forceCursorPosition = aEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void ShowCursor ( bool aEnabled );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// Pointer to controlled VIEW.
|
/// Pointer to controlled VIEW.
|
||||||
VIEW* m_view;
|
VIEW* m_view;
|
||||||
|
@ -148,6 +152,9 @@ protected:
|
||||||
/// Current cursor position
|
/// Current cursor position
|
||||||
VECTOR2D m_cursorPosition;
|
VECTOR2D m_cursorPosition;
|
||||||
|
|
||||||
|
/// Forced cursor position
|
||||||
|
VECTOR2D m_forcedPosition;
|
||||||
|
|
||||||
/// Should the cursor snap to grid or move freely
|
/// Should the cursor snap to grid or move freely
|
||||||
bool m_snappingEnabled;
|
bool m_snappingEnabled;
|
||||||
|
|
||||||
|
@ -157,6 +164,8 @@ protected:
|
||||||
/// Flag for turning on autopanning
|
/// Flag for turning on autopanning
|
||||||
bool m_autoPanEnabled;
|
bool m_autoPanEnabled;
|
||||||
|
|
||||||
|
bool m_forceCursorPosition;
|
||||||
|
|
||||||
/// Distance from cursor to VIEW edge when panning is active
|
/// Distance from cursor to VIEW edge when panning is active
|
||||||
float m_autoPanMargin;
|
float m_autoPanMargin;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue