diff options
author | Devaev Maxim <[email protected]> | 2020-11-04 10:52:00 +0300 |
---|---|---|
committer | Devaev Maxim <[email protected]> | 2020-11-04 10:52:00 +0300 |
commit | 3386c66278cc5f2da0133249a1d12a26f05d51b5 (patch) | |
tree | de3757dbdef497c339ecf382e01bd0716a761086 /kvmd/plugins/hid/otg/events.py | |
parent | c31115051cb17a650e6d42e3e5cbfe05de809760 (diff) |
refactoring
Diffstat (limited to 'kvmd/plugins/hid/otg/events.py')
-rw-r--r-- | kvmd/plugins/hid/otg/events.py | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/kvmd/plugins/hid/otg/events.py b/kvmd/plugins/hid/otg/events.py new file mode 100644 index 00000000..351a99fd --- /dev/null +++ b/kvmd/plugins/hid/otg/events.py @@ -0,0 +1,118 @@ +# ========================================================================== # +# # +# KVMD - The main Pi-KVM daemon. # +# # +# Copyright (C) 2018 Maxim Devaev <[email protected]> # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see <https://www.gnu.org/licenses/>. # +# # +# ========================================================================== # + + +import dataclasses + +from typing import Union + +from ....keyboard.mappings import OtgKey +from ....keyboard.mappings import KEYMAP + + +# ===== +class BaseEvent: + pass + + +class ClearEvent(BaseEvent): + pass + + +class ResetEvent(BaseEvent): + pass + + +# ===== [email protected](frozen=True) +class KeyEvent(BaseEvent): + key: OtgKey + state: bool + + def __post_init__(self) -> None: + assert (not self.key.is_modifier) + + [email protected](frozen=True) +class ModifierEvent(BaseEvent): + modifier: OtgKey + state: bool + + def __post_init__(self) -> None: + assert self.modifier.is_modifier + + +def make_keyboard_event(key: str, state: bool) -> Union[KeyEvent, ModifierEvent]: + otg_key = KEYMAP[key].otg + if otg_key.is_modifier: + return ModifierEvent(otg_key, state) + return KeyEvent(otg_key, state) + + +# ===== [email protected](frozen=True) +class MouseButtonEvent(BaseEvent): + button: str + state: bool + code: int = 0 + + def __post_init__(self) -> None: + object.__setattr__(self, "code", { + "left": 0x1, + "right": 0x2, + "middle": 0x4, + "up": 0x8, # Back + "down": 0x10, # Forward + }[self.button]) + + [email protected](frozen=True) +class MouseMoveEvent(BaseEvent): + to_x: int + to_y: int + to_fixed_x: int = 0 + to_fixed_y: int = 0 + + def __post_init__(self) -> None: + assert -32768 <= self.to_x <= 32767 + assert -32768 <= self.to_y <= 32767 + object.__setattr__(self, "to_fixed_x", (self.to_x + 32768) // 2) + object.__setattr__(self, "to_fixed_y", (self.to_y + 32768) // 2) + + [email protected](frozen=True) +class MouseRelativeEvent(BaseEvent): + delta_x: int + delta_y: int + + def __post_init__(self) -> None: + assert -127 <= self.delta_x <= 127 + assert -127 <= self.delta_y <= 127 + + [email protected](frozen=True) +class MouseWheelEvent(BaseEvent): + delta_x: int + delta_y: int + + def __post_init__(self) -> None: + assert -127 <= self.delta_x <= 127 + assert -127 <= self.delta_y <= 127 |