Skip to content

anhhackta/ScrollNice

Repository files navigation

πŸ–±οΈ ScrollNice

Scroll by clicking β€” no physical mouse wheel required

License: MIT Platform: Windows Chrome Extension Rust Pages

VN EN

ScrollNice is a Windows system utility and a Chrome extension (FeelClick). Use a floating scroll zone: click, hold, or hover to scroll β€” ideal for broken wheels, one-handed use, or a different scrolling feel.

🌐 Site: anhhackta.github.io/ScrollNice · Sources: docs/ (GitHub Pages)


Highlights

Three modes Click/hold Β· top/bottom split Β· hover auto-scroll
Small native build Classic release is a tiny portable .exe (see Releases)
No telemetry Offline-first; no ads
Hotkeys Defaults: Ctrl+Alt+S (toggle), Ctrl+Alt+E (edit zone), Ctrl+Alt+W (wheel block) β€” configurable in config.json
Wheel block Optional; hold Alt to bypass (when configured)
Chrome Load unpacked from extension/FeelClick/

Install

Windows (portable, from Releases)

  1. Download ScrollNice-portable.zip from Releases.
  2. Extract and run ScrollNice.exe.
  3. Settings: config.json next to the executable.

The shipped binary today is built from the C++ / Win32 stack. A Rust + Slint UI rewrite is in progress (see Migration status).

Chrome extension (FeelClick)

  1. Clone or download this repo.
  2. Chrome β†’ chrome://extensions/ β†’ enable Developer mode β†’ Load unpacked.
  3. Choose extension/FeelClick/.

Build from source

C++ application (current release path)

Requirements: CMake β‰₯ 3.15, MSVC 2019+ (or compatible toolchain).

git clone https://github.com/anhhackta/ScrollNice.git
cd ScrollNice
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release

Output: build/Release/ScrollNice.exe (layout may vary slightly by generator).

Rust + Slint (migration / preview)

Requirements: Rust stable, same repo root.

# Debug (nhanh nhαΊ₯t để compile lαΊ·p, binary lα»›n hΖ‘n)
cargo build
# .\target\debug\scrollnice-rs.exe

# Thα»­ tα»‘i Ζ°u vα»«a phαΊ£i β€” compile nhanh hΖ‘n --release
cargo build --profile quick
# .\target\quick\scrollnice-rs.exe

# BαΊ£n phΓ‘t hΓ nh tα»‘i Ζ°u
cargo test
cargo build --release
# .\target\release\scrollnice-rs.exe

Design and schema: docs/superpowers/specs/2026-05-08-slint-ui-migration-design.md Β· Progress: MIGRATION_STATUS_2026-05-08.md.

Which .exe should I run?

Goal Run this
Normal use Download from Releases β†’ ScrollNice.exe inside the zip (C++ build).
After CMake (cmake --build …) build\Release\ScrollNice.exe (path may vary, e.g. build\x64\Release\).
After cargo build target\debug\scrollnice-rs.exe
After cargo build --profile quick target\quick\scrollnice-rs.exe
After cargo build --release target\release\scrollnice-rs.exe

Only one of these is needed at a time. target\ holds Rust outputs; build\ holds CMake outputs β€” both are safe to delete and will be recreated on the next build (they are gitignored).


Configuration (config.json)

The Rust baseline uses schema version 2 (see spec). Example:

{
  "version": 2,
  "enabled": true,
  "language": "en",
  "theme": "dark",
  "current_profile": "default",
  "hotkeys": {
    "toggle_enabled": "Ctrl+Alt+S",
    "toggle_edit": "Ctrl+Alt+E",
    "toggle_wheel": "Ctrl+Alt+W"
  },
  "scroll": {
    "mode": "hover_auto",
    "scroll_amount": 3,
    "continuous_speed": 5,
    "continuous_accel": 1.2,
    "hover_speed": 3
  },
  "zone": {
    "x": 0,
    "y": 100,
    "width": 60,
    "height": 400,
    "opacity": 0.3,
    "locked": false
  },
  "wheel_block": "off",
  "wheel_block_bypass_modifier": "Alt",
  "start_with_windows": false,
  "sound": { "enabled": false },
  "profiles": []
}

The legacy C++ build may still expect an older shape for some fields; if you mix binaries, keep a backup of config.json. Full reference: docs.


Repository layout

ScrollNice/
β”œβ”€β”€ Cargo.toml, build.rs          # Rust + Slint (migration)
β”œβ”€β”€ CMakeLists.txt                # Native Windows app (C++17)
β”œβ”€β”€ config.json                   # Default / sample config (v2 for Rust)
β”œβ”€β”€ ui/                           # Slint UI (.slint)
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ main.rs, lib.rs
β”‚   β”œβ”€β”€ core/                     # Rust: config, zone, scroll_engine, state_machine (+ C++ counterparts)
β”‚   β”œβ”€β”€ platform/win/             # C++ Win32 implementation
β”‚   β”œβ”€β”€ platform/win32/           # Rust Win32 stubs / bridge (in progress)
β”‚   β”œβ”€β”€ i18n/, themes/, ui/
β”‚   └── main.cpp                  # C++ entry
β”œβ”€β”€ extension/FeelClick/          # Chrome MV3 extension
β”œβ”€β”€ locales/, presets/            # Rust i18n + presets
β”œβ”€β”€ docs/                         # GitHub Pages (landing + guides)
β”‚   β”œβ”€β”€ index.html, changelog.html, favicon.svg
β”‚   β”œβ”€β”€ css/, js/
β”‚   └── docs/                     # Documentation pages
β”œβ”€β”€ docs/superpowers/specs/       # Approved design specs
β”œβ”€β”€ MIGRATION_STATUS_2026-05-08.md
β”œβ”€β”€ ScrollNiceDoc                 # Optional narrative history (Vietnamese / English)
└── vendor/                       # C++ headers (e.g. nlohmann json)

Build artifacts: build/ (CMake) and target/ (Rust) are ignored by Git β€” generate locally.


Security & privacy

  • No telemetry β€” data stays on your machine.
  • No screen scraping, clipboard harvesting, or foreign-process DLL injection.
  • Uses the standard Windows WH_MOUSE_LL hook for pointer events needed by the scroll zone. Some AV tools may flag low-level hooks generically; the code here is open for review.

Support the project

ScrollNice is free and open source. If it helps your workflow:


License

MIT License


Author

HoΓ ngX Β· @anhhackta Β· Project site

Made with care in Vietnam πŸ‡»πŸ‡³

About

You have a bad mouse wheel, don't worry because there's me. A small Windows utility that scrolls the mouse using *Cursor Zones* (scroll zones), which is simpler to work than regular mouse rolling

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors