mirror of https://github.com/jetkvm/kvm.git
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.
This commit is contained in:
parent
fc3dbcd820
commit
0a4a1af80e
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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...)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue