Skip to content

feat(web): add configurable pointer-follow glow - #1743

Merged
bobleer merged 11 commits into
GCWing:mainfrom
bobleer:bob/mouse-follow-glow
Jul 24, 2026
Merged

feat(web): add configurable pointer-follow glow#1743
bobleer merged 11 commits into
GCWing:mainfrom
bobleer:bob/mouse-follow-glow

Conversation

@bobleer

@bobleer bobleer commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add a default-on pointer-follow glow option under Appearance settings.
  • Apply the glow globally to explicit and semantic card, panel, dialog, modal, frame, and bordered surfaces.
  • Adapt glow contrast for dark and light themes and disable motion when reduced-motion is requested.
  • Add localized copy for English, Simplified Chinese, and Traditional Chinese.

Type and Areas

Type: Feature / UI/UX

Areas: Web UI, settings, themes, i18n

Motivation / Impact

Provides optional pointer feedback across interface surfaces instead of limiting the effect to the settings page. The preference is persisted locally, defaults to enabled, and light-theme colors use a higher-contrast indigo treatment for visibility.

Verification

  • pnpm run type-check:web — passed
  • pnpm --dir src/web-ui run test:run src/infrastructure/mouse-glow/core/MouseGlowService.test.ts — 5 tests passed
  • pnpm run i18n:audit — passed with 0 warnings
  • pnpm run theme:color-audit:all — passed
  • git diff --check — passed

Reviewer Notes

The effect uses a single pointer-events-free overlay and requestAnimationFrame-throttled surface detection. Existing theme tokens are used; no new dependency or color literal was added.

Checklist

  • This PR is focused and does not include secrets, temporary prompts, generated scratch files, or unrelated artifacts.
  • Relevant verification is recorded above, or skipped checks are explained.
  • User-facing strings, docs, and locales are updated where applicable.

@bobleer
bobleer merged commit 1ec2213 into GCWing:main Jul 24, 2026
5 checks passed
wsp1911 added a commit to wsp1911/BitFun that referenced this pull request Jul 27, 2026
MouseGlowService measured every composed-path ancestor while resolving a
glow surface, potentially forcing two synchronous layouts per element.
It then measured the selected surface and ordinary stacking host again.

This could enter Blink flex layout repeatedly while session content was
mounting, eventually causing a WebView2 STATUS_ACCESS_VIOLATION.

Detect candidates from styles and semantics, measure only the selected
surface, and keep normal overlays fixed under document.body. Preserve
local positioning for actual floating layers and reuse an existing rect
when the floating surface is its own host.

The regression originated in 1ec2213 (GCWing#1743).
wsp1911 added a commit that referenced this pull request Jul 27, 2026
MouseGlowService measured every composed-path ancestor while resolving a
glow surface, potentially forcing two synchronous layouts per element.
It then measured the selected surface and ordinary stacking host again.

This could enter Blink flex layout repeatedly while session content was
mounting, eventually causing a WebView2 STATUS_ACCESS_VIOLATION.

Detect candidates from styles and semantics, measure only the selected
surface, and keep normal overlays fixed under document.body. Preserve
local positioning for actual floating layers and reuse an existing rect
when the floating surface is its own host.

The regression originated in 1ec2213 (#1743).
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