Commit Graph
3290 Commits
Author SHA1 Message Date
Mike-Solar a934be5bc6 platform: PathPromptOptions.allowed_extensions; Linux portal glob filter
The system file pickers can restrict the choosable files to the
extensions the host wants (project import: .ove/.otio/.fcpxml;
export: the chosen format). Linux's ashpd OpenFileRequest applies a
FileFilter of glob patterns per extension; empty = no restriction.
2026-09-02 12:00:23 +08:00
Mike-Solar 209c593da6 timeline: multicam clip special overlay (accent border + corner badge), ClipData::is_multicam flag 2026-09-01 20:27:49 +08:00
Mike-Solar 41dac8f33e platform: declare the window content colorspace to the OS
WindowContentColorspace (primaries x transfer) + set_content_colorspace:
Wayland rebuilds the color-management-v1 image description per spec
(P3/BT.2020 primaries, PQ/HLG transfer with luminances), macOS tags the
Metal layer with the matching CGColorSpace (incl. BT.2100 PQ/HLG),
Windows records it (ACM only honors sRGB). Also: warn when the wgpu
surface fallback would pick an sRGB-suffixed format (double encoding),
share the surface-params uniform across 256 slots (multiple viewers per
frame), and cfg-gate the viewer's GPU-texture source for macOS/Windows.
2026-08-29 00:24:00 +08:00
Mike-Solar 4ed8b2bf76 gpui: anchored popups block clicks from reaching the layers below
Anchored elements now insert a BlockMouse hitbox over their final
bounds during prepaint (after snap/switch adjustment, before children),
so menus, dropdowns and popups no longer let clicks fall through to
the UI they cover; clicks outside the popup still reach the background
so click-away-to-close keeps working.
2026-08-27 20:35:25 +08:00
Mike-Solar 0b4329e50e timeline: I-beam cursor for the blade (razor) tool 2026-08-27 19:08:41 +08:00
Mike-Solar 31f3838c52 timeline: editing tools (razor/ripple/slip/roll/slide/zoom/track-select)
TimelineTool state on the view with per-tool event emission:
ClipSplitRequested, ClipRippleTrimRequested, ClipRollRequested,
ClipSlideRequested and ClipSlipRequested, plus cursor and interaction
gating per active tool.
2026-08-27 17:59:27 +08:00
Mike-Solar 50f78b57c8 effect stack: scroll vertically when cards overflow the panel 2026-08-27 17:32:48 +08:00
Mike-Solar 30aa052ca6 timeline: keep scrolled content out of the track-headers column
- The ruler's canvas does not self-clip in gpui, so scrolled tick labels
  painted over the header spacer/column; the ruler strip now has
  overflow_hidden.
- The playhead was a row-level absolute child painted after the headers,
  so it drew over them when scrolled off the left edge; it now lives
  inside the clip area (clipped by the area's left edge) and still
  paints above the clips.
2026-08-25 02:51:42 +08:00
Mike-Solar 3325521a85 feat(effect_stack,timeline,node_graph): library drag-drop, params view caching, clip click select
- effect_stack: the params view is cached per effect (recreation per
  render killed in-progress slider drags and clicks); new
  LibraryEffectDrag payload + AddTypeRequested event let an effect
  dragged from the app's effect library drop onto the stack at the
  indicator position
- timeline: left-press selects clips (plain press selects an
  unselected clip, keeps multi-selection on a selected one for group
  drags, Ctrl/Cmd toggles membership)
- node_graph: graph_position_at() converts a window-space point (drop
  position) to graph space
2026-08-20 23:45:22 +08:00
Mike-Solar 8a0b7569a3 fix(widgets): menu hover occlusion and popup placement, clip selection shading
- Menu popups (menu bar, context menus, submenus) now occlude hover
  beneath them via a BlockMouse hitbox, so items under an open popup no
  longer stay highlighted.
- Menu bar dropdowns anchor to the opened title's bottom-left (local
  anchoring) instead of the raw pointer position plus a fixed offset;
  submenus are absolute children of the popup with separator-aware row
  alignment.
