Module effects_ui

Source
Expand description

Effects panel. Top: the CATALOGUE as a thumbnail grid — one ~96x54 card per EffectKind showing the effect applied to a stock image with its name underneath, grouped by EffectKind::category() under collapsible headers, with a search box. Thumbnails arrive through set_thumbnail(kind, id, size), which the app calls after rendering them on the GPU; without a GL context a card still shows its name on a neutral tile (never blank) — an effect with EffectKind::applies_to_audio() instead gets a solid green tile with a music-note glyph, since it has no picture to render. The catalogue is filtered to what the first selected clip can use (audio clip -> audio effects only, and vice versa); with nothing selected it shows everything. Clicking a card adds the effect to every eligible selected clip, right-clicking opens its quick actions (selected clips / every clip on the track), and only a deliberate press-and-move makes it a DragPayload::Effect drag source (ui::drag_source). Below: the FIRST selected clip’s effect stack, in order: for each effect a header row (enabled checkbox, name, mask button, “Edit shader…” for a custom shader, copy/paste params, painted reorder and remove buttons) and its parameters from effect.specs(): a “From … for …” row giving the effect a window inside the clip (0 length = to the end of it, so an effect covers the whole clip until the user says otherwise), then label + DragValue (range from ParamSpec, speed ≈ (max-min)/200) — or a CHECKBOX when EffectKind::is_bool_param — + a diamond keyframe toggle at clip-local playhead time (Animated::toggle_key / set_at, highlighted when a key exists) + a button to clear them. Tint shows a colour button bound to R/G/B as well. An effect with a mask gets the inspector’s mask grid inline (shape / position / radius / feather / invert …) plus a delete button. A clip that renders from a REAL node graph (Clip::uses_graph) greys the stack out — the graph is what the renderer evaluates, so stack edits would be invisible — and offers “Unlink” to get back to the list. Every change → undo once per gesture (same edit_start rule as the inspector).

Structs§

EffectsResponse

Enums§

Scope 🔒
Which clips a catalogue pick lands on: a click (and the first menu entry) means the selection, the card’s quick-action menu can widen it to the whole track the selection sits on.

Constants§

CARD
Card size of one catalogue thumbnail (the name is drawn under it).
PARAM_CLIP 🔒
One effect’s parameters on the panel’s private clipboard (Copy / Paste on the stack rows).
PENDING_MOTION 🔒
THUMBS 🔒
GPU-rendered catalogue thumbnails, uploaded by the app (empty without a GL context).

Functions§

catalogue 🔒
The catalogue grid: search box + collapsible category sections of thumbnail cards, filtered to what the selected clip (audio) can use. Returns the effect a card click or quick-action menu asked for.
categories 🔒
Catalogue categories in EffectKind::ALL order (first appearance wins), so the grid is stable.
clear_thumbnails
Drop every catalogue thumbnail (stock image changed / GL context lost).
effect_card 🔒
One catalogue card: the thumbnail (or a neutral named tile, or a green tile + note for an audio effect) with the effect name underneath. A plain clickable / right-clickable widget that only becomes a DragPayload::Effect source on a deliberate drag (ui::drag_source).
fits_selection 🔒
Whether kind belongs in the catalogue for the selected clip: audio is the first selected clip’s “is it an audio clip” (None = nothing selected, so nothing is filtered out).
key_buttons 🔒
matches 🔒
set_thumbnail
The app hands a rendered catalogue thumbnail to the panel (texture must stay alive while shown).
show
take_pending_motion
A motion preset captured via “Save as motion preset…” waiting for the app to store it in Settings.
thumbnail 🔒
thumbnail_count
How many thumbnails the panel currently holds.
wobble_suffix 🔒
Unit suffix for a wobble parameter.