[PR #344] Add customizable mouse-click effects with new "Mouse" preferences tab #343

Open
opened 2026-05-05 05:13:42 -06:00 by gitea-mirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/keycastr/keycastr/pull/344
Author: @prossm
Created: 4/27/2026
Status: 🔄 Open

Base: mainHead: custom-click


📝 Commits (1)

  • 40399cc Add customizable mouse-click effects with new "Mouse" preferences tab

📊 Changes

6 files changed (+648 additions, -85 deletions)

View changed files

📝 keycastr/KCAppController.h (+5 -0)
📝 keycastr/KCAppController.m (+13 -0)
📝 keycastr/KCMouseEventVisualizer.h (+13 -1)
📝 keycastr/KCMouseEventVisualizer.m (+346 -82)
📝 keycastr/KCPrefsWindowController.h (+4 -0)
📝 keycastr/KCPrefsWindowController.m (+267 -2)

📄 Description

Hi! KeyCastr user here, first contribution. I built this for my own use and figured I'd offer it upstream. Feel free to incorporate it, or not as you see fit. Full transparency: I did use a coding agent for the work, but it's fully functional.

What this adds

A new "Mouse" preferences tab with four mouse-click visual effects (Halo, Blur, Halo + Blur, Droplet) and per-effect customization for color, density, diameter, and duration. The original Halo behavior is preserved as the default, just with its color decoupled from the keystroke bezel color.

Demo: https://www.loom.com/share/1a43df69bfbf4ce09d79115e62cc0696

Design notes worth flagging for review

  • Added as a separate prefs tab rather than extending the Display tab: I tried three approaches to graft the controls onto Display and each one collided with the existing tab's autoresize-mask layout — a new tab kept the Display tab pristine and avoided risk to the visualizer plugin pref injection. Feel free to move it back if you have a layout approach in mind.
  • Namespaced preferences: All new prefs are namespaced under mouse.* keys; the existing default.bezelColor is no longer read by the mouse visualizer (its color is now mouse.effectColor1). I didn't add a migration — fresh installs get the new opaque defaults, existing users keep their bezel color for keystrokes and pick a new mouse color on first visit.
  • Programmatic UI: UI is built programmatically rather than in MainMenu.nib so the binary nib stays untouched. Easier to review as text; downside is it's not editable in Interface Builder.
  • Tests: No new tests. The existing KCMouseEventVisualizerTests still pass.

Commit

Full technical breakdown is in the single commit message — file-by-file walkthrough of methods touched, KVO wiring, droplet anchor-point fix, etc. Worth reading before reviewing the diff.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/keycastr/keycastr/pull/344 **Author:** [@prossm](https://github.com/prossm) **Created:** 4/27/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `custom-click` --- ### 📝 Commits (1) - [`40399cc`](https://github.com/keycastr/keycastr/commit/40399ccda5f80c0eabf75317b810275c8abd3f97) Add customizable mouse-click effects with new "Mouse" preferences tab ### 📊 Changes **6 files changed** (+648 additions, -85 deletions) <details> <summary>View changed files</summary> 📝 `keycastr/KCAppController.h` (+5 -0) 📝 `keycastr/KCAppController.m` (+13 -0) 📝 `keycastr/KCMouseEventVisualizer.h` (+13 -1) 📝 `keycastr/KCMouseEventVisualizer.m` (+346 -82) 📝 `keycastr/KCPrefsWindowController.h` (+4 -0) 📝 `keycastr/KCPrefsWindowController.m` (+267 -2) </details> ### 📄 Description Hi! KeyCastr user here, first contribution. I built this for my own use and figured I'd offer it upstream. Feel free to incorporate it, or not as you see fit. Full transparency: I did use a coding agent for the work, but it's fully functional. ## What this adds A new "Mouse" preferences tab with four mouse-click visual effects (Halo, Blur, Halo + Blur, Droplet) and per-effect customization for color, density, diameter, and duration. The original Halo behavior is preserved as the default, just with its color decoupled from the keystroke bezel color. **Demo:** https://www.loom.com/share/1a43df69bfbf4ce09d79115e62cc0696 ## Design notes worth flagging for review - **Added as a separate prefs tab rather than extending the Display tab:** I tried three approaches to graft the controls onto Display and each one collided with the existing tab's autoresize-mask layout — a new tab kept the Display tab pristine and avoided risk to the visualizer plugin pref injection. Feel free to move it back if you have a layout approach in mind. - **Namespaced preferences:** All new prefs are namespaced under `mouse.*` keys; the existing `default.bezelColor` is no longer read by the mouse visualizer (its color is now `mouse.effectColor1`). I didn't add a migration — fresh installs get the new opaque defaults, existing users keep their bezel color for keystrokes and pick a new mouse color on first visit. - **Programmatic UI:** UI is built programmatically rather than in `MainMenu.nib` so the binary nib stays untouched. Easier to review as text; downside is it's not editable in Interface Builder. - **Tests:** No new tests. The existing `KCMouseEventVisualizerTests` still pass. ## Commit Full technical breakdown is in the single commit message — file-by-file walkthrough of methods touched, KVO wiring, droplet anchor-point fix, etc. Worth reading before reviewing the diff. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
gitea-mirror added the
pull-request
label 2026-05-05 05:13:42 -06:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: github-starred/keycastr#343
No description provided.