Site navigation

Touch, pen, keyboard, and trackpad

Varve has one input model across laptop and tablet: pointer events are normalized once, screen-space thresholds stay in CSS pixels, and every gesture has a non-gesture alternative. This page covers what is implemented, what is regression-tested with emulated devices, and what still requires a physical Chromebook.

Laptop and tablet workflows

  • Keyboard and trackpad: use the browser's normal keyboard and pointer routes when those devices are available. Varve does not detect whether a detachable keyboard is attached.
  • Workspace layout: Appearance settings and View > Workspace layout offer Automatic, Tablet, and Desktop. Automatic responds to the available CSS width and reported touch capabilities; it does not listen for a ChromeOS hinge or keyboard-attachment signal. The preference is independent of Drawing Input and density.
  • Panel behavior: tablet presentation keeps a compact Inspector available without blocking the canvas; Layers and Resources open as dismissible drawers. Portrait uses a lower Inspector pane, and landscape reserves a side rail. Detailed Inspector editing can expand into a modal surface.
  • Keyboardless editing: the toolbar's Editing controls popover offers latched Constrain, From centre, and Bypass snap modifiers, one-shot deep selection, Duplicate, alignment, and layer-order actions. Appearance settings can mirror panel launchers for alternate reach.
  • Back navigation: when browser Back reaches Varve's same-page dismissal entry, the topmost eligible dialog or menu closes first. ChromeOS owns edge-swipe gestures, so this browser-emulated behavior does not certify physical gesture dispatch.
  • Split screen: the layout reflows to the available pane width instead of forcing a desktop minimum width.

Touch gestures

ActionGestureAlternative
Use the active toolOne finger drag by default; switch to one-finger viewport navigation in Settings > Drawing inputKeyboard shortcuts, command palette, or the Hand tool
Pan the canvasTwo-finger dragHand tool, trackpad two-finger scroll, scrollbars/space-drag where available
ZoomTwo-finger pinchStatus-bar zoom field, View menu, keyboard zoom, Zoom tool
Recover from a second contactThe first provisional tool contact is cancelled for that pointer; both contacts become navigation-ownedLift both fingers and start a fresh drawing contact
Move or resizeDrag a selection or handleArrow-key nudge, Inspector position/size fields
Context actionsLong-press (about 0.5 s) for the deep-selection menuRight-click / two-finger tap with a trackpad or mouse
Multi-selectEnable the touch multi-select toggle, then marqueeShift/⌘-click with a pointer, Select menu

The drag threshold is 3 CSS pixels and does not scale with zoom, so a firm tap never nudges a shape and a deliberate drag never needs exaggerated travel. Page pinch-zoom is disabled over the canvas only; browser zoom stays available everywhere else.

The standard wheel policy pans with a plain wheel and zooms with Ctrl/Cmd+wheel. Settings > Drawing input provides a reversible pan/zoom override, sensitivity, and optional detented-mouse continuation; trackpad and ambiguous momentum remain direct-only.

Drawing input settings

Open Settings > Drawing input to choose whether one-finger touch follows the active tool or navigates the viewport. The setting is local, reversible, and also applies when a WebView reports a custom or empty pointer type; Varve does not strand the canvas in a pen-only mode. Two-finger navigation always takes ownership without calling global Undo, creating history entries, or allowing the remaining finger to resume a stroke unexpectedly.

The same panel enables pressure interpretation and adjusts its curve. If a runtime or device does not provide useful pressure data, brushes remain usable with constant width/opacity. A default 0.5 sample is not treated as proof that a pen has a pressure sensor. Predicted samples can improve a transient preview, but are never saved, exported, or added to Undo history.

Pen

  • Pressure: stylus input is normalized with Pointer Events; a stylus that reports useful pressure passes it through to brushes. When pressure is unavailable or disabled, brushes use a stable constant response rather than becoming unusable.
  • Tilt and twist: the event model carries tiltX/tiltY, twist, and altitude/azimuth where the hardware reports them. Whether the USI Pen 2 reports any of these in Chrome is unmeasured.
  • Eraser end and barrel button: event state is preserved where the runtime exposes it, but behavior on the Lenovo USI Pen 2 is not verified on real hardware. If your pen's eraser or button does not behave as expected, report it with the device model and route.
  • Palm rejection and hover: left to ChromeOS and the digitizer; Varve does not synthesize or override them, and they are unverified.
  • Drawing: pressure sensitivity applies to brush tools; vector tools always place document-space geometry regardless of pressure.

