[Finish][Completed] NativeNatureScrolling
<reverseyourmouse/>
![[Finish] [Completed] NativeNatureScrolling](/uploads/1771947088223-GeminiGeneratedImagexkr230xkr230xkr2.png)
Overview
NativeNatureScrolling là một ứng dụng menu bar nhỏ gọn cho macOS. App có một mục tiêu duy nhất: giữ nguyên trải nghiệm scroll của trackpad theo macOS, nhưng đảo chiều scroll khi người dùng đang cuộn bằng chuột.
How to Use
Logic hoạt động của app
1. App tạo global event tap để nghe scroll event
ScrollManager dùng CGEvent.tapCreate để lắng nghe scrollWheel event trên toàn hệ thống. Đây là thành phần trung tâm của app và cũng là lý do app cần quyền Accessibility.
Nếu event tap không tạo được, app vẫn tiếp tục chạy dưới dạng menu bar utility để người dùng mở nhanh cài đặt và cấp quyền.
2. Mỗi scroll event đều được phân loại theo đặc điểm của event
App không dựa vào danh sách hãng chuột, tên thiết bị, hay các rule phức tạp. Thay vào đó, mỗi event được xét ngay lúc xảy ra:
- Nếu event có
scrollPhasehoặcmomentumPhase, app xem đó làtrackpad / touch scrolling - Nếu không có các phase này, app xem đó là
mouse wheel
Heuristic này được chọn có chủ ý. Code hiện tại không dựa vào trường isContinuous, vì nhiều chuột hiện đại cũng báo cáo continuous scrolling và dễ gây nhầm lẫn với trackpad.
3. Trackpad được passthrough nguyên vẹn
Nếu event được xếp vào nhóm trackpad / touch scrolling, app trả event gốc về cho macOS mà không sửa hướng cuộn. Điều này giữ trải nghiệm của trackpad gần với hành vi mặc định của hệ thống nhất có thể.
4. Mouse wheel sẽ bị đảo chiều khi app đang bật
Nếu event được xếp vào nhóm mouse và app đang được bật:
- App tạo một
CGEventmới - Đảo dấu các delta scroll theo trục dọc, ngang, và trục thứ ba nếu có
- Giữ lại các metadata quan trọng như
flags,location,timestamp,scroll count,phase,momentum, và một số trường raw/accelerated delta
Nói ngắn gọn, app không đổi cấu hình hệ thống. App chỉ viết lại hướng cuộn của riêng event chuột trước khi event đó được ứng dụng khác nhận.