KiCad PCB EDA Suite
KIGFX::WX_VIEW_CONTROLS Class Reference

Class WX_VIEW_CONTROLS is a specific implementation of class VIEW_CONTROLS for wxWidgets library. More...

#include <wx_view_controls.h>

Inheritance diagram for KIGFX::WX_VIEW_CONTROLS:
KIGFX::VIEW_CONTROLS

Public Member Functions

 WX_VIEW_CONTROLS (VIEW *aView, wxScrolledCanvas *aParentPanel)
 
virtual ~WX_VIEW_CONTROLS ()
 
void onWheel (wxMouseEvent &aEvent)
 Handler functions. More...
 
void onMotion (wxMouseEvent &aEvent)
 
void onButton (wxMouseEvent &aEvent)
 
void onEnter (wxMouseEvent &WXUNUSED(aEvent))
 
void onLeave (wxMouseEvent &WXUNUSED(aEvent))
 
void onTimer (wxTimerEvent &WXUNUSED(aEvent))
 
void onScroll (wxScrollWinEvent &aEvent)
 
void SetGrabMouse (bool aEnabled) override
 Function SetGrabMouse() Enables/disables mouse cursor grabbing (limits the movement field only to the panel area). More...
 
VECTOR2D GetMousePosition (bool aWorldCoordinates=true) const override
 Function GetMousePosition() Returns the current mouse pointer position. More...
 
VECTOR2D GetCursorPosition (bool aSnappingEnabled) const override
 Returns the current cursor position in world coordinates. More...
 
VECTOR2D GetRawCursorPosition (bool aSnappingEnabled=true) const override
 Returns the current cursor position in world coordinates - ingoring the cursorUp position force mode. More...
 
void SetCursorPosition (const VECTOR2D &aPosition, bool warpView, bool aTriggeredByArrows) override
 Moves cursor to the requested position expressed in world coordinates. More...
 
void SetCrossHairCursorPosition (const VECTOR2D &aPosition, bool aWarpView) override
 Moves the graphic crosshair cursor to the requested position expressed in world coordinates. More...
 
void WarpCursor (const VECTOR2D &aPosition, bool aWorldCoordinates=false, bool aWarpView=false) override
 
void CenterOnCursor () const override
 Function CenterOnCursor() Sets the viewport center to the current cursor position and warps the cursor to the screen center. More...
 
void UpdateScrollbars ()
 Adjusts the scrollbars position to match the current viewport. More...
 
void ForceCursorPosition (bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0)) override
 Function ForceCursorPosition() Places the cursor immediately at a given point. More...
 
VECTOR2D GetCursorPosition () const
 Returns the current cursor position in world coordinates. More...
 
virtual VECTOR2D GetCursorPosition (bool aEnableSnapping) const=0
 Returns the current cursor position in world coordinates. More...
 
virtual void SetSnapping (bool aEnabled)
 Function SetSnapping() Enables/disables snapping cursor to grid. More...
 
virtual bool GetSnappingState ()
 
virtual void SetAutoPan (bool aEnabled)
 Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg. More...
 
virtual void EnableAutoPan (bool aEnabled)
 Function EnableAutoPan Turns on/off auto panning (user setting to disable it entirely). More...
 
virtual void SetAutoPanSpeed (float aSpeed)
 Function SetAutoPanSpeed() Sets speed of autopanning. More...
 