Virtual keyboard

Varve uses the VirtualKeyboard API when it provides keyboard bounds and the VisualViewport dimensions and offsets as a fallback. Bottom-docked keyboard space lifts reachable floating controls; visible-viewport bounds also constrain menus and dialogs. A floating keyboard does not reserve its whole height as a bottom inset. Real operating-system keyboard geometry still needs device validation.

If a specific field is still covered, dismiss and refocus it so the operating system scrolls it back into view. Text editing never depends on keyboard detection: a hardware keyboard or an external one always works.

Keyboard and ChromeOS conflicts

ChromeOS reserves some combinations before a web page sees them. The important ones for Varve:

  • Ctrl+1…8 switches browser tabs, and Ctrl+T/W/N manage tabs and windows.
  • Ctrl+Shift++/-/0 changes the screen resolution, and Alt+=/- maximizes/minimizes windows.
  • Ctrl+Shift+B toggles the bookmarks bar. Three-finger swipes are OS tab/overview gestures, and two-finger tap or Alt+click is right-click.

No essential Varve action is reachable only through an OS-reserved combination: workspace switching uses Ctrl+Shift+1…6 in the order shown by the switcher tabs; modes in its overflow menu retain full shortcut labels. Logo Tools uses Ctrl+Shift+7; the shared Code panel uses Ctrl+Shift+8, and the existingCtrl+Shift+J shortcut toggles that same panel. Zoom is available from the status bar, menus, and keyboard. The full list is in Keyboard Shortcuts.

On French and English Chromebook keyboards the zoom keys are matched by physical key position, so they behave the same on both layouts. Dead keys, AltGr combinations, and accent composition with the detachable keyboard have not been verified on a device; if a composition fails, report it with the layout name.

Trackpad

  • Two-finger scroll pans the canvas; a trackpad pinch zooms it. Page zoom is not triggered over the canvas.
  • Momentum scrolling does not double-apply; the gesture classifier distinguishes detented and high-resolution wheels.
  • Tap-to-click, two-finger tap (right-click), and the clickpad's physical click all work; three- and four-finger swipes stay with ChromeOS.

Runtime routes

RouteWhat this guide coversWhat still needs device evidence
Chrome browserPointer ownership, touch controls, local persistence, and browser zoom/shortcut boundariesPhysical USI pressure, palm rejection, hover, and exact ChromeOS dispatch
Installed web app/PWAThe same web input contract in its installed window, subject to the active Chromium versionInstall-specific update/reload and device behavior
Linux desktop in ChromeOSSeparate Tauri/WebKitGTK route with its own native file permissions and rendererARM64 package availability, WebKitGTK pointer capabilities, multitouch, pressure, and Crostini scaling

A successful browser test or Linux launch does not certify the other route. The Linux application uses the system WebKitGTK webview rather than Chrome, so pressure and multitouch must be checked separately. Varve does not advertise an Android app as a substitute for either route.

Accessibility

  • Target size: the project targets 44 CSS px for primary controls on coarse pointers and holds the WCAG 2.2 AA minimum of 24×24 CSS px (or the spacing exception) for dense chrome. The requirement is independent of zoom.
  • No gesture-only actions: every drag and multipoint gesture has a single-pointer or keyboard equivalent, per WCAG 2.5.1 and 2.5.7.
  • Keyboard: panels and dialogs trap focus, return it on close, and close on Esc. The skip link and landmarks are present.
  • Screen readers: ChromeVox works in native Chrome. Google documents ChromeVox as supported only for the Terminal inside the Linux environment, so the Linux-app route is not a screen-reader path.
  • Reduced motion, contrast, and forced colors: authored animations are suppressed or simplified under reduced-motion, and the interface honors high-contrast and forced-color modes. See the accessibility statement.

Search Varve