Compare commits

..

3 Commits

Author SHA1 Message Date
Scai 1878e2a6f3
Merge 57fbee1490 into 0a4a1af80e 2025-05-19 09:55:13 -05:00
rmschooley 0a4a1af80e
Improve/Simplify Mouse Wheel Scroll Behavior (#470)
* Improve/Simplify Mouse Wheel Scroll Behavior

* Update hid_mouse_absolute.go

Attempt to fix line reported as improperly formatted by lint.

* Update utils.go

Removed abs() function since lint states it is no longer used.
2025-05-19 13:03:33 +02:00
Julian Zander fc3dbcd820
chore: add Go Report Card
Add Go Report Card
2025-05-19 08:53:01 +02:00
4 changed files with 19 additions and 33 deletions

View File

@ -7,6 +7,8 @@
[![Twitter](https://img.shields.io/twitter/url/https/twitter.com/jetkvm.svg?style=social&label=Follow%20%40JetKVM)](https://twitter.com/jetkvm) [![Twitter](https://img.shields.io/twitter/url/https/twitter.com/jetkvm.svg?style=social&label=Follow%20%40JetKVM)](https://twitter.com/jetkvm)
[![Go Report Card](https://goreportcard.com/badge/github.com/jetkvm/kvm)](https://goreportcard.com/report/github.com/jetkvm/kvm)
</div> </div>
JetKVM is a high-performance, open-source KVM over IP (Keyboard, Video, Mouse) solution designed for efficient remote management of computers, servers, and workstations. Whether you're dealing with boot failures, installing a new operating system, adjusting BIOS settings, or simply taking control of a machine from afar, JetKVM provides the tools to get it done effectively. JetKVM is a high-performance, open-source KVM over IP (Keyboard, Video, Mouse) solution designed for efficient remote management of computers, servers, and workstations. Whether you're dealing with boot failures, installing a new operating system, adjusting BIOS settings, or simply taking control of a machine from afar, JetKVM provides the tools to get it done effectively.

View File

@ -107,24 +107,16 @@ func (u *UsbGadget) AbsMouseWheelReport(wheelY int8) error {
u.absMouseLock.Lock() u.absMouseLock.Lock()
defer u.absMouseLock.Unlock() defer u.absMouseLock.Unlock()
// Accumulate the wheelY value // Only send a report if the value is non-zero
u.absMouseAccumulatedWheelY += float64(wheelY) / 8.0 if wheelY == 0 {
// Only send a report if the accumulated value is significant
if abs(u.absMouseAccumulatedWheelY) < 1.0 {
return nil return nil
} }
scaledWheelY := int8(u.absMouseAccumulatedWheelY)
err := u.absMouseWriteHidFile([]byte{ err := u.absMouseWriteHidFile([]byte{
2, // Report ID 2 2, // Report ID 2
byte(scaledWheelY), // Scaled Wheel Y (signed) byte(wheelY), // Wheel Y (signed)
}) })
// Reset the accumulator, keeping any remainder
u.absMouseAccumulatedWheelY -= float64(scaledWheelY)
u.resetUserInputTime() u.resetUserInputTime()
return err return err
} }

View File

@ -7,14 +7,6 @@ import (
"path/filepath" "path/filepath"
) )
// Helper function to get absolute value of float64
func abs(x float64) float64 {
if x < 0 {
return -x
}
return x
}
func joinPath(basePath string, paths []string) string { func joinPath(basePath string, paths []string) string {
pathArr := append([]string{basePath}, paths...) pathArr := append([]string{basePath}, paths...)
return filepath.Join(pathArr...) return filepath.Join(pathArr...)

View File

@ -259,25 +259,25 @@ export default function WebRTCVideo() {
(e: WheelEvent) => { (e: WheelEvent) => {
if (blockWheelEvent) return; if (blockWheelEvent) return;
// Determine if the wheel event is from a trackpad or a mouse wheel // Determine if the wheel event is an accel scroll value
const isTrackpad = Math.abs(e.deltaY) < trackpadThreshold; const isAccel = Math.abs(e.deltaY) >= 100;
// Apply appropriate sensitivity based on input device // Calculate the accel scroll value
const scrollSensitivity = isTrackpad ? trackpadSensitivity : mouseSensitivity; const accelScrollValue = e.deltaY / 100;
// Calculate the scroll value // Calculate the no accel scroll value
const scroll = e.deltaY * scrollSensitivity; const noAccelScrollValue = e.deltaY > 0 ? 1 : (e.deltaY < 0 ? -1 : 0);
// Apply clamping // Get scroll value
const clampedScroll = Math.max(clampMin, Math.min(clampMax, scroll)); const scrollValue = isAccel ? accelScrollValue : noAccelScrollValue;
// Round to the nearest integer // Apply clamping (i.e. min and max mouse wheel hardware value)
const roundedScroll = Math.round(clampedScroll); const clampedScrollValue = Math.max(-127, Math.min(127, scrollValue));
// Invert the scroll value to match expected behavior // Invert the clamped scroll value to match expected behavior
const invertedScroll = -roundedScroll; const invertedScrollValue = -clampedScrollValue;
send("wheelReport", { wheelY: invertedScroll }); send("wheelReport", { wheelY : invertedScrollValue });
// Apply blocking delay // Apply blocking delay
setBlockWheelEvent(true); setBlockWheelEvent(true);