Back to Portfolio

[Finish][Completed] NativeNatureScrolling

<reverseyourmouse/>

Source
[Finish] [Completed] NativeNatureScrolling

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ó scrollPhase hoặc momentumPhase, 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 CGEvent mớ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.

Recent Activity

[finish] Release v1.0

3/8/2026

by Đinh Trung Kiên

6b655d9

Sync current project state

3/8/2026

by Đinh Trung Kiên

a808190

[bug] fix issue with perrmission

2/25/2026

by Đinh Trung Kiên

73e755c

[docs] Add bilingual README explaining logic

2/24/2026

by Đinh Trung Kiên

81e9413

[finish] finish this project for MacOS

2/24/2026

by Đinh Trung Kiên

0d34fc3

Project Details

Categories
MacOS
When this categories appear, that's mean this project made for MacOS.
Tool & Extension
That's mean this project is tool for another platform or OS
Project Type
Individual
Status
Completed
Tech Stack
SwiftShell
Links
GitHub Repository

Releases

Latest Version1.0

NativeNatureScrolling.dmg

MacOS•0.38 MBWeb Upload
Older releases on GitHub