diff --git a/app/internal/window/gl_macos.m b/app/internal/window/gl_macos.m index 06a37876..38ee5de2 100644 --- a/app/internal/window/gl_macos.m +++ b/app/internal/window/gl_macos.m @@ -73,7 +73,7 @@ static void handleMouse(NSView *view, NSEvent *event, int typ, CGFloat dx, CGFlo - (void)scrollWheel:(NSEvent *)event { CGFloat dx = -event.scrollingDeltaX; CGFloat dy = -event.scrollingDeltaY; - handleMouse(self, event, GIO_MOUSE_MOVE, dx, dy); + handleMouse(self, event, GIO_MOUSE_SCROLL, dx, dy); } - (void)keyDown:(NSEvent *)event { NSString *keys = [event charactersIgnoringModifiers]; diff --git a/app/internal/window/os_js.go b/app/internal/window/os_js.go index 5e42caf6..a5bc5956 100644 --- a/app/internal/window/os_js.go +++ b/app/internal/window/os_js.go @@ -146,7 +146,7 @@ func (w *window) addEventListeners() { dx *= 120 dy *= 120 } - w.pointerEvent(pointer.Move, float32(dx), float32(dy), e) + w.pointerEvent(pointer.Scroll, float32(dx), float32(dy), e) return nil }) w.addEventListener(w.cnv, "touchstart", func(this js.Value, args []js.Value) interface{} { diff --git a/app/internal/window/os_macos.go b/app/internal/window/os_macos.go index 6290d0a5..32845de3 100644 --- a/app/internal/window/os_macos.go +++ b/app/internal/window/os_macos.go @@ -30,6 +30,7 @@ import ( #define GIO_MOUSE_MOVE 1 #define GIO_MOUSE_UP 2 #define GIO_MOUSE_DOWN 3 +#define GIO_MOUSE_SCROLL 4 __attribute__ ((visibility ("hidden"))) void gio_main(CFTypeRef viewRef, const char *title, CGFloat width, CGFloat height); __attribute__ ((visibility ("hidden"))) CGFloat gio_viewWidth(CFTypeRef viewRef); @@ -160,6 +161,8 @@ func gio_onMouse(view C.CFTypeRef, cdir C.int, cbtns C.NSUInteger, x, y, dx, dy typ = pointer.Release case C.GIO_MOUSE_DOWN: typ = pointer.Press + case C.GIO_MOUSE_SCROLL: + typ = pointer.Scroll default: panic("invalid direction") } diff --git a/app/internal/window/os_wayland.go b/app/internal/window/os_wayland.go index 28d15960..2a683666 100644 --- a/app/internal/window/os_wayland.go +++ b/app/internal/window/os_wayland.go @@ -1293,7 +1293,7 @@ func (w *window) flushScroll() { return } w.w.Event(pointer.Event{ - Type: pointer.Move, + Type: pointer.Scroll, Source: pointer.Mouse, Buttons: w.pointerBtns, Position: w.lastPos, diff --git a/app/internal/window/os_windows.go b/app/internal/window/os_windows.go index db9689a1..3d547187 100644 --- a/app/internal/window/os_windows.go +++ b/app/internal/window/os_windows.go @@ -278,7 +278,7 @@ func (w *window) scrollEvent(wParam, lParam uintptr) { p := f32.Point{X: float32(np.X), Y: float32(np.Y)} dist := float32(int16(wParam >> 16)) w.w.Event(pointer.Event{ - Type: pointer.Move, + Type: pointer.Scroll, Source: pointer.Mouse, Position: p, Buttons: w.pointerBtns, diff --git a/app/internal/window/os_x11.go b/app/internal/window/os_x11.go index ca581510..3d0b27e6 100644 --- a/app/internal/window/os_x11.go +++ b/app/internal/window/os_x11.go @@ -310,11 +310,11 @@ func (h *x11EventHandler) handleEvents() bool { btn = pointer.ButtonRight case C.Button4: // scroll up - ev.Type = pointer.Move + ev.Type = pointer.Scroll ev.Scroll.Y = -scrollScale case C.Button5: // scroll down - ev.Type = pointer.Move + ev.Type = pointer.Scroll ev.Scroll.Y = +scrollScale default: continue diff --git a/gesture/gesture.go b/gesture/gesture.go index 075884ca..d529840c 100644 --- a/gesture/gesture.go +++ b/gesture/gesture.go @@ -217,8 +217,7 @@ func (s *Scroll) Scroll(cfg unit.Converter, q event.Queue, t time.Time, axis Axi case pointer.Cancel: s.dragging = false s.grab = false - case pointer.Move: - // Scroll + case pointer.Scroll: switch s.axis { case Horizontal: s.scroll += e.Scroll.X @@ -228,10 +227,10 @@ func (s *Scroll) Scroll(cfg unit.Converter, q event.Queue, t time.Time, axis Axi iscroll := int(s.scroll) s.scroll -= float32(iscroll) total += iscroll + case pointer.Move: if !s.dragging || s.pid != e.PointerID { continue } - // Drag val := s.val(e.Position) s.estimator.Sample(e.Time, val) v := int(math.Round(float64(val))) diff --git a/io/pointer/pointer.go b/io/pointer/pointer.go index c0c87bae..c3502a8a 100644 --- a/io/pointer/pointer.go +++ b/io/pointer/pointer.go @@ -94,6 +94,8 @@ const ( Enter // Pointer leaves an area watching for pointer input Leave + // Scroll of a pointer. + Scroll ) const ( @@ -179,6 +181,8 @@ func (t Type) String() string { return "Enter" case Leave: return "Leave" + case Scroll: + return "Scroll" default: panic("unknown Type") }