- Selected timeline clips render one luma notch darker so the
  selection is visible against the green clip body.
2026-08-20 18:56:01 +08:00
Mike-Solar dea33c713f style: professional dark theme refresh aligned with the design spec
- oak theme palette to a denser professional dark (near-black base,
  container/window surfaces, subtler secondary text).
- Dock tabs: selected tab solid accent with white text, hairline
  separators between panels.
- Timeline: green clip blocks, blue playhead, neutral track headers,
  brighter ruler labels, deep-green waveforms.
- Viewer: green timecode readout, solid-accent play button, chip-style
  fit/safe-margin buttons.
- Effect stack cards and node cards get rounded borders; spinbox
  values in amber per the design.
2026-08-20 17:43:44 +08:00
Mike-Solar 3870d6da06 feat(node_graph,effect_stack): programmatic selection and card selection events
NodeGraphView::set_selection selects nodes programmatically (emitting
SelectionChanged); EffectStackDataSource::selected_effect highlights
the chosen card and EffectStackEvent::CardSelected reports card clicks
— the two-way clip/node selection sync between the timeline, node
editor and inspector.
2026-08-20 17:08:25 +08:00
Mike-Solar f7a00fdd91 feat(dock,timeline): visible tab close buttons, tear-off windows, clip drag ghost, explorer thumbnails
- Tab close buttons are now visible and right-aligned with a hover
  background (they were nearly invisible, causing accidental panel
  closes).
- Tear-off: dragging a tab outside the dock opens the panel in its own
  floating window; closing the window re-docks the panel to its last
  group (or closes it outright from the Window menu).
- Timeline clip dragging shows a translucent ghost at the target track
  and frame, including cross-track moves.
- Project explorer icon view renders real thumbnail images when the
  engine provides them, with debug selectors and a structural test.
2026-08-20 16:20:49 +08:00
Mike-Solar 050d5ba22d feat(widgets): right-click context-menu events for timeline, node graph, explorer
TimelineView emits ContextMenuRequested with hit target (clip/empty/
track head/ruler marker), NodeGraphView emits it for nodes and the
background, and ProjectExplorer emits it for entries and blank areas,
so the app can open context menus aligned with the C++ version.
2026-08-18 17:14:37 +08:00
Mike-Solar 6f75d3c92a fix(dock): split divider drag resizes smoothly instead of jumping
The handle mixed the hitbox-local drag origin with window-space
drag-move positions, so the first move snapped the ratio to a clamp
boundary (a panel suddenly grew and further drags did nothing). Drags
are now incremental window-space deltas applied to the freshly-read
ratio; drag-move routing is filtered to the owning split container so
nested splits no longer double-apply with wrong geometry; pair extent
excludes the divider itself so the boundary tracks the pointer 1:1.
2026-08-18 12:41:12 +08:00
Mike-Solar 447353ebbd fix(gpui): node cards scale with zoom; explorer icon grid shows thumbnails
- node_graph: card geometry stays graph-space; paint/hit-test/wire
  endpoints scale by zoom so nodes no longer overlap at zoom != 1
- project_explorer: icon grid aligns items to start (no full-height
  selection stretch), loads thumbnails from filesystem paths and
  observes the data source for late arrivals
2026-08-18 12:41:04 +08:00
Mike-Solar 27c6c393c3 feat(gpui): track-header toggle targets + explorer icon buttons 2026-08-17 01:37:31 +08:00
Mike-Solar 819029e876 fix(dock): panel drag reorders the layout
The strip handed the drag to the dock area via cx.emit, which is
deferred — the dock's drag state was created a dispatch too late, so
the hovered target was never recorded and drops were no-ops. The dock
area now lazily begins the drag in its own capture-phase handler;
drops onto the root edge from the panel's own group split the tree
instead of being swallowed as self-drops.
2026-08-16 19:46:05 +08:00
Mike-Solar c1fc52c654 feat: explorer icons show root-level footage; footage drag source; timeline layout constants public 2026-08-16 19:07:33 +08:00
Mike-Solar 6162b2fc50 feat(gpui): ruler markers + work-area drag reshape 2026-08-16 16:06:19 +08:00
Mike-Solar fc0420ddd8 feat(gpui): content-width dock tabs, rounded timeline clips 2026-08-13 23:37:57 +08:00
Mike-Solar 888c39bf27 feat(gpui_widgets): menu scrubbing, content-width popups, density pass
- MenuBar: hover another title with a menu open to switch (scrubbing)
- menu popup width computed from the longest label; ROW_HEIGHT 22
- dock tab bar 26px / smaller tab text; viewer transport tightened
2026-08-13 18:16:10 +08:00
Mike-Solar af5482d774 style: cargo fmt with the workspace tab policy (hard_tabs)
Whitespace only; the fork has no own rustfmt.toml so the Oak root
policy applies.
2026-08-11 23:06:13 +08:00
Mike-Solar 49e471ae64 feat(gpui, gpui_widgets): i18n string-table hook + node-graph fit API
- gpui::i18n: minimal string-table override (set_table/tr/clear_table) with
  built-in defaults; effect-stack and viewer strings now go through it so
  hosts can localize widget-baked labels without a full i18n framework.
- gpui_widgets::i18n re-exports the hook (gpui_widgets::i18n::set_table).
- node_graph: GraphViewState::fit_to_rect for fit-window/initial viewports
  (unit tested); NodeGraphView::viewport_size accessor for fit targets.
2026-08-10 16:52:39 +08:00
Mike-Solar 16ae7c42df gpui_widgets defect fixes: menu checkmarks, dock ratios, meter orientation, CPU frames, drop-frame timecode
- menu: add runtime set-checked path (MenuItem::set_checked/clear_checked,
  Menu::set_item_checked recursive, MenuBar::set_item_checked)
- dock: Split now stores per-child ratios (sum 1.0) so 3+ panels on one
  axis keep distinct sizes; resize_split_child adjusts a single boundary,
  resize_split keeps its two-arg whole-share semantics; one handle per
  boundary; DockLayoutState VERSION bumped to 2 for the new ratios field
- audio_meter: MeterOrientation::Vertical for the 26px transport strip,
  segments lit bottom to top
- viewer: ViewerFrameSource::CpuFrame + set_cpu_frame (BGRA8 RenderImage
  via the sprite atlas) for platforms without CVPixelBuffer
- timeline: TimeDisplay::TimecodeDropFrame (SMPTE drop-frame for NTSC
  rates, non-drop fallback otherwise)
- gpui_widgets: regression test pinning the fractional spacing helpers
  (py_0p5/py_1p5/py_2p5/py_3p5 already exist; no _0_5 aliases added)
2026-08-10 05:45:53 +08:00
Mike-Solar 47c6126d0c feat(gpui): add track selection and transition-resize gestures to timeline
W5 timeline supplements: clicking a track header toggles the track in a
selected_tracks set and emits TimelineEvent::TrackSelected; clips with in/out
transitions get a resize handle at the wedge edge that emits
TimelineEvent::TransitionChanged with the clamped new length (delta-scaled
by zoom). Both follow the request-only contract. 182 gpui tests pass.
2026-08-09 06:22:15 +08:00
Mike-Solar ad7c965c5a feat(gpui): add dock, effect stack, node graph, and timeline widgets
Implements four workspace widget modules with accompanying learn examples:

- dock: dockable panel layout system (tabs, splits, drag-to-dock) with
  serde-based persistence via PanelRegistry / DockLayoutState
- effect_stack: linear effect-stack inspector widget
- node_graph: node-graph editor (nodes, ports, wires, pan/zoom canvas)
- timeline: video-editing timeline (tracks, clips, ruler, playhead)

Timeline snapping prefers the earlier frame when two snap points are
equally close, with SnapKind priority breaking same-frame ties.
2026-08-09 03:31:06 +08:00
Max Carter 祁明思 6043651563 Add letter spacing and text transforms to GPUI (#111)
* Add text spacing and transform style plumbing

* Apply byte-stable transforms and spacing-aware truncation

* Add platform letter spacing support

* Fix scheduler clippy warning

* Refresh dependency lockfile

* Fix CI for text spacing changes

* Add text transform preview example
2026-08-07 21:48:02 -07:00
Brendon Felix 568271c01c feat(macos): support haptic feedback (#71)
* Support haptic feedback on macOS

* add tests for haptic feedback
2026-08-04 14:52:28 -07:00
Dustin Yost 2542e1154a add App::emit such that events can be emitted without acquiring a Context (#94) 2026-07-27 23:16:59 -07:00
Miles Wirht 6c799b8e99 removed all of the git sources (#91) 2026-07-13 21:25:00 -04:00
temportalflux 309d319880 remove legacy input example now that gpui_elements::editable_text exists 2026-07-12 17:44:06 -04:00
temportalflux 6ecdda92d0 add Point::is_nearly_eq 2026-07-11 09:31:07 -04:00
temportalflux cfc9f6fab1 update documentation of 'use_keyed_transition', 'use_keyed_state', & 'with_element_state' to make it clear that the functions can be called during 'render' implementations, as 'examples/learn/transition.rs' illustrates 2026-07-11 09:31:07 -04:00
temportalflux f4cb5e21b7 add getter/setter to interface with the current scroll offset of interactivity 2026-07-11 09:31:07 -04:00
temportalflux 1f2c11d44f move TextLayout::layout logic into standalone functions so they can be shared between labels and editable text elements 2026-07-11 09:31:07 -04:00
temportalflux b1e67f32af change shape_text api to support non-SharedString types as input without forcing extra allocations 2026-07-11 09:31:07 -04:00
Leonard Seibold c17b4367d5 gpui: Add gpu_device_lost() to query device-loss state on Linux (#78) 2026-06-22 23:15:54 -04:00
Philipp Schaffrath 0610782953 Wayland input_region and exclusive_zone + WGPU panic fix (#82) 2026-06-22 21:59:02 -04:00
Miles Wirht c6634f040a Discord community permalink (#73) 2026-06-17 13:28:53 -04:00
Miles Wirht ad7be1c090 Docs (#72) 2026-06-17 13:06:39 -04:00
Andreas Johansson 3cc78b38f4 Add set_keyring_label (#64) 2026-06-15 18:46:45 -04:00
Miles Wirht ec395ac14c My stab at CI (#66) 2026-06-15 18:42:57 -04:00
Miles Wirht bf71c690a3 Utopian CI setup phase 2: Better HTTP abstractions (#61) 2026-06-14 21:58:25 -04:00
Miles Wirht 64318f59f3 A utopian CI setup part one: General build fixes (#60) 2026-06-14 21:58:12 -04:00
Leonard SeiboldandNewspicel 69d467e4d1 Filter API + Blur (#40)
Co-authored-by: Newspicel <newspicel+claude@pm.me>
2026-06-14 10:18:25 -04:00
Brendon Felix cfec5ff014 Add Transition::jump_to for transitions (#58) 2026-06-13 22:52:08 -04:00
Xemor 59f5ca2b05 Fix compilation on Linux - add & to .field (#57) 2026-06-13 16:04:59 -04:00
Scar-00 290010344b fix surface compiler error on windows (#46) 2026-06-09 17:53:14 -04:00
Dustin Yost 1b410c1783 Add a collection of contextless action keystrokes that can be built with a shared key context (#43) 2026-06-07 17:42:58 -04:00