1use crate::prelude::*;
2use enigo::{ Axis, Button, Coordinate, Direction, Enigo, Mouse as EnigoMouse, Settings, };
3
4#[derive(Debug)]
6pub struct Mouse {
7 enigo: Enigo,
8}
9
10impl Mouse {
11 pub fn new() -> Result<Self> {
13 Ok(Self {
14 enigo: Enigo::new( &Settings::default() )?,
15 })
16 }
17
18 pub fn coords(&mut self) -> Result<(i32, i32)> {
20 self.enigo.location().map_err(From::from)
21 }
22
23 pub fn display_size(&mut self) -> Result<(i32, i32)> {
25 self.enigo.main_display().map_err(From::from)
26 }
27
28 pub fn move_to(&mut self, x: i32, y: i32) -> Result<()> {
30 self.enigo.move_mouse(x, y, Coordinate::Abs).map_err(From::from)
31 }
32
33 pub fn move_relative(&mut self, x: i32, y: i32) -> Result<()> {
35 self.enigo.move_mouse(x, y, Coordinate::Rel).map_err(From::from)
36 }
37
38 pub fn move_to_center(&mut self) -> Result<()> {
40 let (w, h) = self.display_size()?;
41 let (x, y) = (w / 2, h / 2);
42
43 self.enigo.move_mouse(x, y, Coordinate::Abs).map_err(From::from)
44 }
45
46 pub fn press_left(&mut self) -> Result<()> {
48 self.enigo.button(Button::Left, Direction::Press).map_err(From::from)
49 }
50
51 pub fn release_left(&mut self) -> Result<()> {
53 self.enigo.button(Button::Left, Direction::Release).map_err(From::from)
54 }
55
56 pub fn press_right(&mut self) -> Result<()> {
58 self.enigo.button(Button::Right, Direction::Press).map_err(From::from)
59 }
60
61 pub fn release_right(&mut self) -> Result<()> {
63 self.enigo.button(Button::Right, Direction::Release).map_err(From::from)
64 }
65
66 pub fn scroll_x(&mut self, delta: i32) -> Result<()> {
68 self.enigo.scroll(delta, Axis::Horizontal).map_err(From::from)
69 }
70
71 pub fn scroll_y(&mut self, delta: i32) -> Result<()> {
73 self.enigo.scroll(delta, Axis::Vertical).map_err(From::from)
74 }
75}