Skip to content

VoiceOver and accessibility pass #10

Description

@nftechie

Context

Snapcap should work well with VoiceOver, Full Keyboard Access and Reduce Motion. Reading the code turns up a number of concrete gaps. Each one is small, which makes this a good way to learn the app.

Where to look

  • Sources/Snapcap/Windows/RecordingPanels.swift
    • HUDButton (pause/resume, stop, start over, discard) is icon-only, with .help tooltips but no .accessibilityLabel.
    • The recording dot pulses with repeatForever even when Reduce Motion is on.
    • CountdownView isn't announced, and "Click to start now" only works with a mouse.
  • Sources/Snapcap/Views/Components.swift
    • LevelMeter exposes no value.
    • The corner-snap buttons in CameraFrameDetails are icon-only (arrow.up.left.square and similar).
    • ShapePicker already does this right, with accessibilityLabel and the .isSelected trait. Use it as the pattern.
  • Sources/Snapcap/Views/CameraBubbleView.swift: in OverlayCanvas, the bubble can only be moved and resized with a mouse drag. Add accessibility actions (move to a corner, nudge, larger or smaller) and arrow-key nudging when focused.
  • Sources/Snapcap/Views/EditorView.swift
    • The TransportBar play/pause button is icon-only.
    • The scrub slider should read as "1:23 of 4:56".
    • The trim handles are drag-only; give them adjustable actions.
  • Sources/Snapcap/Views/QuickRecordView.swift: the gear button is icon-only.
  • Sources/Snapcap/App/StatusItemController.swift: while recording, the button title is "● 1:23" or "❚❚ 1:23". Give it a spoken label such as "Snapcap, recording, 1 minute 23 seconds" or "paused".
  • Sources/Snapcap/Windows/RegionSelector.swift: region selection is mouse-only, and the instructions are drawn as pixels. At least announce the instructions and the Esc key.

Proposal

Fix the items above, then audit the setup window, HUD, editor, Recordings, Settings, onboarding and popover with Accessibility Inspector (Xcode → Open Developer Tool → Accessibility Inspector → Audit).

Acceptance criteria

  • Every icon-only control has a clear accessibility label.
  • With VoiceOver and no mouse, you can start a recording, pause and resume, stop, move the bubble to a corner, play, scrub and trim in the editor, and export.
  • The countdown is announced (NSAccessibility.post with .announcementRequested), and level meters report a value.
  • Pulsing and animated elements respect Reduce Motion (accessibilityReduceMotion).
  • The Accessibility Inspector audit shows no errors in the main windows.
  • The PR includes before-and-after notes or a short VoiceOver recording.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    good first issueGood for newcomersuxUser experience and interface polish

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions