From 840caf5fd5e86d26551802de74971b8fc8b10a7c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 27 Mar 2023 17:06:56 +0530 Subject: [PATCH] Start work on mouse handling in diff kitten --- kittens/diff/main.go | 2 ++ kittens/diff/ui.go | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/kittens/diff/main.go b/kittens/diff/main.go index 4107a4ac5..d5ca9798b 100644 --- a/kittens/diff/main.go +++ b/kittens/diff/main.go @@ -133,6 +133,7 @@ func main(_ *cli.Command, opts_ *Options, args []string) (rc int, err error) { return 1, fmt.Errorf("%s does not exist", right) } lp, err = loop.New() + loop.MouseTrackingMode(lp, loop.BUTTONS_AND_DRAG_MOUSE_TRACKING) if err != nil { return 1, err } @@ -155,6 +156,7 @@ func main(_ *cli.Command, opts_ *Options, args []string) (rc int, err error) { lp.OnResize = h.on_resize lp.OnKeyEvent = h.on_key_event lp.OnText = h.on_text + lp.OnMouseEvent = h.on_mouse_event err = lp.Run() if err != nil { return 1, err diff --git a/kittens/diff/ui.go b/kittens/diff/ui.go index 30562400a..feb9108c3 100644 --- a/kittens/diff/ui.go +++ b/kittens/diff/ui.go @@ -627,3 +627,21 @@ func (self *Handler) dispatch_action(name, args string) error { } return nil } + +func (self *Handler) handle_wheel_event(up bool) { + if self.logical_lines != nil { + amt := 2 + if up { + amt *= -1 + } + self.dispatch_action(`scroll_by`, strconv.Itoa(amt)) + } +} + +func (self *Handler) on_mouse_event(ev *loop.MouseEvent) error { + if ev.Event_type == loop.MOUSE_PRESS && ev.Buttons&(loop.MOUSE_WHEEL_UP|loop.MOUSE_WHEEL_DOWN) != 0 { + self.handle_wheel_event(ev.Buttons&(loop.MOUSE_WHEEL_UP) != 0) + return nil + } + return nil +}