KiCad PCB EDA Suite
Loading...
Searching...
No Matches
TOOL_DISPATCHER Class Reference

#include <tool_dispatcher.h>

Inheritance diagram for TOOL_DISPATCHER:

Classes

struct  BUTTON_STATE
 Store information about a mouse button state. More...
 

Public Member Functions

 TOOL_DISPATCHER (TOOL_MANAGER *aToolMgr)
 
virtual ~TOOL_DISPATCHER ()
 
virtual void ResetState ()
 Bring the dispatcher to its initial state.
 
virtual void DispatchWxEvent (wxEvent &aEvent)
 Process wxEvents (mostly UI events), translate them to TOOL_EVENTs, and make tools handle those.
 
std::optional< TOOL_EVENTGetToolEvent (wxKeyEvent *aKeyEvent, bool *aSpecialKeyFlag)
 Map a wxWidgets key event to a TOOL_EVENT.
 

Private Member Functions

bool handleMouseButton (wxEvent &aEvent, int aIndex, bool aMotion)
 Handles mouse related events (click, motion, dragging).
 
void flushPendingClicks ()
 Processes any pending mouse clicks that have been physically completed but not yet dispatched.
 
KIGFX::VIEWgetView ()
 Returns the instance of VIEW, used by the application.
 

Static Private Member Functions

static int decodeModifiers (const wxKeyboardState *aState)
 Returns the state of key modifiers (Alt, Ctrl and so on) as OR'ed list of bits (MD_CTRL, MD_ALT ...)
 

Private Attributes

int m_sysDragMinX
 Minimum distance before drag is activated in the X axis.
 
int m_sysDragMinY
 Maximum distance before drag is activated in the Y axis.
 
VECTOR2D m_lastMousePos
 The last mouse cursor position (in world coordinates).
 
VECTOR2D m_lastMousePosScreen
 The last mouse cursor position (in screen coordinates).
 
std::vector< BUTTON_STATE * > m_buttons
 
TOOL_MANAGERm_toolMgr
 Instance of tool manager that cooperates with the dispatcher.
 

Static Private Attributes

static const int DragTimeThreshold = 300
 The time threshold for a mouse button press that distinguishes between a single mouse click and a beginning of drag event (expressed in milliseconds).
 
static const int DragDistanceThreshold = 8
 The distance threshold for mouse cursor that distinguishes between a single mouse click and a beginning of drag event (expressed in screen pixels).
 

Detailed Description

  • takes wx events,
  • fixes all wx quirks (mouse warping, panning, ordering problems, etc)
  • translates coordinates to world space
  • low-level input conditioning (drag/click threshold), updating mouse position during view auto-scroll/pan.
  • issues TOOL_EVENTS to the tool manager

Definition at line 52 of file tool_dispatcher.h.

Constructor & Destructor Documentation

◆ TOOL_DISPATCHER()

TOOL_DISPATCHER::TOOL_DISPATCHER ( TOOL_MANAGER * aToolMgr)
Parameters
aToolMgrtool manager instance the events will be sent to.

Definition at line 131 of file tool_dispatcher.cpp.

References BUT_AUX1, BUT_AUX2, BUT_LEFT, BUT_MIDDLE, BUT_RIGHT, DragDistanceThreshold, m_buttons, m_sysDragMinX, m_sysDragMinY, m_toolMgr, and ResetState().

◆ ~TOOL_DISPATCHER()

TOOL_DISPATCHER::~TOOL_DISPATCHER ( )
virtual

Definition at line 155 of file tool_dispatcher.cpp.

References m_buttons.

Member Function Documentation

◆ decodeModifiers()

int TOOL_DISPATCHER::decodeModifiers ( const wxKeyboardState * aState)
staticprivate

Returns the state of key modifiers (Alt, Ctrl and so on) as OR'ed list of bits (MD_CTRL, MD_ALT ...)

Definition at line 161 of file tool_dispatcher.cpp.

References MD_ALT, MD_ALTGR, MD_CTRL, MD_META, MD_SHIFT, and MD_SUPER.

Referenced by DispatchWxEvent(), GetToolEvent(), and handleMouseButton().

◆ DispatchWxEvent()

◆ flushPendingClicks()

void TOOL_DISPATCHER::flushPendingClicks ( )
private

Processes any pending mouse clicks that have been physically completed but not yet dispatched.

This ensures clicks are processed before cancel events when both happen in quick succession.

Definition at line 477 of file tool_dispatcher.cpp.

References m_buttons, m_toolMgr, TOOL_EVENT::SetMousePosition(), TA_MOUSE_CLICK, and TC_MOUSE.

Referenced by DispatchWxEvent().

◆ GetToolEvent()

std::optional< TOOL_EVENT > TOOL_DISPATCHER::GetToolEvent ( wxKeyEvent * aKeyEvent,
bool * aSpecialKeyFlag )

◆ getView()

KIGFX::VIEW * TOOL_DISPATCHER::getView ( )
private

Returns the instance of VIEW, used by the application.

Definition at line 206 of file tool_dispatcher.cpp.

References m_toolMgr.

◆ handleMouseButton()

◆ ResetState()

void TOOL_DISPATCHER::ResetState ( )
virtual

Bring the dispatcher to its initial state.

Definition at line 199 of file tool_dispatcher.cpp.

References m_buttons.

Referenced by TOOL_DISPATCHER().

Member Data Documentation

◆ DragDistanceThreshold

const int TOOL_DISPATCHER::DragDistanceThreshold = 8
staticprivate

The distance threshold for mouse cursor that distinguishes between a single mouse click and a beginning of drag event (expressed in screen pixels).

System drag preferences take precedence if available

Definition at line 104 of file tool_dispatcher.h.

Referenced by TOOL_DISPATCHER().

◆ DragTimeThreshold

const int TOOL_DISPATCHER::DragTimeThreshold = 300
staticprivate

The time threshold for a mouse button press that distinguishes between a single mouse click and a beginning of drag event (expressed in milliseconds).

Definition at line 99 of file tool_dispatcher.h.

Referenced by handleMouseButton().

◆ m_buttons

std::vector<BUTTON_STATE*> TOOL_DISPATCHER::m_buttons
private

◆ m_lastMousePos

VECTOR2D TOOL_DISPATCHER::m_lastMousePos
private

The last mouse cursor position (in world coordinates).

Definition at line 109 of file tool_dispatcher.h.

Referenced by DispatchWxEvent(), and handleMouseButton().

◆ m_lastMousePosScreen

VECTOR2D TOOL_DISPATCHER::m_lastMousePosScreen
private

The last mouse cursor position (in screen coordinates).

Definition at line 110 of file tool_dispatcher.h.

Referenced by DispatchWxEvent(), and handleMouseButton().

◆ m_sysDragMinX

int TOOL_DISPATCHER::m_sysDragMinX
private

Minimum distance before drag is activated in the X axis.

Definition at line 106 of file tool_dispatcher.h.

Referenced by handleMouseButton(), and TOOL_DISPATCHER().

◆ m_sysDragMinY

int TOOL_DISPATCHER::m_sysDragMinY
private

Maximum distance before drag is activated in the Y axis.

Definition at line 107 of file tool_dispatcher.h.

Referenced by handleMouseButton(), and TOOL_DISPATCHER().

◆ m_toolMgr

TOOL_MANAGER* TOOL_DISPATCHER::m_toolMgr
private

Instance of tool manager that cooperates with the dispatcher.

Definition at line 117 of file tool_dispatcher.h.

Referenced by DispatchWxEvent(), flushPendingClicks(), getView(), handleMouseButton(), and TOOL_DISPATCHER().


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