Skip to content

feat: add cursor styles, click ripples, and GPUI frame controls - #2156

Merged
richiemcilroy merged 10 commits into
mainfrom
codex/cursor-styles-and-frame-controls
Aug 28, 2026
Merged

feat: add cursor styles, click ripples, and GPUI frame controls#2156
richiemcilroy merged 10 commits into
mainfrom
codex/cursor-styles-and-frame-controls

Conversation

@richiemcilroy

@richiemcilroy richiemcilroy commented Aug 28, 2026

Copy link
Copy Markdown
Member

Adds macOS, Tahoe, Windows, and circle cursor controls to both desktop editors, with configurable click ripples in the shared renderer and backward-compatible project settings.

Adds GPUI window/device frame controls, fixes Space-key playback when controls have focus, and lets the renderer CLI capture a chosen timeline position.

Validated Rust formatting, scoped Biome checks, desktop TypeScript, and native compilation of cap-cursor-info, cap-project, and cap-rendering using the GPUI workspace. Added four click-ripple regression tests covering cursor freeze, timing, visibility, and bounded instances. Native tests and the existing Tauri binding-export test could not complete locally because executable startup stalled; those jobs were stopped. Native Windows/Linux interaction testing has not been performed. Remaining CI jobs are still running.

Greptile Summary

The PR adds selectable cursor styles, configurable click ripples, GPUI frame controls, improved focused-control playback handling, and timeline-position capture support.

  • Extends the shared project configuration and desktop controls with backward-compatible cursor and ripple settings.
  • Adds renderer support and regression coverage for bounded, correctly timed click ripples that remain aligned with frozen cursors.
  • Adds native GPUI frame selection, theme, URL, and title controls.
  • Extends the renderer CLI to capture a selected timeline position.

Confidence Score: 5/5

The PR appears safe to merge because no blocking failure remains in the previously reviewed areas.

No blocking failure remains.

Important Files Changed

Filename Overview
crates/rendering/src/lib.rs Integrates click-ripple collection and rendering while consistently clamping ripple and cursor interpolation to the configured freeze time.
crates/rendering/src/layers/click_ripple.rs Adds the bounded click-ripple GPU layer and instance data used by preview and export rendering.
crates/project/src/configuration.rs Adds backward-compatible cursor family and ripple configuration fields shared by both editors and the renderer.
apps/desktop/src/utils/tauri.ts Keeps the generated frontend declarations aligned with the authoritative Rust cursor configuration types.
apps/desktop-gpui/src/editor_sidebar/cursor.rs Adds native cursor-style and ripple controls, with the earlier narrative-comment concern resolved.
apps/desktop-gpui/src/editor_window/frame.rs Adds GPUI frame style, theme, URL, and title controls with project-history integration.

Reviews (3): Last reviewed commit: "chore: trim narrative comments from curs..." | Re-trigger Greptile

Context used (3)

@richiemcilroy

Copy link
Copy Markdown
Member Author

hey @greptileai, please re-review the PR

Comment thread crates/rendering/src/lib.rs Outdated
Comment on lines +918 to +921
export type CursorConfiguration = { hide: boolean; hideWhenIdle: boolean; hideWhenIdleDelay: number; size: number; type: CursorType; animationStyle: CursorAnimationStyle; tension: number; mass: number; friction: number; raw: boolean; motionBlur: number; useSvg: boolean; rotationAmount?: number; baseRotation?: number; clickSpring?: ClickSpringConfig | null; stopMovementInLastSeconds?: number | null; ripple?: CursorRippleConfig }
export type CursorMeta = { imagePath: string; hotspot: XY<number>; shape?: string | null }
export type CursorType = "auto" | "pointer" | "circle"
export type CursorRippleConfig = { enabled: boolean; color: [number, number, number]; strength: number; size: number; duration: number }
export type CursorType = "auto" | "pointer" | "circle" | "macos" | "tahoe" | "windows"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Generated bindings edited directly

These declarations directly modify a generated tauri.ts file, contrary to the repository requirement that binding changes come from the authoritative generator. Regeneration can overwrite manual declarations and obscure whether the Rust binding source remains aligned.

Context Used: AGENTS.md (source)

Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/desktop/src/utils/tauri.ts
Line: 918-921

Comment:
**Generated bindings edited directly**

These declarations directly modify a generated `tauri.ts` file, contrary to the repository requirement that binding changes come from the authoritative generator. Regeneration can overwrite manual declarations and obscure whether the Rust binding source remains aligned.

**Context Used:** AGENTS.md ([source](https://github.com/capsoftware/cap/blob/main/AGENTS.md))

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Comment thread apps/desktop-gpui/src/editor_sidebar/cursor.rs Outdated
@richiemcilroy

Copy link
Copy Markdown
Member Author

hey @greptileai, please re-review the PR

@superagent-security

Copy link
Copy Markdown

Manage your Superagent protection

Superagent has paused scans for this repository because this unlinked GitHub App installation has used all three included PR scans.

You have 0 of 3 included PR scans remaining.

Create a free account to continue protection, manage scan settings, review security history, and control which repositories are protected.

@richiemcilroy
richiemcilroy merged commit 9f6d8dd into main Aug 28, 2026
27 checks passed
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