mirror of
https://github.com/mawww/kakoune.git
synced 2024-11-27 12:16:22 +03:00
fix mouse coord underflow
previously, clicking on the status line if it is on the top of the window results on a coord.line = 1 << 16, or there abouts. This is because the expression (key & 0xFFFF0000) >> 16 results in an `shr` instruction which does not propagate the sign bit. Mouse event coordinates can be negative if the status line is on top and the status line is clicked. The new line (int32_t) (key & 0xFFFF0000) >> 16 properly propagates the sign bit, leading to the correct signed numeric line coordinate.
This commit is contained in:
parent
e7605b4ec9
commit
f2e7498ccc
@ -7,7 +7,6 @@
|
|||||||
#include "utf8_iterator.hh"
|
#include "utf8_iterator.hh"
|
||||||
#include "utils.hh"
|
#include "utils.hh"
|
||||||
#include "string_utils.hh"
|
#include "string_utils.hh"
|
||||||
#include "terminal_ui.hh"
|
|
||||||
|
|
||||||
namespace Kakoune
|
namespace Kakoune
|
||||||
{
|
{
|
||||||
|
@ -89,9 +89,9 @@ struct Key
|
|||||||
constexpr bool operator==(Key other) const { return val() == other.val(); }
|
constexpr bool operator==(Key other) const { return val() == other.val(); }
|
||||||
constexpr auto 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 MouseButton mouse_button() { return MouseButton{((int)modifiers & (int)Modifiers::MouseButtonMask) >> 6}; }
|
||||||
constexpr int scroll_amount() { return (int)modifiers >> 16; }
|
constexpr int scroll_amount() { return (int32_t)modifiers >> 16; }
|
||||||
static Modifiers to_modifier(MouseButton button) { return Key::Modifiers{((int)button << 6) & (int)Modifiers::MouseButtonMask}; }
|
static Modifiers to_modifier(MouseButton button) { return Key::Modifiers{((int)button << 6) & (int)Modifiers::MouseButtonMask}; }
|
||||||
|
|
||||||
Optional<Codepoint> codepoint() const;
|
Optional<Codepoint> codepoint() const;
|
||||||
|
Loading…
Reference in New Issue
Block a user