diff options
| author | Maxime Coste <mawww@kakoune.org> | 2024-08-14 21:09:53 +1000 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2024-08-14 21:09:53 +1000 |
| commit | b7c014ba4fd1ef4aa309eb7c89f49db2deba630b (patch) | |
| tree | 148965bca9ea353a101c56e020260d0a3506ae6b /src | |
| parent | a0a000951e5569fc9af309dc329b759fe6e1d2e8 (diff) | |
| parent | 0fddb3fef8b668582c4b1246e0fb6fb1da0c6af7 (diff) | |
Merge remote-tracking branch 'enricozb/enricozb/scroll-coordinates'
Diffstat (limited to 'src')
| -rw-r--r-- | src/input_handler.cc | 7 | ||||
| -rw-r--r-- | src/keys.cc | 2 | ||||
| -rw-r--r-- | src/keys.hh | 3 | ||||
| -rw-r--r-- | src/terminal_ui.cc | 9 |
4 files changed, 12 insertions, 9 deletions
diff --git a/src/input_handler.cc b/src/input_handler.cc index 615dbf10..8ab88f20 100644 --- a/src/input_handler.cc +++ b/src/input_handler.cc @@ -118,7 +118,10 @@ struct MouseHandler Buffer& buffer = context.buffer(); BufferCoord cursor; - constexpr auto modifiers = Key::Modifiers::Control | Key::Modifiers::Alt | Key::Modifiers::Shift | Key::Modifiers::MouseButtonMask; + // bits above these potentially store additional information + constexpr auto mask = (Key::Modifiers) 0x7FF; + constexpr auto modifiers = Key::Modifiers::Control | Key::Modifiers::Alt | Key::Modifiers::Shift | Key::Modifiers::MouseButtonMask | ~mask; + switch ((key.modifiers & ~modifiers).value) { case Key::Modifiers::MousePress: @@ -184,7 +187,7 @@ struct MouseHandler } case Key::Modifiers::Scroll: - scroll_window(context, static_cast<int32_t>(key.key), m_dragging ? OnHiddenCursor::MoveCursor : OnHiddenCursor::PreserveSelections); + scroll_window(context, key.scroll_amount(), m_dragging ? OnHiddenCursor::MoveCursor : OnHiddenCursor::PreserveSelections); return true; default: return false; diff --git a/src/keys.cc b/src/keys.cc index 4a14e0fc..30aeaca7 100644 --- a/src/keys.cc +++ b/src/keys.cc @@ -197,7 +197,7 @@ String to_string(Key key) else if (key.modifiers & Key::Modifiers::MouseRelease) res = format("mouse:release:{}:{}.{}", key.mouse_button(), coord.line, coord.column); else if (key.modifiers & Key::Modifiers::Scroll) - res = format("scroll:{}", static_cast<int>(key.key)); + res = format("scroll:{}:{}.{}", key.scroll_amount(), coord.line, coord.column); else if (key.modifiers & Key::Modifiers::Resize) res = format("resize:{}.{}", coord.line, coord.column); else diff --git a/src/keys.hh b/src/keys.hh index ccafe336..3c5d7f4b 100644 --- a/src/keys.hh +++ b/src/keys.hh @@ -89,8 +89,9 @@ struct Key constexpr bool operator==(Key other) const { return val() == other.val(); } constexpr auto operator<=>(Key other) const { return val() <=> other.val(); } - constexpr DisplayCoord coord() const { return {(int)((key & 0xFFFF0000) >> 16), (int)(key & 0x0000FFFF)}; } + constexpr DisplayCoord coord() const { return {(int)((int32_t) (key & 0xFFFF0000) >> 16), (int)(key & 0x0000FFFF)}; } constexpr MouseButton mouse_button() { return MouseButton{((int)modifiers & (int)Modifiers::MouseButtonMask) >> 6}; } + constexpr int scroll_amount() { return (int32_t)modifiers >> 16; } static Modifiers to_modifier(MouseButton button) { return Key::Modifiers{((int)button << 6) & (int)Modifiers::MouseButtonMask}; } Optional<Codepoint> codepoint() const; diff --git a/src/terminal_ui.cc b/src/terminal_ui.cc index ab3e6378..1ece515b 100644 --- a/src/terminal_ui.cc +++ b/src/terminal_ui.cc @@ -798,9 +798,8 @@ Optional<Key> TerminalUI::get_next_key() return Key{mod | Key::to_modifier(button), coord}; }; - auto mouse_scroll = [this](Key::Modifiers mod, bool down) -> Key { - return {mod | Key::Modifiers::Scroll, - (Codepoint)((down ? 1 : -1) * m_wheel_scroll_amount)}; + auto mouse_scroll = [this](Key::Modifiers mod, Codepoint coord, bool down) -> Key { + return {mod | Key::Modifiers::Scroll | (Key::Modifiers)((down ? m_wheel_scroll_amount : -1 * m_wheel_scroll_amount) << 16), coord}; }; auto masked_key = [&](Codepoint key, Codepoint shifted_key = 0) { @@ -921,8 +920,8 @@ Optional<Key> TerminalUI::get_next_key() else if (int guess = ffs(m_mouse_state) - 1; 0 <= guess and guess < 3) return mouse_button(mod, Key::MouseButton{guess}, coord, true); break; - case 64: return mouse_scroll(mod, false); - case 65: return mouse_scroll(mod, true); + case 64: return mouse_scroll(mod, coord, false); + case 65: return mouse_scroll(mod, coord, true); } return Key{Key::Modifiers::MousePos, coord}; } |
