VIEW_CONTROLS: added ForceCursorPosition() and ShowCursor() methods

parent dea79320
...@@ -28,7 +28,6 @@ ...@@ -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 ) : ...@@ -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 ) ...@@ -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 );
if( dir.EuclideanNorm() > borderSize )
dir = dir.Resize( borderSize );
dir = m_view->ToWorld( dir, false ); VECTOR2D dir( m_panDirection );
m_view->SetCenter( m_view->GetCenter() + dir * m_autoPanSpeed );
// Notify tools that the cursor position has changed in the world coordinates if( dir.EuclideanNorm() > borderSize )
wxCommandEvent moveEvent( TOOL_DISPATCHER::EVT_REFRESH_MOUSE ); dir = dir.Resize( borderSize );
wxPostEvent( m_parentPanel, moveEvent );
}
break;
case IDLE: // Just remove unnecessary warnings dir = m_view->ToWorld( dir, false );
case DRAG_PANNING: m_view->SetCenter( m_view->GetCenter() + dir * m_autoPanSpeed );
m_parentPanel->Refresh();
}
break; break;
case IDLE: // Just remove unnecessary warnings
case DRAG_PANNING:
break;
} }
} }
......
...@@ -127,17 +127,21 @@ public: ...@@ -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: ...@@ -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: ...@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment