From 9a40dc4630b6cbe5ae475e3b7349368edaf5b9f1 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 29 Jun 2023 11:06:34 -0700 Subject: [PATCH] macos: build scroll mods value --- macos/Sources/Ghostty/SurfaceView.swift | 28 ++++++++++++++++++++++++- src/Surface.zig | 2 +- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/macos/Sources/Ghostty/SurfaceView.swift b/macos/Sources/Ghostty/SurfaceView.swift index 1d48c1597..566aa15d4 100644 --- a/macos/Sources/Ghostty/SurfaceView.swift +++ b/macos/Sources/Ghostty/SurfaceView.swift @@ -291,14 +291,40 @@ extension Ghostty { override func scrollWheel(with event: NSEvent) { guard let surface = self.surface else { return } + // Builds up the "input.ScrollMods" bitmask + var mods: Int32 = 0 + var x = event.scrollingDeltaX var y = event.scrollingDeltaY if event.hasPreciseScrollingDeltas { + mods = 1 x *= 0.1 y *= 0.1 } - ghostty_surface_mouse_scroll(surface, x, y, 0) + // Determine our momentum value + var momentum: ghostty_input_mouse_momentum_e = GHOSTTY_MOUSE_MOMENTUM_NONE + switch (event.momentumPhase) { + case .began: + momentum = GHOSTTY_MOUSE_MOMENTUM_BEGAN + case .stationary: + momentum = GHOSTTY_MOUSE_MOMENTUM_STATIONARY + case .changed: + momentum = GHOSTTY_MOUSE_MOMENTUM_CHANGED + case .ended: + momentum = GHOSTTY_MOUSE_MOMENTUM_ENDED + case .cancelled: + momentum = GHOSTTY_MOUSE_MOMENTUM_CANCELLED + case .mayBegin: + momentum = GHOSTTY_MOUSE_MOMENTUM_MAY_BEGIN + default: + break + } + + // Pack our momentum value into the mods bitmask + mods |= Int32(momentum.rawValue) << 1 + + ghostty_surface_mouse_scroll(surface, x, y, mods) } override func keyDown(with event: NSEvent) { diff --git a/src/Surface.zig b/src/Surface.zig index dc40e3920..4e8a2201b 100644 --- a/src/Surface.zig +++ b/src/Surface.zig @@ -1290,7 +1290,7 @@ pub fn scrollCallback( } else |_| {} } - // log.info("SCROLL: {} {}", .{ xoff, yoff }); + // log.info("SCROLL: xoff={} yoff={} mods={}", .{ xoff, yoff, scroll_mods }); // Positive is up const y_sign: isize = if (yoff > 0) -1 else 1;