Skip to content

Add drag effects, Logitech CID buttons, brightness/volume control, and inertia engine - #1904

Open
miguelAngelo1999 wants to merge 1 commit into
noah-nuebling:masterfrom
miguelAngelo1999:feature/drag-effects-and-extra-buttons
Open

Add drag effects, Logitech CID buttons, brightness/volume control, and inertia engine#1904
miguelAngelo1999 wants to merge 1 commit into
noah-nuebling:masterfrom
miguelAngelo1999:feature/drag-effects-and-extra-buttons

Conversation

@miguelAngelo1999

Copy link
Copy Markdown

Summary

This PR adds several new features and improvements developed in the `smart-modifier-detection` fork:

New drag effects

  • Rotate & Zoom — horizontal drag = rotate, vertical = zoom, Shift = 90° snap mode
  • Volume & Brightness — vertical drag controls volume or brightness; combined axis mode (V/H)
  • Notification Center — horizontal swipe to open/close NC panel with fling + position tracking
  • Window Move — drag to move any window

Logitech HID++ 2.0 (ReprogControlsV4 — CID buttons)

  • Diverts extra Logitech buttons (thumb, tilt, precision, side) as standard `CGEvent` mouse buttons
  • USB Unifying/Bolt receiver support (slots 1–6), Bluetooth direct support
  • Background probing on attach; re-probe on system wake after sleep
  • 25s keep-alive timer to handle firmware diversion resets during use

DragInertiaEngine

  • Flywheel model for volume/brightness (bicycle-pedal momentum feel)
  • DragCurve fling for scroll/rotate (same physics as scroll momentum)
  • Non-linear input curve: slow = ultra-precise, fast = full-range sweep

ScrollOutputUtility (Brightness DDC)

  • DDC brightness control with EDID-based display matching
  • Combined hardware + software dimming (0–200% logical range)
  • Custom OSD overlay for external displays (system OSD broken on Tahoe+)

ModTapCoordinator

  • Smart modifier detection with 180ms tapping term delay

Scroll improvements

  • Stop Scroll button action (arrests scroll momentum instantly)
  • Arrow key scroll effects for timeline scrubbing / list navigation
  • Scroll suppression while drag is active (fixes middle-button conflict)

UI / bug fixes

  • Tab window resizing: use `fittingSize` for correct height per tab
  • Cap window height to visible screen (prevent going behind Dock)
  • `initRemaps` only loads defaults when Remaps array is actually empty
  • Dynamic bundle ID in `Locator.m`

Testing

Tested on macOS 26 (Tahoe) with Logitech MX Master 3 via Bolt receiver and Bluetooth.

…dTap

New drag effects:
- Rotate & Zoom (horizontal = rotate, vertical = zoom, Shift = 90° snap)
- Volume & Brightness (vertical drag, combined axis mode)
- Notification Center (horizontal swipe to open/close)
- Window Move drag effect

Logitech HID++ 2.0 ReprogControlsV4 (CID buttons):
- Extra buttons (thumb, precision, side) diverted as CGEvent mouse buttons
- USB Unifying/Bolt receiver support (slots 1-6)
- Background probing on attach, re-probe on system wake after sleep

DragInertiaEngine:
- Flywheel model for volume/brightness (bicycle-pedal momentum feel)
- DragCurve fling for scroll/rotate (same physics as scroll momentum)
- Non-linear input curve: slow = ultra-precise, fast = full-range sweep
- Scroll suppression while drag is active (fixes middle-button conflict)

Scroll improvements:
- ScrollOutputUtility: DDC brightness control with EDID matching
  combined hardware+software dimming (0-200% logical range)
  custom OSD overlay for external displays
- Stop Scroll button action (arrests scroll momentum)
- Arrow key scroll effects

ModTapCoordinator:
- Smart modifier detection with 180ms tapping term delay

UI fixes:
- Tab window resizing: use fittingSize for correct height per tab
- Cap window height to visible screen (prevent going behind dock)
- initRemaps: only load defaults when Remaps array is actually empty
- Dynamic bundle ID in Locator.m (no hardcoded author)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant