"""
Mouse events capturing
"""
import pynput
from replay_wizard.models import (
MouseAction,
ScrollAction,
ClickAction,
Button,
)
[docs]
def on_move(sequence, x, y):
"""
On mouse move
:param sequence: current sequence
:param x: x mouse new position
:param y: y mouse new position
"""
action = MouseAction(x=x, y=y)
sequence.add(action)
[docs]
def on_click(sequence, x, y, button, pressed):
"""
On scroll
:param sequence: current sequence
:param x: x mouse position
:param y: y mouse position
:param button: left/right
:param pressed: True/False
"""
action = ClickAction(
x=x,
y=y,
button=button,
pressed=pressed,
)
sequence.add(action)
[docs]
def capture(sequence):
"""
capture user keyboard actions
:param sequence: current sequence
:param non_blocking_mode: use non-blocking threading mode. Default = false
"""
def on_move_handler(x, y):
return on_move(sequence, x, y)
def on_scroll_handler(x, y, dx, dy):
return on_scroll(sequence, x, y, dx, dy)
def on_click_handler(x, y, button, pressed):
buttons = {
pynput.mouse.Button.left: Button.LEFT,
pynput.mouse.Button.right: Button.RIGHT,
}
button = buttons[button]
return on_click(sequence, x, y, button, pressed)
# if non_blocking_mode:
listener = pynput.mouse.Listener(
on_move=on_move_handler,
on_scroll=on_scroll_handler,
on_click=on_click_handler,
)
listener.start()
# else:
# with pynput.keyboard.Listener(
# on_move=on_move_handler,
# on_scroll=on_scroll_handler,
# on_click=on_click_handler,
# ) as listener:
# listener.join()