Skip to main content

muxr_client/pane/
focus.rs

1use muxr_core::ClientMouseEvent;
2use muxr_core::ClientMouseEventPhase;
3use muxr_core::ClientMousePosition;
4
5#[derive(Clone, Copy, Debug, Eq, PartialEq)]
6pub enum LocalMouseAction {
7    FocusAndSelectionStart(ClientMousePosition),
8    SelectionEnd(ClientMousePosition),
9    SelectionUpdate(ClientMousePosition),
10}
11
12impl LocalMouseAction {
13    pub fn from_event(event: ClientMouseEvent) -> Option<Self> {
14        let position = event.position;
15        if event.phase == ClientMouseEventPhase::Release {
16            return Some(Self::SelectionEnd(position));
17        }
18        if event.button & (64 | 0b11) != 0 {
19            return None;
20        }
21        if event.button & 32 != 0 {
22            return Some(Self::SelectionUpdate(position));
23        }
24        Some(Self::FocusAndSelectionStart(position))
25    }
26}