Commit 88ee2884 authored by tomasz.wlostowski@cern.ch's avatar tomasz.wlostowski@cern.ch
Browse files

VIEW_CONTROLS: added ForceCursorPosition() and ShowCursor() methods

parent dea79320
Loading
Loading
Loading
Loading
+23 −20
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@
#include <view/view.h>
#include <view/wx_view_controls.h>
#include <gal/graphics_abstraction_layer.h>
#include <tool/tool_dispatcher.h>

using namespace KiGfx;

@@ -59,13 +58,19 @@ WX_VIEW_CONTROLS::WX_VIEW_CONTROLS( VIEW* aView, wxWindow* aParentPanel ) :
                                WX_VIEW_CONTROLS::onTimer ), NULL, this );
}

void VIEW_CONTROLS::ShowCursor ( bool aEnabled )
{
    m_view->GetGAL()->SetCursorEnabled( aEnabled );
}

void WX_VIEW_CONTROLS::onMotion( wxMouseEvent& aEvent )
{
    m_mousePosition.x = aEvent.GetX();
    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 );
    else
        m_cursorPosition = m_mousePosition;
@@ -197,10 +202,8 @@ void WX_VIEW_CONTROLS::onTimer( wxTimerEvent& aEvent )

            dir = m_view->ToWorld( dir, false );
            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;

+16 −7
Original line number Diff line number Diff line
@@ -127,17 +127,21 @@ public:
        return m_cursorPosition;
    }


    /** 
     * Function SetCursorPosition()
     * Allows to move the cursor to a different location.
     *
     * @param aPosition is the new location expressed in screen coordinates.
     * Function ForceCursorPosition()
     * Places the cursor immediately at a given point. Mouse movement is ignored.
     * @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:
    /// Pointer to controlled VIEW.
    VIEW*       m_view;
@@ -148,6 +152,9 @@ protected:
    /// Current cursor position
    VECTOR2D    m_cursorPosition;

    /// Forced cursor position
    VECTOR2D    m_forcedPosition;

    /// Should the cursor snap to grid or move freely
    bool        m_snappingEnabled;

@@ -157,6 +164,8 @@ protected:
    /// Flag for turning on autopanning
    bool        m_autoPanEnabled;

    bool        m_forceCursorPosition;

    /// Distance from cursor to VIEW edge when panning is active
    float       m_autoPanMargin;