1use crate::selection::Selection;
2use crate::url_detection;
3use std::time::Instant;
4
5pub struct MouseState {
7 pub(crate) selection: Option<Selection>, pub(crate) is_selecting: bool, pub(crate) position: (f64, f64), pub(crate) button_pressed: bool, pub(crate) last_click_time: Option<Instant>, pub(crate) click_count: u32, pub(crate) click_position: Option<(usize, usize)>, pub(crate) click_pixel_position: Option<(f64, f64)>, pub(crate) tracking_press_position: Option<(f64, f64)>,
22 pub(crate) detected_urls: Vec<url_detection::DetectedUrl>, pub(crate) url_detect_scroll_offset: usize, pub(crate) hovered_url: Option<String>, pub(crate) hovered_url_bounds: Option<(usize, usize, usize)>, pub(crate) dragging_divider: Option<usize>, pub(crate) divider_hover: bool, pub(crate) hovered_divider_index: Option<usize>, }
32
33impl Default for MouseState {
34 fn default() -> Self {
35 Self::new()
36 }
37}
38
39impl MouseState {
40 pub(crate) fn new() -> Self {
41 Self {
42 selection: None,
43 is_selecting: false,
44 position: (0.0, 0.0),
45 button_pressed: false,
46 last_click_time: None,
47 click_count: 0,
48 click_position: None,
49 click_pixel_position: None,
50 tracking_press_position: None,
51 detected_urls: Vec::new(),
52 url_detect_scroll_offset: 0,
53 hovered_url: None,
54 hovered_url_bounds: None,
55 dragging_divider: None,
56 divider_hover: false,
57 hovered_divider_index: None,
58 }
59 }
60
61 pub fn test_new() -> Self {
63 Self::new()
64 }
65 pub fn test_set_button_pressed(&mut self, v: bool) {
66 self.button_pressed = v;
67 }
68 pub fn test_button_pressed(&self) -> bool {
69 self.button_pressed
70 }
71 pub fn test_set_is_selecting(&mut self, v: bool) {
72 self.is_selecting = v;
73 }
74 pub fn test_is_selecting(&self) -> bool {
75 self.is_selecting
76 }
77 pub fn test_set_selection(&mut self, sel: Option<Selection>) {
78 self.selection = sel;
79 }
80 pub fn test_selection(&self) -> Option<&Selection> {
81 self.selection.as_ref()
82 }
83 pub fn test_set_click_pixel_position(&mut self, pos: Option<(f64, f64)>) {
84 self.click_pixel_position = pos;
85 }
86 pub fn test_set_click_position(&mut self, pos: Option<(usize, usize)>) {
87 self.click_position = pos;
88 }
89 pub fn test_set_click_count(&mut self, count: u32) {
90 self.click_count = count;
91 }
92 pub fn test_set_dragging_divider(&mut self, idx: Option<usize>) {
93 self.dragging_divider = idx;
94 }
95 pub fn test_dragging_divider(&self) -> Option<usize> {
96 self.dragging_divider
97 }
98}