virtual void SetAutoPanMargin (float aMargin)
 Function SetAutoPanMArgin() Sets margin for autopanning (ie. More...
 
VECTOR2D GetCursorPosition () const
 Returns the current cursor position in world coordinates. More...
 
bool ForcedCursorPosition () const
 Function ForcedCursorPosition() Returns true if the current cursor position is forced to a specific location, ignoring the mouse cursor position. More...
 
virtual void ShowCursor (bool aEnabled)
 Function ShowCursor() Enables or disables display of cursor. More...
 
bool IsCursorShown () const
 Function IsCursorShown() Returns true when cursor is visible. More...
 
virtual void CaptureCursor (bool aEnabled)
 Function CaptureCursor() Forces the cursor to stay within the drawing panel area. More...
 
bool IsCursorPositionForced () const
 Function IsCursorPositionForced() Returns true if the cursor position is set by one of the tools. More...
 
void EnableCursorWarping (bool aEnable)
 Function EnableCursorWarping() Enables or disables warping the cursor. More...
 
bool IsCursorWarpingEnabled () const
 Function IsCursorWarpingEnabled() More...
 
virtual void EnableMousewheelPan (bool aEnable)
 Function EnableMousewheelPan() Enables or disables mousewheel panning. More...
 
virtual bool IsMousewheelPanEnabled () const
 Function IsMousewheelPanEnabled() More...
 
void SetAdditionalPanButtons (bool aLeft=false, bool aRight=false)
 
virtual void Reset ()
 Function Reset() Restores the default VIEW_CONTROLS settings. More...
 
const VC_SETTINGSGetSettings () const
 

Returns the current VIEW_CONTROLS settings

More...
 
void ApplySettings (const VC_SETTINGS &aSettings)
 

Applies VIEW_CONTROLS settings from an object

More...
 

Static Public Attributes

static const wxEventType EVT_REFRESH_MOUSE = wxNewEventType()
 Event that forces mouse move event in the dispatcher (eg. More...
 

Protected Attributes

VIEWm_view
 

Pointer to controlled VIEW.

More...
 
bool m_cursorWarped
 

Application warped the cursor, not the user (keyboard)

More...
 
VC_SETTINGS m_settings
 

Current VIEW_CONTROLS settings

More...
 

Private Types

enum  STATE { IDLE = 1, DRAG_PANNING, AUTO_PANNING }
 Possible states for WX_VIEW_CONTROLS. More...
 

Private Member Functions

bool handleAutoPanning (const wxMouseEvent &aEvent)
 Function handleAutoPanning() Computes new viewport settings while in autopanning mode. More...
 
void refreshMouse ()
 Sends an event to refresh mouse position. More...
 
wxPoint getMouseScreenPosition () const
 Gets the cursor position in the screen coordinates. More...
 

Private Attributes

STATE m_state
 Current state of VIEW_CONTROLS. More...
 
wxScrolledCanvas * m_parentPanel
 Panel that is affected by VIEW_CONTROLS. More...
 
VECTOR2D m_dragStartPoint
 Stores information about point where dragging has started. More...
 
VECTOR2D m_lookStartPoint
 Stores information about the center of viewport when dragging has started. More...
 
VECTOR2D m_panDirection
 Current direction of panning (only autopanning mode) More...
 
wxTimer m_panTimer
 Timer repsonsible for handling autopanning. More...
 
VECTOR2D m_scrollScale
 Ratio used for scaling world coordinates to scrollbar position. More...
 
VECTOR2I m_scrollPos
 Current scrollbar position. More...
 
VECTOR2D m_cursorPos
 Current cursor position (world coordinates) More...
 
bool m_updateCursor
 Flag deciding whether the cursor position should be calculated using the mouse position. More...
 
std::unique_ptr< ZOOM_CONTROLLERm_zoomController
 a ZOOM_CONTROLLER that determines zoom steps. This is platform-specific. More...
 

Detailed Description

Class WX_VIEW_CONTROLS is a specific implementation of class VIEW_CONTROLS for wxWidgets library.

Definition at line 51 of file wx_view_controls.h.

Member Enumeration Documentation

◆ STATE

Possible states for WX_VIEW_CONTROLS.

Enumerator
IDLE 
DRAG_PANNING 

Nothing is happening.

AUTO_PANNING 

Panning with mouse button pressed.

Definition at line 111 of file wx_view_controls.h.

112  {
113  IDLE = 1,
114  DRAG_PANNING,
115  AUTO_PANNING,
116  };
Panning with mouse button pressed.

Constructor & Destructor Documentation

◆ WX_VIEW_CONTROLS()

WX_VIEW_CONTROLS::WX_VIEW_CONTROLS ( VIEW aView,
wxScrolledCanvas *  aParentPanel 
)

Definition at line 57 of file wx_view_controls.cpp.

57  :
58  VIEW_CONTROLS( aView ),
59  m_state( IDLE ),
60  m_parentPanel( aParentPanel ),
61  m_scrollScale( 1.0, 1.0 ),
62 #ifdef __WXGTK3__
63  m_lastTimestamp( 0 ),
64 #endif
65  m_cursorPos( 0, 0 ),
66  m_updateCursor( true )
67 {
68  bool enableMousewheelPan = false;
69  bool enableZoomNoCenter = false;
70  bool enableAutoPan = true;
71 
72  Pgm().CommonSettings()->Read( ENBL_MOUSEWHEEL_PAN_KEY, &enableMousewheelPan, false );
73  Pgm().CommonSettings()->Read( ENBL_ZOOM_NO_CENTER_KEY, &enableZoomNoCenter, false );
74  Pgm().CommonSettings()->Read( ENBL_AUTO_PAN_KEY, &enableAutoPan, true );
75 
76  m_settings.m_enableMousewheelPan = enableMousewheelPan;
77  m_settings.m_warpCursor = !enableZoomNoCenter;
78  m_settings.m_autoPanSettingEnabled = enableAutoPan;
79 
80  m_parentPanel->Connect( wxEVT_MOTION,
81  wxMouseEventHandler( WX_VIEW_CONTROLS::onMotion ), NULL, this );
82 #if wxCHECK_VERSION( 3, 1, 0 ) || defined( USE_OSX_MAGNIFY_EVENT )
83  m_parentPanel->Connect( wxEVT_MAGNIFY,
84  wxMouseEventHandler( WX_VIEW_CONTROLS::onMagnify ), NULL, this );
85 #endif
86  m_parentPanel->Connect( wxEVT_MOUSEWHEEL,
87  wxMouseEventHandler( WX_VIEW_CONTROLS::onWheel ), NULL, this );
88  m_parentPanel->Connect( wxEVT_MIDDLE_UP,
89  wxMouseEventHandler( WX_VIEW_CONTROLS::onButton ), NULL, this );
90  m_parentPanel->Connect( wxEVT_MIDDLE_DOWN,
91  wxMouseEventHandler( WX_VIEW_CONTROLS::onButton ), NULL, this );
92  m_parentPanel->Connect( wxEVT_LEFT_UP,
93  wxMouseEventHandler( WX_VIEW_CONTROLS::onButton ), NULL, this );
94  m_parentPanel->Connect( wxEVT_LEFT_DOWN,
95  wxMouseEventHandler( WX_VIEW_CONTROLS::onButton ), NULL, this );
96  m_parentPanel->Connect( wxEVT_RIGHT_UP,
97  wxMouseEventHandler( WX_VIEW_CONTROLS::onButton ), NULL, this );
98  m_parentPanel->Connect( wxEVT_RIGHT_DOWN,
99  wxMouseEventHandler( WX_VIEW_CONTROLS::onButton ), NULL, this );
100 #if defined _WIN32 || defined _WIN64
101  m_parentPanel->Connect( wxEVT_ENTER_WINDOW,
102  wxMouseEventHandler( WX_VIEW_CONTROLS::onEnter ), NULL, this );
103 #endif
104  m_parentPanel->Connect( wxEVT_LEAVE_WINDOW,
105  wxMouseEventHandler( WX_VIEW_CONTROLS::onLeave ), NULL, this );
106  m_parentPanel->Connect( wxEVT_SCROLLWIN_THUMBTRACK,
107  wxScrollWinEventHandler( WX_VIEW_CONTROLS::onScroll ), NULL, this );
108  m_parentPanel->Connect( wxEVT_SCROLLWIN_PAGEUP,
109  wxScrollWinEventHandler( WX_VIEW_CONTROLS::onScroll ), NULL, this );
110  m_parentPanel->Connect( wxEVT_SCROLLWIN_PAGEDOWN,
111  wxScrollWinEventHandler( WX_VIEW_CONTROLS::onScroll ), NULL, this );
112 
113  m_parentPanel->Connect( wxEVT_SCROLLWIN_BOTTOM,
114  wxScrollWinEventHandler( WX_VIEW_CONTROLS::onScroll ), NULL, this );
115  m_parentPanel->Connect( wxEVT_SCROLLWIN_TOP,
116  wxScrollWinEventHandler( WX_VIEW_CONTROLS::onScroll ), NULL, this );
117  m_parentPanel->Connect( wxEVT_SCROLLWIN_LINEUP,
118  wxScrollWinEventHandler( WX_VIEW_CONTROLS::onScroll ), NULL, this );
119  m_parentPanel->Connect( wxEVT_SCROLLWIN_LINEDOWN,
120  wxScrollWinEventHandler( WX_VIEW_CONTROLS::onScroll ), NULL, this );
121 
123 
124  m_cursorWarped = false;
125 
126  m_panTimer.SetOwner( this );
127  this->Connect( wxEVT_TIMER, wxTimerEventHandler( WX_VIEW_CONTROLS::onTimer ), NULL, this );
128 
130 }
bool m_enableMousewheelPan
Mousewheel (2-finger touchpad) panning
Definition: view_controls.h:88
static std::unique_ptr< ZOOM_CONTROLLER > GetZoomControllerForPlatform()
VIEW_CONTROLS(VIEW *aView)
std::unique_ptr< ZOOM_CONTROLLER > m_zoomController
a ZOOM_CONTROLLER that determines zoom steps. This is platform-specific.
void onButton(wxMouseEvent &aEvent)
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: kicad.cpp:65
VECTOR2D m_scrollScale
Ratio used for scaling world coordinates to scrollbar position.
#define ENBL_ZOOM_NO_CENTER_KEY
Definition: pgm_base.h:50
#define ENBL_AUTO_PAN_KEY
Definition: pgm_base.h:53
bool m_autoPanSettingEnabled
Flag for turning on autopanning
Definition: view_controls.h:76
void onWheel(wxMouseEvent &aEvent)
Handler functions.
#define ENBL_MOUSEWHEEL_PAN_KEY
Definition: pgm_base.h:51
bool m_warpCursor
If the cursor is allowed to be warped
Definition: view_controls.h:85
bool m_cursorWarped
Application warped the cursor, not the user (keyboard)
VTBL_ENTRY wxConfigBase * CommonSettings() const
Definition: pgm_base.h:201
void onMotion(wxMouseEvent &aEvent)
wxScrolledCanvas * m_parentPanel
Panel that is affected by VIEW_CONTROLS.
void onTimer(wxTimerEvent &WXUNUSED(aEvent))
bool m_updateCursor
Flag deciding whether the cursor position should be calculated using the mouse position.
bool m_lastKeyboardCursorPositionValid
Is last cursor motion event coming from keyboard arrow cursor motion action
Definition: view_controls.h:97
void onEnter(wxMouseEvent &WXUNUSED(aEvent))
STATE m_state
Current state of VIEW_CONTROLS.
void onScroll(wxScrollWinEvent &aEvent)
void onLeave(wxMouseEvent &WXUNUSED(aEvent))
VECTOR2D m_cursorPos
Current cursor position (world coordinates)
wxTimer m_panTimer
Timer repsonsible for handling autopanning.

References PGM_BASE::CommonSettings(), ENBL_AUTO_PAN_KEY, ENBL_MOUSEWHEEL_PAN_KEY, ENBL_ZOOM_NO_CENTER_KEY, GetZoomControllerForPlatform(), KIGFX::VC_SETTINGS::m_autoPanSettingEnabled, KIGFX::VIEW_CONTROLS::m_cursorWarped, KIGFX::VC_SETTINGS::m_enableMousewheelPan, KIGFX::VC_SETTINGS::m_lastKeyboardCursorPositionValid, m_panTimer, m_parentPanel, KIGFX::VIEW_CONTROLS::m_settings, KIGFX::VC_SETTINGS::m_warpCursor, m_zoomController, onButton(), onEnter(), onLeave(), onMotion(), onScroll(), onTimer(), onWheel(), and Pgm().

◆ ~WX_VIEW_CONTROLS()

WX_VIEW_CONTROLS::~WX_VIEW_CONTROLS ( )
virtual

Definition at line 133 of file wx_view_controls.cpp.

134 {
135  wxConfigBase* cfg = Pgm().CommonSettings();
136 
137  if( cfg )
138  {
142  }
143 }
bool m_enableMousewheelPan
Mousewheel (2-finger touchpad) panning
Definition: view_controls.h:88
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: kicad.cpp:65
#define ENBL_ZOOM_NO_CENTER_KEY
Definition: pgm_base.h:50
#define ENBL_AUTO_PAN_KEY
Definition: pgm_base.h:53
bool m_autoPanSettingEnabled
Flag for turning on autopanning
Definition: view_controls.h:76
#define ENBL_MOUSEWHEEL_PAN_KEY
Definition: pgm_base.h:51
bool m_warpCursor
If the cursor is allowed to be warped
Definition: view_controls.h:85
VTBL_ENTRY wxConfigBase * CommonSettings() const
Definition: pgm_base.h:201

References PGM_BASE::CommonSettings(), ENBL_AUTO_PAN_KEY, ENBL_MOUSEWHEEL_PAN_KEY, ENBL_ZOOM_NO_CENTER_KEY, KIGFX::VC_SETTINGS::m_autoPanSettingEnabled, KIGFX::VC_SETTINGS::m_enableMousewheelPan, KIGFX::VIEW_CONTROLS::m_settings, KIGFX::VC_SETTINGS::m_warpCursor, and Pgm().

Member Function Documentation

◆ ApplySettings()

void VIEW_CONTROLS::ApplySettings ( const VC_SETTINGS aSettings)
inherited

Applies VIEW_CONTROLS settings from an object

Definition at line 76 of file view_controls.cpp.

77 {
78  ShowCursor( aSettings.m_showCursor );
79  CaptureCursor( aSettings.m_cursorCaptured );
80  SetSnapping( aSettings.m_snappingEnabled );
81  SetGrabMouse( aSettings.m_grabMouse );
82  SetAutoPan( aSettings.m_autoPanEnabled );
83  SetAutoPanMargin( aSettings.m_autoPanMargin );
84  SetAutoPanSpeed( aSettings.m_autoPanSpeed );
86 }
virtual void ShowCursor(bool aEnabled)
Function ShowCursor() Enables or disables display of cursor.
virtual void SetAutoPanSpeed(float aSpeed)
Function SetAutoPanSpeed() Sets speed of autopanning.
float m_autoPanSpeed
How fast is panning when in auto mode
Definition: view_controls.h:82
bool m_snappingEnabled
Should the cursor snap to grid or move freely
Definition: view_controls.h:67
bool m_grabMouse
Flag for grabbing the mouse cursor
Definition: view_controls.h:70
VECTOR2D m_forcedPosition
Forced cursor position (world coordinates)
Definition: view_controls.h:58
virtual void SetSnapping(bool aEnabled)
Function SetSnapping() Enables/disables snapping cursor to grid.
virtual void SetAutoPanMargin(float aMargin)
Function SetAutoPanMArgin() Sets margin for autopanning (ie.
bool m_forceCursorPosition
Is the forced cursor position enabled
Definition: view_controls.h:61
virtual void CaptureCursor(bool aEnabled)
Function CaptureCursor() Forces the cursor to stay within the drawing panel area.
virtual void ForceCursorPosition(bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0))
Function ForceCursorPosition() Places the cursor immediately at a given point.
float m_autoPanMargin
Distance from cursor to VIEW edge when panning is active
Definition: view_controls.h:79
bool m_autoPanEnabled
Flag for turning on autopanning
Definition: view_controls.h:73
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg.
bool m_showCursor
Flag determining the cursor visibility
Definition: view_controls.h:55
virtual void SetGrabMouse(bool aEnabled)
Function SetGrabMouse Turns on/off mouse grabbing.
bool m_cursorCaptured
Should the cursor be locked within the parent window area
Definition: view_controls.h:64

References KIGFX::VIEW_CONTROLS::CaptureCursor(), KIGFX::VIEW_CONTROLS::ForceCursorPosition(), KIGFX::VC_SETTINGS::m_autoPanEnabled, KIGFX::VC_SETTINGS::m_autoPanMargin, KIGFX::VC_SETTINGS::m_autoPanSpeed, KIGFX::VC_SETTINGS::m_cursorCaptured, KIGFX::VC_SETTINGS::m_forceCursorPosition, KIGFX::VC_SETTINGS::m_forcedPosition, KIGFX::VC_SETTINGS::m_grabMouse, KIGFX::VC_SETTINGS::m_showCursor, KIGFX::VC_SETTINGS::m_snappingEnabled, KIGFX::VIEW_CONTROLS::SetAutoPan(), KIGFX::VIEW_CONTROLS::SetAutoPanMargin(), KIGFX::VIEW_CONTROLS::SetAutoPanSpeed(), KIGFX::VIEW_CONTROLS::SetGrabMouse(), KIGFX::VIEW_CONTROLS::SetSnapping(), and KIGFX::VIEW_CONTROLS::ShowCursor().

Referenced by TOOL_MANAGER::applyViewControls(), and KIGFX::VIEW_CONTROLS::Reset().

◆ CaptureCursor()

virtual void KIGFX::VIEW_CONTROLS::CaptureCursor ( bool  aEnabled)
inlinevirtualinherited

◆ CenterOnCursor()

void WX_VIEW_CONTROLS::CenterOnCursor ( ) const
overridevirtual

Function CenterOnCursor() Sets the viewport center to the current cursor position and warps the cursor to the screen center.

Implements KIGFX::VIEW_CONTROLS.

Definition at line 559 of file wx_view_controls.cpp.

560 {
561  const VECTOR2I& screenSize = m_view->GetGAL()->GetScreenPixelSize();
562  VECTOR2I screenCenter( screenSize / 2 );
563 
564  if( GetMousePosition( false ) != screenCenter )
565  {
567  m_parentPanel->WarpPointer( KiROUND( screenSize.x / 2 ), KiROUND( screenSize.y / 2 ) );
568  }
569 }
static int KiROUND(double v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: common.h:118
VECTOR2D GetMousePosition(bool aWorldCoordinates=true) const override
Function GetMousePosition() Returns the current mouse pointer position.
GAL * GetGAL() const
Function GetGAL() Returns the GAL this view is using to draw graphical primitives.
Definition: view.h:180
VIEW * m_view
Pointer to controlled VIEW.
const VECTOR2I & GetScreenPixelSize() const
Returns GAL canvas size in pixels.
void SetCenter(const VECTOR2D &aCenter)
Function SetCenter() Sets the center point of the VIEW (i.e.
Definition: view.cpp:601
wxScrolledCanvas * m_parentPanel
Panel that is affected by VIEW_CONTROLS.
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.

References KIGFX::VIEW_CONTROLS::GetCursorPosition(), KIGFX::VIEW::GetGAL(), GetMousePosition(), KIGFX::GAL::GetScreenPixelSize(), KiROUND(), m_parentPanel, KIGFX::VIEW_CONTROLS::m_view, KIGFX::VIEW::SetCenter(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by onWheel().

◆ EnableAutoPan()

virtual void KIGFX::VIEW_CONTROLS::EnableAutoPan ( bool  aEnabled)
inlinevirtualinherited

Function EnableAutoPan Turns on/off auto panning (user setting to disable it entirely).

Parameters
aEnabledtells if the autopanning should be enabled.

Definition at line 166 of file view_controls.h.

167  {
169  }
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
bool m_autoPanSettingEnabled
Flag for turning on autopanning
Definition: view_controls.h:76

References KIGFX::VC_SETTINGS::m_autoPanSettingEnabled, and KIGFX::VIEW_CONTROLS::m_settings.

Referenced by EDA_DRAW_FRAME::CommonSettingsChanged().

◆ EnableCursorWarping()

void KIGFX::VIEW_CONTROLS::EnableCursorWarping ( bool  aEnable)
inlineinherited

Function EnableCursorWarping() Enables or disables warping the cursor.

Parameters
aEnableis true if the cursor is allowed to be warped.

Definition at line 324 of file view_controls.h.

325  {
326  m_settings.m_warpCursor = aEnable;
327  }
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
bool m_warpCursor
If the cursor is allowed to be warped
Definition: view_controls.h:85

References KIGFX::VIEW_CONTROLS::m_settings, and KIGFX::VC_SETTINGS::m_warpCursor.

Referenced by EDA_DRAW_FRAME::CommonSettingsChanged().

◆ EnableMousewheelPan()

virtual void KIGFX::VIEW_CONTROLS::EnableMousewheelPan ( bool  aEnable)
inlinevirtualinherited

Function EnableMousewheelPan() Enables or disables mousewheel panning.

Parameters
aEnableis true if mouse-wheel panning is enabled.

Definition at line 343 of file view_controls.h.

344  {
346  }
bool m_enableMousewheelPan
Mousewheel (2-finger touchpad) panning
Definition: view_controls.h:88
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings

References KIGFX::VC_SETTINGS::m_enableMousewheelPan, and KIGFX::VIEW_CONTROLS::m_settings.

Referenced by EDA_DRAW_FRAME::CommonSettingsChanged(), and DIALOG_PAD_PROPERTIES::prepareCanvas().

◆ ForceCursorPosition()

void WX_VIEW_CONTROLS::ForceCursorPosition ( bool  aEnabled,
const VECTOR2D aPosition = VECTOR2D( 0, 0 ) 
)
overridevirtual

Function ForceCursorPosition() Places the cursor immediately at a given point.

Mouse movement is ignored.

Parameters
aEnabledenable forced cursor position
aPositionthe position (world coordinates).

Reimplemented from KIGFX::VIEW_CONTROLS.

Definition at line 717 of file wx_view_controls.cpp.

718 {
720  m_settings.m_forcedPosition = aPosition;
721 }
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
VECTOR2D m_forcedPosition
Forced cursor position (world coordinates)
Definition: view_controls.h:58
bool m_forceCursorPosition
Is the forced cursor position enabled
Definition: view_controls.h:61

References KIGFX::VC_SETTINGS::m_forceCursorPosition, KIGFX::VC_SETTINGS::m_forcedPosition, and KIGFX::VIEW_CONTROLS::m_settings.

◆ ForcedCursorPosition()

bool KIGFX::VIEW_CONTROLS::ForcedCursorPosition ( ) const
inlineinherited

Function ForcedCursorPosition() Returns true if the current cursor position is forced to a specific location, ignoring the mouse cursor position.

Definition at line 267 of file view_controls.h.

268  {
270  }
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
bool m_forceCursorPosition
Is the forced cursor position enabled
Definition: view_controls.h:61

References KIGFX::VC_SETTINGS::m_forceCursorPosition, and KIGFX::VIEW_CONTROLS::m_settings.

◆ GetCursorPosition() [1/4]

VECTOR2D KIGFX::VIEW_CONTROLS::GetCursorPosition
inline

Returns the current cursor position in world coordinates.

Note, that it may be different from the mouse pointer position if snapping is enabled or cursor position is forced to a specific point.

Returns
The current cursor position in world coordinates.

Definition at line 209 of file view_controls.h.

210  {
212  }
bool m_snappingEnabled
Should the cursor snap to grid or move freely
Definition: view_controls.h:67
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.

◆ GetCursorPosition() [2/4]

virtual VECTOR2D KIGFX::VIEW_CONTROLS::GetCursorPosition

Returns the current cursor position in world coordinates.

Note, that it may be different from the mouse pointer position if snapping is enabled or cursor position is forced to a specific point.

Parameters
aEnableSnappingselects whether cursor position should be snapped to the grid.
Returns
The current cursor position in world coordinates.

◆ GetCursorPosition() [3/4]

VECTOR2D WX_VIEW_CONTROLS::GetCursorPosition ( bool  aSnappingEnabled) const
overridevirtual

Returns the current cursor position in world coordinates.

Note, that it may be different from the mouse pointer position if snapping is enabled or cursor position is forced to a specific point.

Returns
The current cursor position in world coordinates.

Implements KIGFX::VIEW_CONTROLS.

Definition at line 478 of file wx_view_controls.cpp.

479 {
481  {
483  }
484  else
485  {
486  return GetRawCursorPosition( aEnableSnapping );
487  }
488 }
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
VECTOR2D m_forcedPosition
Forced cursor position (world coordinates)
Definition: view_controls.h:58
VECTOR2D GetRawCursorPosition(bool aSnappingEnabled=true) const override
Returns the current cursor position in world coordinates - ingoring the cursorUp position force mode.
bool m_forceCursorPosition
Is the forced cursor position enabled
Definition: view_controls.h:61

References GetRawCursorPosition(), KIGFX::VC_SETTINGS::m_forceCursorPosition, KIGFX::VC_SETTINGS::m_forcedPosition, and KIGFX::VIEW_CONTROLS::m_settings.

Referenced by EDA_DRAW_PANEL_GAL::onPaint().

◆ GetCursorPosition() [4/4]

VECTOR2D KIGFX::VIEW_CONTROLS::GetCursorPosition ( ) const
inlineinherited

Returns the current cursor position in world coordinates.

Note, that it may be different from the mouse pointer position if snapping is enabled or cursor position is forced to a specific point.

Returns
The current cursor position in world coordinates.

Definition at line 209 of file view_controls.h.

210  {
212  }
bool m_snappingEnabled
Should the cursor snap to grid or move freely
Definition: view_controls.h:67
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.

References KIGFX::VIEW_CONTROLS::m_settings, and KIGFX::VC_SETTINGS::m_snappingEnabled.

Referenced by EE_POINT_EDITOR::addCorner(), POINT_EDITOR::addCorner(), EE_POINT_EDITOR::addCornerCondition(), FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), SCH_EDIT_TOOL::BreakWire(), CenterOnCursor(), SCH_EDIT_FRAME::CreateNewText(), TOOL_MANAGER::DispatchContextMenu(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), PCB_TOOL_BASE::doInteractiveItemPlacement(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), DRAWING_TOOL::DrawCircle(), DRAWING_TOOL::DrawLine(), MICROWAVE_TOOL::drawMicrowaveInductor(), SCH_LINE_WIRE_BUS_TOOL::DrawSegments(), LIB_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), PAD_TOOL::EnumeratePads(), SELECTION_TOOL::findMove(), COMMON_TOOLS::GridPreset(), SCH_EDITOR_CONTROL::HighlightNet(), ROUTER_TOOL::InlineDrag(), PL_EDIT_TOOL::Main(), SCH_MOVE_TOOL::Main(), EE_POINT_EDITOR::Main(), PL_POINT_EDITOR::Main(), LIB_MOVE_TOOL::Main(), PICKER_TOOL::Main(), EDIT_TOOL::Main(), ROUTER_TOOL::MainLoop(), LIB_DRAWING_TOOLS::PlaceAnchor(), SCH_DRAWING_TOOLS::PlaceComponent(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), SCH_EDIT_TOOL::RepeatDrawItem(), PL_SELECTION_TOOL::RequestSelection(), EE_SELECTION_TOOL::RequestSelection(), COMMON_TOOLS::ResetLocalCoords(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), EE_SELECTION_TOOL::SelectNode(), DRAWING_TOOL::SetAnchor(), SCH_DRAWING_TOOLS::SingleClickPlace(), LIB_DRAWING_TOOLS::TwoClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), LIB_MOVE_TOOL::updateModificationPoint(), PL_EDIT_TOOL::updateModificationPoint(), EDIT_TOOL::updateModificationPoint(), PNS::TOOL_BASE::updateStartItem(), PL_EDITOR_FRAME::UpdateStatusBar(), SCH_BASE_FRAME::UpdateStatusBar(), PCB_BASE_FRAME::UpdateStatusBar(), and GERBVIEW_FRAME::UpdateStatusBar().

◆ GetMousePosition()

VECTOR2D WX_VIEW_CONTROLS::GetMousePosition ( bool  aWorldCoordinates = true) const
overridevirtual

Function GetMousePosition() Returns the current mouse pointer position.

Note, that it may be different from the cursor position if snapping is enabled (

See also
GetCursorPosition()).
Parameters
aWorldCoordinatesif true, the result is given in world coordinates, otherwise it is given in screen coordinates.
Returns
The current mouse pointer position in either world or screen coordinates.

Implements KIGFX::VIEW_CONTROLS.

Definition at line 456 of file wx_view_controls.cpp.

457 {
458  wxPoint msp = getMouseScreenPosition();
459  VECTOR2D screenPos( msp.x, msp.y );
460 
461  return aWorldCoordinates ? m_view->ToWorld( screenPos ) : screenPos;
462 }
VECTOR2D ToWorld(const VECTOR2D &aCoord, bool aAbsolute=true) const
Function ToWorld() Converts a screen space point/vector to a point/vector in world space coordinates.
Definition: view.cpp:475
wxPoint getMouseScreenPosition() const
Gets the cursor position in the screen coordinates.
VIEW * m_view
Pointer to controlled VIEW.

References getMouseScreenPosition(), KIGFX::VIEW_CONTROLS::m_view, and KIGFX::VIEW::ToWorld().

Referenced by CenterOnCursor().

◆ getMouseScreenPosition()

wxPoint WX_VIEW_CONTROLS::getMouseScreenPosition ( ) const
private

Gets the cursor position in the screen coordinates.

Definition at line 672 of file wx_view_controls.cpp.

673 {
674  wxPoint msp = wxGetMousePosition();
675  m_parentPanel->ScreenToClient( &msp.x, &msp.y );
676  return msp;
677 }
wxScrolledCanvas * m_parentPanel
Panel that is affected by VIEW_CONTROLS.

References m_parentPanel.

Referenced by GetMousePosition(), and refreshMouse().

◆ GetRawCursorPosition()

VECTOR2D WX_VIEW_CONTROLS::GetRawCursorPosition ( bool  aSnappingEnabled = true) const
overridevirtual

Returns the current cursor position in world coordinates - ingoring the cursorUp position force mode.

Returns
The current cursor position in world coordinates.

Implements KIGFX::VIEW_CONTROLS.

Definition at line 465 of file wx_view_controls.cpp.

466 {
467  if( aEnableSnapping )
468  {
469  return m_view->GetGAL()->GetGridPoint( m_cursorPos );
470  }
471  else
472  {
473  return m_cursorPos;
474  }
475 }
GAL * GetGAL() const
Function GetGAL() Returns the GAL this view is using to draw graphical primitives.
Definition: view.h:180
VIEW * m_view
Pointer to controlled VIEW.
VECTOR2D GetGridPoint(const VECTOR2D &aPoint) const
Function GetGridPoint() For a given point it returns the nearest point belonging to the grid in world...
VECTOR2D m_cursorPos
Current cursor position (world coordinates)

References KIGFX::VIEW::GetGAL(), KIGFX::GAL::GetGridPoint(), m_cursorPos, and KIGFX::VIEW_CONTROLS::m_view.

Referenced by GetCursorPosition().

◆ GetSettings()

const VC_SETTINGS& KIGFX::VIEW_CONTROLS::GetSettings ( ) const
inlineinherited

Returns the current VIEW_CONTROLS settings

Definition at line 377 of file view_controls.h.

378  {
379  return m_settings;
380  }
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings

References KIGFX::VIEW_CONTROLS::m_settings.

Referenced by TOOL_MANAGER::GetCurrentToolVC(), and TOOL_MANAGER::saveViewControls().

◆ GetSnappingState()

virtual bool KIGFX::VIEW_CONTROLS::GetSnappingState ( )
inlinevirtualinherited
Returns
the current state of the snapping cursor to grid.

Definition at line 135 of file view_controls.h.

136  {
138  }
bool m_snappingEnabled
Should the cursor snap to grid or move freely
Definition: view_controls.h:67
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings

References KIGFX::VIEW_CONTROLS::m_settings, and KIGFX::VC_SETTINGS::m_snappingEnabled.

◆ handleAutoPanning()

bool WX_VIEW_CONTROLS::handleAutoPanning ( const wxMouseEvent &  aEvent)
private

Function handleAutoPanning() Computes new viewport settings while in autopanning mode.

Parameters
aEventis an event to be processed and decide if autopanning should happen.
Returns
true if it is currently autopanning (ie. autopanning is active and mouse cursor is in the area that causes autopanning to happen).

Definition at line 572 of file wx_view_controls.cpp.

573 {
574  VECTOR2I p( aEvent.GetX(), aEvent.GetY() );
576 
578  {
579  // last cursor move event came from keyboard cursor control. If auto-panning is enabled and
580  // the next position is inside the autopan zone, check if it really came from a mouse event, otherwise
581  // disable autopan temporarily. Also temporaly disable autopan if the cursor is in the autopan zone
582  // because the application warped the cursor.
583 
584  m_cursorWarped = false;
585  return true;
586  }
587 
588  m_cursorWarped = false;
589 
590  // Compute areas where autopanning is active
593  int borderEndX = m_view->GetScreenPixelSize().x - borderStart;
594  int borderEndY = m_view->GetScreenPixelSize().y - borderStart;
595 
596  if( p.x < borderStart )
597  m_panDirection.x = -( borderStart - p.x );
598  else if( p.x > borderEndX )
599  m_panDirection.x = ( p.x - borderEndX );
600  else
601  m_panDirection.x = 0;
602 
603  if( p.y < borderStart )
604  m_panDirection.y = -( borderStart - p.y );
605  else if( p.y > borderEndY )
606  m_panDirection.y = ( p.y - borderEndY );
607  else
608  m_panDirection.y = 0;
609 
610  bool borderHit = ( m_panDirection.x != 0 || m_panDirection.y != 0 );
611 
612  switch( m_state )
613  {
614  case AUTO_PANNING:
615  if( !borderHit )
616  {
617  m_panTimer.Stop();
618  m_state = IDLE;
619 
620  return false;
621  }
622 
623  return true;
624  break;
625 
626  case IDLE:
627  if( borderHit )
628  {
630  m_panTimer.Start( (int) ( 250.0 / 60.0 ) );
631 
632  return true;
633  }
634 
635  return false;
636  break;
637 
638  case DRAG_PANNING:
639  return false;
640  }
641 
642  wxASSERT_MSG( false, wxT( "This line should never be reached" ) );
643  return false; // Should not be reached, just avoid the compiler warnings..
644 }
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
VIEW * m_view
Pointer to controlled VIEW.
VECTOR2D m_lastKeyboardCursorPosition
Position of the above event
Panning with mouse button pressed.
const VECTOR2I & GetScreenPixelSize() const
Function GetScreenPixelSize() Returns the size of the our rendering area, in pixels.
Definition: view.cpp:1176
float m_autoPanMargin
Distance from cursor to VIEW edge when panning is active
Definition: view_controls.h:79
bool m_cursorWarped
Application warped the cursor, not the user (keyboard)
VECTOR2D ToScreen(const VECTOR2D &aCoord, bool aAbsolute=true) const
Function ToScreen() Converts a world space point/vector to a point/vector in screen space coordinates...
Definition: view.cpp:494
VECTOR2D m_panDirection
Current direction of panning (only autopanning mode)
bool m_lastKeyboardCursorPositionValid
Is last cursor motion event coming from keyboard arrow cursor motion action
Definition: view_controls.h:97
STATE m_state
Current state of VIEW_CONTROLS.
#define min(a, b)
Definition: auxiliary.h:85
wxTimer m_panTimer
Timer repsonsible for handling autopanning.

References AUTO_PANNING, DRAG_PANNING, KIGFX::VIEW::GetScreenPixelSize(), IDLE, KIGFX::VC_SETTINGS::m_autoPanMargin, KIGFX::VIEW_CONTROLS::m_cursorWarped, KIGFX::VC_SETTINGS::m_lastKeyboardCursorPosition, KIGFX::VC_SETTINGS::m_lastKeyboardCursorPositionValid, m_panDirection, m_panTimer, KIGFX::VIEW_CONTROLS::m_settings, m_state, KIGFX::VIEW_CONTROLS::m_view, min, KIGFX::VIEW::ToScreen(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by onMotion().

◆ IsCursorPositionForced()

bool KIGFX::VIEW_CONTROLS::IsCursorPositionForced ( ) const
inlineinherited

Function IsCursorPositionForced() Returns true if the cursor position is set by one of the tools.

Forced cursor position means it does not react to mouse movement.

Definition at line 301 of file view_controls.h.

302  {
304  }
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
bool m_forceCursorPosition
Is the forced cursor position enabled
Definition: view_controls.h:61

References KIGFX::VC_SETTINGS::m_forceCursorPosition, and KIGFX::VIEW_CONTROLS::m_settings.

◆ IsCursorShown()

bool VIEW_CONTROLS::IsCursorShown ( ) const
inherited

Function IsCursorShown() Returns true when cursor is visible.

Returns
True if cursor is visible.

Definition at line 40 of file view_controls.cpp.

41 {
42  // this only says if the VIEW_CONTROLS say the cursor should be
43  // shown: m_view->GetGAL()->IsCursorEnabled() will say if the GAL is
44  // actually going to do show the cursor or not
45  return m_settings.m_showCursor;
46 }
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
bool m_showCursor
Flag determining the cursor visibility
Definition: view_controls.h:55

References KIGFX::VIEW_CONTROLS::m_settings, and KIGFX::VC_SETTINGS::m_showCursor.

◆ IsCursorWarpingEnabled()

bool KIGFX::VIEW_CONTROLS::IsCursorWarpingEnabled ( ) const
inlineinherited

Function IsCursorWarpingEnabled()

Returns
the current setting for cursor warping.

Definition at line 333 of file view_controls.h.

334  {
335  return m_settings.m_warpCursor;
336  }
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
bool m_warpCursor
If the cursor is allowed to be warped
Definition: view_controls.h:85

References KIGFX::VIEW_CONTROLS::m_settings, and KIGFX::VC_SETTINGS::m_warpCursor.

Referenced by onWheel().

◆ IsMousewheelPanEnabled()

virtual bool KIGFX::VIEW_CONTROLS::IsMousewheelPanEnabled ( ) const
inlinevirtualinherited

Function IsMousewheelPanEnabled()

Returns
the current setting for mousewheel panning

Definition at line 352 of file view_controls.h.

353  {
355  }
bool m_enableMousewheelPan
Mousewheel (2-finger touchpad) panning
Definition: view_controls.h:88
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings

References KIGFX::VC_SETTINGS::m_enableMousewheelPan, and KIGFX::VIEW_CONTROLS::m_settings.

Referenced by DIALOG_PAD_PROPERTIES::prepareCanvas().

◆ onButton()

void WX_VIEW_CONTROLS::onButton ( wxMouseEvent &  aEvent)

Definition at line 270 of file wx_view_controls.cpp.

271 {
272  switch( m_state )
273  {
274  case IDLE:
275  case AUTO_PANNING:
276  if( aEvent.MiddleDown() ||
277  ( aEvent.LeftDown() && m_settings.m_panWithLeftButton ) ||
278  ( aEvent.RightDown() && m_settings.m_panWithRightButton ) )
279  {
280  m_dragStartPoint = VECTOR2D( aEvent.GetX(), aEvent.GetY() );
283  }
284 
285  if( aEvent.LeftUp() )
286  m_state = IDLE; // Stop autopanning when user release left mouse button
287 
288  break;
289 
290  case DRAG_PANNING:
291  if( aEvent.MiddleUp() || aEvent.LeftUp() || aEvent.RightUp() )
292  m_state = IDLE;
293 
294  break;
295  }
296 
297  aEvent.Skip();
298 }
VECTOR2D m_lookStartPoint
Stores information about the center of viewport when dragging has started.
const VECTOR2D & GetCenter() const
Function GetCenter() Returns the center point of this VIEW (in world space coordinates)
Definition: view.h:339
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
bool m_panWithRightButton
Allow panning with the right button in addition to middle
Definition: view_controls.h:91
VIEW * m_view
Pointer to controlled VIEW.
Panning with mouse button pressed.
VECTOR2< double > VECTOR2D
Definition: vector2d.h:586
VECTOR2D m_dragStartPoint
Stores information about point where dragging has started.
STATE m_state
Current state of VIEW_CONTROLS.
bool m_panWithLeftButton
Allow panning with the left button in addition to middle
Definition: view_controls.h:94

References AUTO_PANNING, DRAG_PANNING, KIGFX::VIEW::GetCenter(), IDLE, m_dragStartPoint, m_lookStartPoint, KIGFX::VC_SETTINGS::m_panWithLeftButton, KIGFX::VC_SETTINGS::m_panWithRightButton, KIGFX::VIEW_CONTROLS::m_settings, m_state, and KIGFX::VIEW_CONTROLS::m_view.

Referenced by WX_VIEW_CONTROLS().

◆ onEnter()

void WX_VIEW_CONTROLS::onEnter ( wxMouseEvent &  WXUNUSEDaEvent)

Definition at line 301 of file wx_view_controls.cpp.

302 {
303  m_parentPanel->SetFocus();
304 }
wxScrolledCanvas * m_parentPanel
Panel that is affected by VIEW_CONTROLS.

References m_parentPanel.

Referenced by WX_VIEW_CONTROLS().

◆ onLeave()

void WX_VIEW_CONTROLS::onLeave ( wxMouseEvent &  WXUNUSEDaEvent)

Definition at line 307 of file wx_view_controls.cpp.

308 {
310  {
311  bool warp = false;
312  int x = aEvent.GetX();
313  int y = aEvent.GetY();
314  wxSize parentSize = m_parentPanel->GetClientSize();
315 
316  if( x < 0 )
317  {
318  x = 0;
319  warp = true;
320  }
321  else if( x >= parentSize.x )
322  {
323  x = parentSize.x - 1;
324  warp = true;
325  }
326 
327  if( y < 0 )
328  {
329  y = 0;
330  warp = true;
331  }
332  else if( y >= parentSize.y )
333  {
334  y = parentSize.y - 1;
335  warp = true;
336  }
337 
338  if( warp )
339  m_parentPanel->WarpPointer( x, y );
340  }
341 }
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
wxScrolledCanvas * m_parentPanel
Panel that is affected by VIEW_CONTROLS.
bool m_cursorCaptured
Should the cursor be locked within the parent window area
Definition: view_controls.h:64

References KIGFX::VC_SETTINGS::m_cursorCaptured, m_parentPanel, and KIGFX::VIEW_CONTROLS::m_settings.

Referenced by WX_VIEW_CONTROLS().

◆ onMotion()

void WX_VIEW_CONTROLS::onMotion ( wxMouseEvent &  aEvent)

Definition at line 146 of file wx_view_controls.cpp.

147 {
148  bool isAutoPanning = false;
149  VECTOR2D mousePos( aEvent.GetX(), aEvent.GetY() );
150 
152  isAutoPanning = handleAutoPanning( aEvent );
153 
154  if( !isAutoPanning && aEvent.Dragging() )
155  {
156  if( m_state == DRAG_PANNING )
157  {
158  VECTOR2D d = m_dragStartPoint - mousePos;
159  VECTOR2D delta = m_view->ToWorld( d, false );
160 
161  m_view->SetCenter( m_lookStartPoint + delta );
162  aEvent.StopPropagation();
163  }
164  }
165 
166  if( m_updateCursor ) // do not update the cursor position if it was explicitly set
167  m_cursorPos = m_view->ToWorld( mousePos );
168  else
169  m_updateCursor = true;
170 
171  aEvent.Skip();
172 }
VECTOR2D m_lookStartPoint
Stores information about the center of viewport when dragging has started.
VECTOR2D ToWorld(const VECTOR2D &aCoord, bool aAbsolute=true) const
Function ToWorld() Converts a screen space point/vector to a point/vector in world space coordinates.
Definition: view.cpp:475
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
VIEW * m_view
Pointer to controlled VIEW.
bool m_autoPanSettingEnabled
Flag for turning on autopanning
Definition: view_controls.h:76
void SetCenter(const VECTOR2D &aCenter)
Function SetCenter() Sets the center point of the VIEW (i.e.
Definition: view.cpp:601
bool m_autoPanEnabled
Flag for turning on autopanning
Definition: view_controls.h:73
bool m_updateCursor
Flag deciding whether the cursor position should be calculated using the mouse position.
bool handleAutoPanning(const wxMouseEvent &aEvent)
Function handleAutoPanning() Computes new viewport settings while in autopanning mode.
VECTOR2D m_dragStartPoint
Stores information about point where dragging has started.
STATE m_state
Current state of VIEW_CONTROLS.
VECTOR2D m_cursorPos
Current cursor position (world coordinates)

References DRAG_PANNING, handleAutoPanning(), KIGFX::VC_SETTINGS::m_autoPanEnabled, KIGFX::VC_SETTINGS::m_autoPanSettingEnabled, m_cursorPos, m_dragStartPoint, m_lookStartPoint, KIGFX::VIEW_CONTROLS::m_settings, m_state, m_updateCursor, KIGFX::VIEW_CONTROLS::m_view, KIGFX::VIEW::SetCenter(), and KIGFX::VIEW::ToWorld().

Referenced by WX_VIEW_CONTROLS().

◆ onScroll()

void WX_VIEW_CONTROLS::onScroll ( wxScrollWinEvent &  aEvent)

Definition at line 383 of file wx_view_controls.cpp.

384 {
385  const double linePanDelta = 0.05;
386  const double pagePanDelta = 0.5;
387 
388  int type = aEvent.GetEventType();
389  int dir = aEvent.GetOrientation();
390 
391  if( type == wxEVT_SCROLLWIN_THUMBTRACK )
392  {
393  auto center = m_view->GetCenter();
394  const auto& boundary = m_view->GetBoundary();
395 
396  // Flip scroll direction in flipped view
397  const double xstart = ( m_view->IsMirroredX() ?
398  boundary.GetRight() : boundary.GetLeft() );
399  const double xdelta = ( m_view->IsMirroredX() ? -1 : 1 );
400 
401  if( dir == wxHORIZONTAL )
402  center.x = xstart + xdelta * ( aEvent.GetPosition() / m_scrollScale.x );
403  else
404  center.y = boundary.GetTop() + aEvent.GetPosition() / m_scrollScale.y;
405 
406  m_view->SetCenter( center );
407  }
408  else
409  {
410  double dist = 0;
411 
412  if( type == wxEVT_SCROLLWIN_PAGEUP )
413  dist = pagePanDelta;
414  else if( type == wxEVT_SCROLLWIN_PAGEDOWN )
415  dist = -pagePanDelta;
416  else if( type == wxEVT_SCROLLWIN_LINEUP )
417  dist = linePanDelta;
418  else if( type == wxEVT_SCROLLWIN_LINEDOWN )
419  dist = -linePanDelta;
420  else
421  {
422  wxASSERT( "Unhandled event type" );
423  return;
424  }
425 
426  VECTOR2D scroll = m_view->ToWorld( m_view->GetScreenPixelSize(), false ) * dist;
427 
428  double scrollX = 0.0;
429  double scrollY = 0.0;
430 
431  if ( dir == wxHORIZONTAL )
432  scrollX = -scroll.x;
433  else
434  scrollY = -scroll.y;
435 
436  VECTOR2D delta( scrollX, scrollY );
437 
438  m_view->SetCenter( m_view->GetCenter() + delta );
439  }
440 
441  m_parentPanel->Refresh();
442 }
static const int dist[10][10]
Definition: ar_matrix.cpp:320
const BOX2D & GetBoundary() const
Function GetBoundary()
Definition: view.h:298
VECTOR2D ToWorld(const VECTOR2D &aCoord, bool aAbsolute=true) const
Function ToWorld() Converts a screen space point/vector to a point/vector in world space coordinates.
Definition: view.cpp:475
coord_type GetTop() const
Definition: box2.h:202
const VECTOR2D & GetCenter() const
Function GetCenter() Returns the center point of this VIEW (in world space coordinates)
Definition: view.h:339
VIEW * m_view
Pointer to controlled VIEW.
VECTOR2D m_scrollScale
Ratio used for scaling world coordinates to scrollbar position.
void SetCenter(const VECTOR2D &aCenter)
Function SetCenter() Sets the center point of the VIEW (i.e.
Definition: view.cpp:601
const VECTOR2I & GetScreenPixelSize() const
Function GetScreenPixelSize() Returns the size of the our rendering area, in pixels.
Definition: view.cpp:1176
bool IsMirroredX() const
Function IsMirroredX() Returns true if view is flipped across the X axis.
Definition: view.h:230
wxScrolledCanvas * m_parentPanel
Panel that is affected by VIEW_CONTROLS.

References dist, KIGFX::VIEW::GetBoundary(), KIGFX::VIEW::GetCenter(), KIGFX::VIEW::GetScreenPixelSize(), BOX2< Vec >::GetTop(), KIGFX::VIEW::IsMirroredX(), m_parentPanel, m_scrollScale, KIGFX::VIEW_CONTROLS::m_view, KIGFX::VIEW::SetCenter(), KIGFX::VIEW::ToWorld(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by WX_VIEW_CONTROLS().

◆ onTimer()

void WX_VIEW_CONTROLS::onTimer ( wxTimerEvent &  WXUNUSEDaEvent)

Definition at line 344 of file wx_view_controls.cpp.

345 {
346  switch( m_state )
347  {
348  case AUTO_PANNING:
349  {
351  {
352  m_state = IDLE;
353  return;
354  }
355 
356 #if wxCHECK_VERSION( 3, 0, 0 )
357  if( !m_parentPanel->HasFocus() )
358  break;
359 #endif
360 
361  double borderSize = std::min( m_settings.m_autoPanMargin * m_view->GetScreenPixelSize().x,
363 
364  VECTOR2D dir( m_panDirection );
365 
366  if( dir.EuclideanNorm() > borderSize )
367  dir = dir.Resize( borderSize );
368 
369  dir = m_view->ToWorld( dir, false );
371 
372  refreshMouse();
373  }
374  break;
375 
376  case IDLE: // Just remove unnecessary warnings
377  case DRAG_PANNING:
378  break;
379  }
380 }
float m_autoPanSpeed
How fast is panning when in auto mode
Definition: view_controls.h:82
VECTOR2D ToWorld(const VECTOR2D &aCoord, bool aAbsolute=true) const
Function ToWorld() Converts a screen space point/vector to a point/vector in world space coordinates.
Definition: view.cpp:475
const VECTOR2D & GetCenter() const
Function GetCenter() Returns the center point of this VIEW (in world space coordinates)
Definition: view.h:339
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
VIEW * m_view
Pointer to controlled VIEW.
void SetCenter(const VECTOR2D &aCenter)
Function SetCenter() Sets the center point of the VIEW (i.e.
Definition: view.cpp:601
Panning with mouse button pressed.
const VECTOR2I & GetScreenPixelSize() const
Function GetScreenPixelSize() Returns the size of the our rendering area, in pixels.
Definition: view.cpp:1176
float m_autoPanMargin
Distance from cursor to VIEW edge when panning is active
Definition: view_controls.h:79
void refreshMouse()
Sends an event to refresh mouse position.
bool m_autoPanEnabled
Flag for turning on autopanning
Definition: view_controls.h:73
wxScrolledCanvas * m_parentPanel
Panel that is affected by VIEW_CONTROLS.
VECTOR2D m_panDirection
Current direction of panning (only autopanning mode)
STATE m_state
Current state of VIEW_CONTROLS.
#define min(a, b)
Definition: auxiliary.h:85

References AUTO_PANNING, DRAG_PANNING, KIGFX::VIEW::GetCenter(), KIGFX::VIEW::GetScreenPixelSize(), IDLE, KIGFX::VC_SETTINGS::m_autoPanEnabled, KIGFX::VC_SETTINGS::m_autoPanMargin, KIGFX::VC_SETTINGS::m_autoPanSpeed, m_panDirection, m_parentPanel, KIGFX::VIEW_CONTROLS::m_settings, m_state, KIGFX::VIEW_CONTROLS::m_view, min, refreshMouse(), KIGFX::VIEW::SetCenter(), KIGFX::VIEW::ToWorld(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by WX_VIEW_CONTROLS().

◆ onWheel()

void WX_VIEW_CONTROLS::onWheel ( wxMouseEvent &  aEvent)

Handler functions.

Definition at line 175 of file wx_view_controls.cpp.

176 {
177 #ifdef __WXGTK3__
178  if( aEvent.GetTimestamp() == m_lastTimestamp )
179  {
180  aEvent.Skip( false );
181  return;
182  }
183 
184  m_lastTimestamp = aEvent.GetTimestamp();
185 #endif
186 
187  const double wheelPanSpeed = 0.001;
188  const int axis = aEvent.GetWheelAxis();
189 
190  // mousewheelpan disabled:
191  // wheel + ctrl -> horizontal scrolling;
192  // wheel + shift -> vertical scrolling;
193  // wheel -> zooming;
194  // mousewheelpan enabled:
195  // wheel -> pan;
196  // wheel + ctrl -> zooming;
197  // wheel + shift -> horizontal scrolling.
198 
199  if( ( !m_settings.m_enableMousewheelPan && ( aEvent.ControlDown() || aEvent.ShiftDown() ) ) ||
200  ( m_settings.m_enableMousewheelPan && !aEvent.ControlDown() ) )
201  {
202  // Scrolling
203  VECTOR2D scrollVec = m_view->ToWorld( m_view->GetScreenPixelSize(), false ) *
204  ( (double) aEvent.GetWheelRotation() * wheelPanSpeed );
205  double scrollX = 0.0;
206  double scrollY = 0.0;
207 
209  {
210  if ( axis == wxMOUSE_WHEEL_HORIZONTAL || aEvent.ShiftDown() )
211  scrollX = scrollVec.x;
212  else
213  scrollY = -scrollVec.y;
214  }
215  else
216  {
217  if( aEvent.ControlDown() )
218  scrollX = -scrollVec.x;
219  else
220  scrollY = -scrollVec.y;
221  }
222 
223  VECTOR2D delta( scrollX, scrollY );
224 
225  m_view->SetCenter( m_view->GetCenter() + delta );
226  refreshMouse();
227  }
228  else
229  {
230  // Restrict zoom handling to the vertical axis, otherwise horizontal
231  // scrolling events (e.g. touchpads and some mice) end up interpreted
232  // as vertical scroll events and confuse the user.
233  if( axis == wxMOUSE_WHEEL_VERTICAL )
234  {
235  const int rotation = aEvent.GetWheelRotation();
236  const double zoomScale = m_zoomController->GetScaleForRotation( rotation );
237 
238  if( IsCursorWarpingEnabled() )
239  {
240  CenterOnCursor();
241  m_view->SetScale( m_view->GetScale() * zoomScale );
242  }
243  else
244  {
245  const VECTOR2D anchor = m_view->ToWorld( VECTOR2D( aEvent.GetX(), aEvent.GetY() ) );
246  m_view->SetScale( m_view->GetScale() * zoomScale, anchor );
247  }
248  }
249  }
250 
251  // Do not skip this event, otherwise wxWidgets will fire
252  // 3 wxEVT_SCROLLWIN_LINEUP or wxEVT_SCROLLWIN_LINEDOWN (normal wxWidgets behavior)
253  // and we do not want that.
254  m_parentPanel->Refresh();
255 }
bool m_enableMousewheelPan
Mousewheel (2-finger touchpad) panning
Definition: view_controls.h:88
VECTOR2D ToWorld(const VECTOR2D &aCoord, bool aAbsolute=true) const
Function ToWorld() Converts a screen space point/vector to a point/vector in world space coordinates.
Definition: view.cpp:475
const VECTOR2D & GetCenter() const
Function GetCenter() Returns the center point of this VIEW (in world space coordinates)
Definition: view.h:339
std::unique_ptr< ZOOM_CONTROLLER > m_zoomController
a ZOOM_CONTROLLER that determines zoom steps. This is platform-specific.
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
VIEW * m_view
Pointer to controlled VIEW.
void SetScale(double aScale)
Function SetScale() Sets the scaling factor.
Definition: view.h:250
void SetCenter(const VECTOR2D &aCenter)
Function SetCenter() Sets the center point of the VIEW (i.e.
Definition: view.cpp:601
VECTOR2< double > VECTOR2D
Definition: vector2d.h:586
const VECTOR2I & GetScreenPixelSize() const
Function GetScreenPixelSize() Returns the size of the our rendering area, in pixels.
Definition: view.cpp:1176
bool IsCursorWarpingEnabled() const
Function IsCursorWarpingEnabled()
void refreshMouse()
Sends an event to refresh mouse position.
wxScrolledCanvas * m_parentPanel
Panel that is affected by VIEW_CONTROLS.
double GetScale() const
Function GetScale()
Definition: view.h:268
void CenterOnCursor() const override
Function CenterOnCursor() Sets the viewport center to the current cursor position and warps the curso...

References CenterOnCursor(), KIGFX::VIEW::GetCenter(), KIGFX::VIEW::GetScale(), KIGFX::VIEW::GetScreenPixelSize(), KIGFX::VIEW_CONTROLS::IsCursorWarpingEnabled(), KIGFX::VC_SETTINGS::m_enableMousewheelPan, m_parentPanel, KIGFX::VIEW_CONTROLS::m_settings, KIGFX::VIEW_CONTROLS::m_view, m_zoomController, refreshMouse(), KIGFX::VIEW::SetCenter(), KIGFX::VIEW::SetScale(), KIGFX::VIEW::ToWorld(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by WX_VIEW_CONTROLS().

◆ refreshMouse()

void WX_VIEW_CONTROLS::refreshMouse ( )
private

Sends an event to refresh mouse position.

It is mostly used for notifying the tools that the cursor position in the world coordinates has changed, whereas the screen coordinates remained the same (e.g. frame edge autopanning).

Definition at line 647 of file wx_view_controls.cpp.

648 {
649  // Notify tools that the cursor position has changed in the world coordinates
650  wxMouseEvent moveEvent( EVT_REFRESH_MOUSE );
651  wxPoint msp = getMouseScreenPosition();
652  moveEvent.SetX( msp.x );
653  moveEvent.SetY( msp.y );
654 
655  // Set the modifiers state
656 #if wxCHECK_VERSION( 3, 0, 0 )
657  moveEvent.SetControlDown( wxGetKeyState( WXK_CONTROL ) );
658  moveEvent.SetShiftDown( wxGetKeyState( WXK_SHIFT ) );
659  moveEvent.SetAltDown( wxGetKeyState( WXK_ALT ) );
660 #else
661  // wx <3.0 do not have accessors, but the fields are exposed
662  moveEvent.m_controlDown = wxGetKeyState( WXK_CONTROL );
663  moveEvent.m_shiftDown = wxGetKeyState( WXK_SHIFT );
664  moveEvent.m_altDown = wxGetKeyState( WXK_ALT );
665 #endif
666 
667  m_cursorPos = m_view->ToWorld( VECTOR2D( msp.x, msp.y ) );
668  wxPostEvent( m_parentPanel, moveEvent );
669 }
static const wxEventType EVT_REFRESH_MOUSE
Event that forces mouse move event in the dispatcher (eg.
VECTOR2D ToWorld(const VECTOR2D &aCoord, bool aAbsolute=true) const
Function ToWorld() Converts a screen space point/vector to a point/vector in world space coordinates.
Definition: view.cpp:475
wxPoint getMouseScreenPosition() const
Gets the cursor position in the screen coordinates.
VIEW * m_view
Pointer to controlled VIEW.
VECTOR2< double > VECTOR2D
Definition: vector2d.h:586
wxScrolledCanvas * m_parentPanel
Panel that is affected by VIEW_CONTROLS.
VECTOR2D m_cursorPos
Current cursor position (world coordinates)

References EVT_REFRESH_MOUSE, getMouseScreenPosition(), m_cursorPos, m_parentPanel, KIGFX::VIEW_CONTROLS::m_view, and KIGFX::VIEW::ToWorld().

Referenced by onTimer(), onWheel(), and WarpCursor().

◆ Reset()

void VIEW_CONTROLS::Reset ( )
virtualinherited

Function Reset() Restores the default VIEW_CONTROLS settings.

Definition at line 49 of file view_controls.cpp.

50 {
51  // Get the default settings from the default constructor
54 }
void ApplySettings(const VC_SETTINGS &aSettings)
Applies VIEW_CONTROLS settings from an object
static LIB_PART * dummy()
Used when a LIB_PART is not found in library to draw a dummy shape.
Structure to keep VIEW_CONTROLS settings for easy store/restore operations
Definition: view_controls.h:44

References KIGFX::VIEW_CONTROLS::ApplySettings(), and KIGFX::dummy().

◆ SetAdditionalPanButtons()

void KIGFX::VIEW_CONTROLS::SetAdditionalPanButtons ( bool  aLeft = false,
bool  aRight = false 
)
inlineinherited

Definition at line 364 of file view_controls.h.

365  {
368  }
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
bool m_panWithRightButton
Allow panning with the right button in addition to middle
Definition: view_controls.h:91
bool m_panWithLeftButton
Allow panning with the left button in addition to middle
Definition: view_controls.h:94

References KIGFX::VC_SETTINGS::m_panWithLeftButton, KIGFX::VC_SETTINGS::m_panWithRightButton, and KIGFX::VIEW_CONTROLS::m_settings.

Referenced by CVPCB_SELECTION_TOOL::Main(), and GERBVIEW_SELECTION_TOOL::Main().

◆ SetAutoPan()

virtual void KIGFX::VIEW_CONTROLS::SetAutoPan ( bool  aEnabled)
inlinevirtualinherited

Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg.

drawing a track) and user moves mouse to the VIEW edge - then the view can be translated or not).

Parameters
aEnabledtells if the autopanning should be active.

Definition at line 156 of file view_controls.h.

157  {
158  m_settings.m_autoPanEnabled = aEnabled;
159  }
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
bool m_autoPanEnabled
Flag for turning on autopanning
Definition: view_controls.h:73

References KIGFX::VC_SETTINGS::m_autoPanEnabled, and KIGFX::VIEW_CONTROLS::m_settings.

Referenced by KIGFX::VIEW_CONTROLS::ApplySettings(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), PCB_TOOL_BASE::doInteractiveItemPlacement(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), LIB_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::DrawZone(), ROUTER_TOOL::finishInteractive(), SCH_LINE_WIRE_BUS_TOOL::finishSegments(), ROUTER_TOOL::InlineDrag(), PL_EDIT_TOOL::Main(), SCH_MOVE_TOOL::Main(), EE_POINT_EDITOR::Main(), PL_POINT_EDITOR::Main(), LIB_MOVE_TOOL::Main(), EDIT_TOOL::Main(), EDIT_TOOL::MeasureTool(), POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::performDragging(), LENGTH_TUNER_TOOL::performTuning(), SCH_DRAWING_TOOLS::PlaceComponent(), SCH_DRAWING_TOOLS::PlaceImage(), PL_DRAWING_TOOLS::PlaceItem(), PCB_EDITOR_CONTROL::PlaceModule(), DRAWING_TOOL::PlaceText(), ROUTER_TOOL::prepareInteractive(), POINT_EDITOR::Reset(), PL_SELECTION_TOOL::selectMultiple(), EE_SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectMultiple(), ZOOM_TOOL::selectRegion(), DRAWING_TOOL::SetAnchor(), PICKER_TOOL::setControls(), PCBNEW_PICKER_TOOL::setControls(), LIB_DRAWING_TOOLS::TwoClickPlace(), and SCH_DRAWING_TOOLS::TwoClickPlace().

◆ SetAutoPanMargin()

virtual void KIGFX::VIEW_CONTROLS::SetAutoPanMargin ( float  aMargin)
inlinevirtualinherited

Function SetAutoPanMArgin() Sets margin for autopanning (ie.

the area when autopanning becomes active).

Parameters
aMarginis a new margin for autopanning.

Definition at line 186 of file view_controls.h.

187  {
188  m_settings.m_autoPanMargin = aMargin;
189  }
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
float m_autoPanMargin
Distance from cursor to VIEW edge when panning is active
Definition: view_controls.h:79

References KIGFX::VC_SETTINGS::m_autoPanMargin, and KIGFX::VIEW_CONTROLS::m_settings.

Referenced by KIGFX::VIEW_CONTROLS::ApplySettings().

◆ SetAutoPanSpeed()

virtual void KIGFX::VIEW_CONTROLS::SetAutoPanSpeed ( float  aSpeed)
inlinevirtualinherited

Function SetAutoPanSpeed() Sets speed of autopanning.

Parameters
aSpeedis a new speed for autopanning.

Definition at line 176 of file view_controls.h.

177  {
178  m_settings.m_autoPanSpeed = aSpeed;
179  }
float m_autoPanSpeed
How fast is panning when in auto mode
Definition: view_controls.h:82
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings

References KIGFX::VC_SETTINGS::m_autoPanSpeed, and KIGFX::VIEW_CONTROLS::m_settings.

Referenced by KIGFX::VIEW_CONTROLS::ApplySettings().

◆ SetCrossHairCursorPosition()

void WX_VIEW_CONTROLS::SetCrossHairCursorPosition ( const VECTOR2D aPosition,
bool  aWarpView = true 
)
overridevirtual

Moves the graphic crosshair cursor to the requested position expressed in world coordinates.

Parameters
aPositionis the requested cursor position in the world coordinates.
aWarpViewenables/disables view warp if the cursor is outside the current viewport.

Implements KIGFX::VIEW_CONTROLS.

Definition at line 513 of file wx_view_controls.cpp.

514 {
515  m_updateCursor = false;
516 
517  const VECTOR2I& screenSize = m_view->GetGAL()->GetScreenPixelSize();
518  BOX2I screen( VECTOR2I( 0, 0 ), screenSize );
519  VECTOR2D screenPos = m_view->ToScreen( aPosition );
520 
521  if( aWarpView && !screen.Contains( screenPos ) )
522  m_view->SetCenter( aPosition );
523 
524  m_cursorPos = aPosition;
525 }
GAL * GetGAL() const
Function GetGAL() Returns the GAL this view is using to draw graphical primitives.
Definition: view.h:180
VIEW * m_view
Pointer to controlled VIEW.
VECTOR2< int > VECTOR2I
Definition: vector2d.h:587
const VECTOR2I & GetScreenPixelSize() const
Returns GAL canvas size in pixels.
void SetCenter(const VECTOR2D &aCenter)
Function SetCenter() Sets the center point of the VIEW (i.e.
Definition: view.cpp:601
VECTOR2D ToScreen(const VECTOR2D &aCoord, bool aAbsolute=true) const
Function ToScreen() Converts a world space point/vector to a point/vector in screen space coordinates...
Definition: view.cpp:494
bool m_updateCursor
Flag deciding whether the cursor position should be calculated using the mouse position.
VECTOR2D m_cursorPos
Current cursor position (world coordinates)

References BOX2< Vec >::Contains(), KIGFX::VIEW::GetGAL(), KIGFX::GAL::GetScreenPixelSize(), m_cursorPos, m_updateCursor, KIGFX::VIEW_CONTROLS::m_view, KIGFX::VIEW::SetCenter(), and KIGFX::VIEW::ToScreen().

◆ SetCursorPosition()

void WX_VIEW_CONTROLS::SetCursorPosition ( const VECTOR2D aPosition,
bool  aWarpView,
bool  aTriggeredByArrows 
)
overridevirtual

Moves cursor to the requested position expressed in world coordinates.

The position is not forced and will be overridden with the next mouse motion event. Mouse cursor follows the world cursor.

Parameters
aPositionis the requested cursor position in the world coordinates.
aWarpViewenables/disables view warp if the cursor is outside the current viewport.

Implements KIGFX::VIEW_CONTROLS.

Definition at line 491 of file wx_view_controls.cpp.

493 {
494  m_updateCursor = false;
495 
496  if( aTriggeredByArrows )
497  {
500  m_cursorWarped = false;
501  }
502  else
503  {
505  m_cursorWarped = true;
506  }
507 
508  WarpCursor( aPosition, true, aWarpView );
509  m_cursorPos = aPosition;
510 }
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
VECTOR2D m_lastKeyboardCursorPosition
Position of the above event
bool m_cursorWarped
Application warped the cursor, not the user (keyboard)
void WarpCursor(const VECTOR2D &aPosition, bool aWorldCoordinates=false, bool aWarpView=false) override
bool m_updateCursor
Flag deciding whether the cursor position should be calculated using the mouse position.
bool m_lastKeyboardCursorPositionValid
Is last cursor motion event coming from keyboard arrow cursor motion action
Definition: view_controls.h:97
VECTOR2D m_cursorPos
Current cursor position (world coordinates)

References m_cursorPos, KIGFX::VIEW_CONTROLS::m_cursorWarped, KIGFX::VC_SETTINGS::m_lastKeyboardCursorPosition, KIGFX::VC_SETTINGS::m_lastKeyboardCursorPositionValid, KIGFX::VIEW_CONTROLS::m_settings, m_updateCursor, and WarpCursor().

◆ SetGrabMouse()

void WX_VIEW_CONTROLS::SetGrabMouse ( bool  aEnabled)
overridevirtual

Function SetGrabMouse() Enables/disables mouse cursor grabbing (limits the movement field only to the panel area).

Parameters
aEnabledsays whether the option should be enabled or disabled.

Reimplemented from KIGFX::VIEW_CONTROLS.

Definition at line 445 of file wx_view_controls.cpp.

446 {
447  if( aEnabled && !m_settings.m_grabMouse )
448  m_parentPanel->CaptureMouse();
449  else if( !aEnabled && m_settings.m_grabMouse )
450  m_parentPanel->ReleaseMouse();
451 
452  VIEW_CONTROLS::SetGrabMouse( aEnabled );
453 }
bool m_grabMouse
Flag for grabbing the mouse cursor
Definition: view_controls.h:70
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
wxScrolledCanvas * m_parentPanel
Panel that is affected by VIEW_CONTROLS.
virtual void SetGrabMouse(bool aEnabled)
Function SetGrabMouse Turns on/off mouse grabbing.

References KIGFX::VC_SETTINGS::m_grabMouse, m_parentPanel, KIGFX::VIEW_CONTROLS::m_settings, and KIGFX::VIEW_CONTROLS::SetGrabMouse().

◆ SetSnapping()

virtual void KIGFX::VIEW_CONTROLS::SetSnapping ( bool  aEnabled)
inlinevirtualinherited

◆ ShowCursor()

void VIEW_CONTROLS::ShowCursor ( bool  aEnabled)
virtualinherited

Function ShowCursor() Enables or disables display of cursor.

Parameters
aEnableddecides if the cursor should be shown.

Definition at line 33 of file view_controls.cpp.

34 {
35  m_settings.m_showCursor = aEnabled;
36  m_view->GetGAL()->SetCursorEnabled( aEnabled );
37 }
void SetCursorEnabled(bool aCursorEnabled)
Enable/disable cursor.
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
GAL * GetGAL() const
Function GetGAL() Returns the GAL this view is using to draw graphical primitives.
Definition: view.h:180
VIEW * m_view
Pointer to controlled VIEW.
bool m_showCursor
Flag determining the cursor visibility
Definition: view_controls.h:55

References KIGFX::VIEW::GetGAL(), KIGFX::VIEW_CONTROLS::m_settings, KIGFX::VC_SETTINGS::m_showCursor, KIGFX::VIEW_CONTROLS::m_view, and KIGFX::GAL::SetCursorEnabled().

Referenced by KIGFX::VIEW_CONTROLS::ApplySettings(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), PCB_TOOL_BASE::doInteractiveItemPlacement(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), LIB_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::DrawZone(), PAD_TOOL::EnumeratePads(), ROUTER_TOOL::InlineDrag(), PL_EDIT_TOOL::Main(), SCH_MOVE_TOOL::Main(), EE_POINT_EDITOR::Main(), LIB_MOVE_TOOL::Main(), PL_POINT_EDITOR::Main(), EDIT_TOOL::Main(), ROUTER_TOOL::MainLoop(), LENGTH_TUNER_TOOL::MainLoop(), EDIT_TOOL::MeasureTool(), POINT_EDITOR::OnSelectionChange(), LIB_DRAWING_TOOLS::PlaceAnchor(), SCH_DRAWING_TOOLS::PlaceComponent(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), PCB_EDITOR_CONTROL::PlaceModule(), DRAWING_TOOL::PlaceText(), DRAWING_TOOL::SetAnchor(), EE_POINT_EDITOR::setEditedPoint(), PL_POINT_EDITOR::setEditedPoint(), POINT_EDITOR::setEditedPoint(), SCH_DRAWING_TOOLS::SingleClickPlace(), LIB_DRAWING_TOOLS::TwoClickPlace(), and SCH_DRAWING_TOOLS::TwoClickPlace().

◆ UpdateScrollbars()

void WX_VIEW_CONTROLS::UpdateScrollbars ( )

Adjusts the scrollbars position to match the current viewport.

Definition at line 680 of file wx_view_controls.cpp.

681 {
682  const BOX2D viewport = m_view->GetViewport();
683  const BOX2D& boundary = m_view->GetBoundary();
684 
685  m_scrollScale.x = 2e3 / viewport.GetWidth(); // TODO it does not have to be updated so often
686  m_scrollScale.y = 2e3 / viewport.GetHeight();
687  VECTOR2I newScroll( ( viewport.Centre().x - boundary.GetLeft() ) * m_scrollScale.x,
688  ( viewport.Centre().y - boundary.GetTop() ) * m_scrollScale.y );
689 
690  // Flip scroll direction in flipped view
691  if( m_view->IsMirroredX() )
692  newScroll.x = ( boundary.GetRight() - viewport.Centre().x ) * m_scrollScale.x;
693 
694  // Adjust scrollbars only if it is needed. Otherwise there are cases when canvas is continuosly
695  // refreshed (Windows)
696  if( m_scrollPos != newScroll )
697  {
698  // Another example of wxWidgets being broken by design: scroll position is determined by the
699  // left (or top, if vertical) edge of the slider. Fortunately, slider size seems to be constant
700  // (at least for wxGTK and wxMSW), so we have to add its size to allow user to scroll the workspace
701  // till the end.
702 
703  m_parentPanel->SetScrollbars( 1, 1,
704 #if defined(__LINUX__)
705  m_scrollScale.x * boundary.GetWidth() + 1623, m_scrollScale.y * boundary.GetHeight() + 1623,
706 #elif defined(__WIN32__) || defined(__WIN64__)
707  m_scrollScale.x * boundary.GetWidth() + 1377, m_scrollScale.y * boundary.GetHeight() + 741,
708 #else
709  m_scrollScale.x * boundary.GetWidth(), m_scrollScale.y * boundary.GetHeight(),
710 #endif
711  newScroll.x, newScroll.y, false );
712 
713  m_scrollPos = newScroll;
714  }
715 }
BOX2D GetViewport() const
Function GetViewport() Returns the current viewport visible area rectangle.
Definition: view.cpp:538
const BOX2D & GetBoundary() const
Function GetBoundary()
Definition: view.h:298
coord_type GetTop() const
Definition: box2.h:202
coord_type GetRight() const
Definition: box2.h:197
VIEW * m_view
Pointer to controlled VIEW.
VECTOR2D m_scrollScale
Ratio used for scaling world coordinates to scrollbar position.
coord_type GetWidth() const
Definition: box2.h:195
bool IsMirroredX() const
Function IsMirroredX() Returns true if view is flipped across the X axis.
Definition: view.h:230
wxScrolledCanvas * m_parentPanel
Panel that is affected by VIEW_CONTROLS.
Vec Centre() const
Definition: box2.h:77
VECTOR2I m_scrollPos
Current scrollbar position.
coord_type GetHeight() const
Definition: box2.h:196
coord_type GetLeft() const
Definition: box2.h:201

References BOX2< Vec >::Centre(), KIGFX::VIEW::GetBoundary(), BOX2< Vec >::GetHeight(), BOX2< Vec >::GetLeft(), BOX2< Vec >::GetRight(), BOX2< Vec >::GetTop(), KIGFX::VIEW::GetViewport(), BOX2< Vec >::GetWidth(), KIGFX::VIEW::IsMirroredX(), m_parentPanel, m_scrollPos, m_scrollScale, KIGFX::VIEW_CONTROLS::m_view, VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by EDA_DRAW_PANEL_GAL::onPaint().

◆ WarpCursor()

void WX_VIEW_CONTROLS::WarpCursor ( const VECTOR2D aPosition,
bool  aWorldCoordinates = false,
bool  aWarpView = false 
)
overridevirtual

Implements KIGFX::VIEW_CONTROLS.

Definition at line 528 of file wx_view_controls.cpp.

530 {
531  if( aWorldCoordinates )
532  {
533  const VECTOR2I& screenSize = m_view->GetGAL()->GetScreenPixelSize();
534  BOX2I screen( VECTOR2I( 0, 0 ), screenSize );
535  VECTOR2D screenPos = m_view->ToScreen( aPosition );
536 
537  if( !screen.Contains( screenPos ) )
538  {
539  if( aWarpView )
540  {
541  m_view->SetCenter( aPosition );
542  m_parentPanel->WarpPointer( screenSize.x / 2, screenSize.y / 2 );
543  }
544  }
545  else
546  {
547  m_parentPanel->WarpPointer( screenPos.x, screenPos.y );
548  }
549  }
550  else
551  {
552  m_parentPanel->WarpPointer( aPosition.x, aPosition.y );
553  }
554 
555  refreshMouse();
556 }
GAL * GetGAL() const
Function GetGAL() Returns the GAL this view is using to draw graphical primitives.
Definition: view.h:180
VIEW * m_view
Pointer to controlled VIEW.
VECTOR2< int > VECTOR2I
Definition: vector2d.h:587
const VECTOR2I & GetScreenPixelSize() const
Returns GAL canvas size in pixels.
void SetCenter(const VECTOR2D &aCenter)
Function SetCenter() Sets the center point of the VIEW (i.e.
Definition: view.cpp:601
void refreshMouse()
Sends an event to refresh mouse position.
VECTOR2D ToScreen(const VECTOR2D &aCoord, bool aAbsolute=true) const
Function ToScreen() Converts a world space point/vector to a point/vector in screen space coordinates...
Definition: view.cpp:494
wxScrolledCanvas * m_parentPanel
Panel that is affected by VIEW_CONTROLS.

References BOX2< Vec >::Contains(), KIGFX::VIEW::GetGAL(), KIGFX::GAL::GetScreenPixelSize(), m_parentPanel, KIGFX::VIEW_CONTROLS::m_view, refreshMouse(), KIGFX::VIEW::SetCenter(), KIGFX::VIEW::ToScreen(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by SetCursorPosition().

Member Data Documentation

◆ EVT_REFRESH_MOUSE

const wxEventType WX_VIEW_CONTROLS::EVT_REFRESH_MOUSE = wxNewEventType()
static

Event that forces mouse move event in the dispatcher (eg.

used in autopanning, when mouse cursor does not move in screen coordinates, but does in world coordinates)

Definition at line 107 of file wx_view_controls.h.

Referenced by TOOL_DISPATCHER::DispatchWxEvent(), EDA_DRAW_PANEL_GAL::EDA_DRAW_PANEL_GAL(), and refreshMouse().

◆ m_cursorPos

VECTOR2D KIGFX::WX_VIEW_CONTROLS::m_cursorPos
private

Current cursor position (world coordinates)

Definition at line 170 of file wx_view_controls.h.

Referenced by GetRawCursorPosition(), onMotion(), refreshMouse(), SetCrossHairCursorPosition(), and SetCursorPosition().

◆ m_cursorWarped

bool KIGFX::VIEW_CONTROLS::m_cursorWarped
protectedinherited

Application warped the cursor, not the user (keyboard)

Definition at line 390 of file view_controls.h.

Referenced by handleAutoPanning(), SetCursorPosition(), and WX_VIEW_CONTROLS().

◆ m_dragStartPoint

VECTOR2D KIGFX::WX_VIEW_CONTROLS::m_dragStartPoint
private

Stores information about point where dragging has started.

Definition at line 147 of file wx_view_controls.h.

Referenced by onButton(), and onMotion().

◆ m_lookStartPoint

VECTOR2D KIGFX::WX_VIEW_CONTROLS::m_lookStartPoint
private

Stores information about the center of viewport when dragging has started.

Definition at line 150 of file wx_view_controls.h.

Referenced by onButton(), and onMotion().

◆ m_panDirection

VECTOR2D KIGFX::WX_VIEW_CONTROLS::m_panDirection
private

Current direction of panning (only autopanning mode)

Definition at line 153 of file wx_view_controls.h.

Referenced by handleAutoPanning(), and onTimer().

◆ m_panTimer

wxTimer KIGFX::WX_VIEW_CONTROLS::m_panTimer
private

Timer repsonsible for handling autopanning.

Definition at line 156 of file wx_view_controls.h.

Referenced by handleAutoPanning(), and WX_VIEW_CONTROLS().

◆ m_parentPanel

wxScrolledCanvas* KIGFX::WX_VIEW_CONTROLS::m_parentPanel
private

◆ m_scrollPos

VECTOR2I KIGFX::WX_VIEW_CONTROLS::m_scrollPos
private

Current scrollbar position.

Definition at line 162 of file wx_view_controls.h.

Referenced by UpdateScrollbars().

◆ m_scrollScale

VECTOR2D KIGFX::WX_VIEW_CONTROLS::m_scrollScale
private

Ratio used for scaling world coordinates to scrollbar position.

Definition at line 159 of file wx_view_controls.h.

Referenced by onScroll(), and UpdateScrollbars().

◆ m_settings

◆ m_state

STATE KIGFX::WX_VIEW_CONTROLS::m_state
private

Current state of VIEW_CONTROLS.

Definition at line 141 of file wx_view_controls.h.

Referenced by handleAutoPanning(), onButton(), onMotion(), and onTimer().

◆ m_updateCursor

bool KIGFX::WX_VIEW_CONTROLS::m_updateCursor
private

Flag deciding whether the cursor position should be calculated using the mouse position.

Definition at line 173 of file wx_view_controls.h.

Referenced by onMotion(), SetCrossHairCursorPosition(), and SetCursorPosition().

◆ m_view

◆ m_zoomController

std::unique_ptr<ZOOM_CONTROLLER> KIGFX::WX_VIEW_CONTROLS::m_zoomController
private

a ZOOM_CONTROLLER that determines zoom steps. This is platform-specific.

Definition at line 176 of file wx_view_controls.h.

Referenced by onWheel(), and WX_VIEW_CONTROLS().


The documentation for this class was generated from the following files: