Dot-path constants for well-known animation events. More...
Functions | |
| PHOSPHORANIMATION_EXPORT QStringList | allEventClassTokens () |
| Every event-class token, in the order the classes are declared above. | |
| PHOSPHORANIMATION_EXPORT QString | eventClassForPath (const QString &path) |
Classify path into an event class, or empty string when the path has no single class (a mixed ancestor like window, or a path outside the classified families — editor / panel / widget / cursor / shader / global). | |
| PHOSPHORANIMATION_EXPORT bool | eventPathResolvesPerWindow (const QString &path) |
True when path is resolved AGAINST A PARTICULAR WINDOW, so per-window state can reach it. | |
| PHOSPHORANIMATION_EXPORT QStringList | allBuiltInPaths () |
| Full list of built-in paths in taxonomy order. | |
| PHOSPHORANIMATION_EXPORT QString | parentPath (const QString &path) |
Walk path up one level ("window.appearance.open" -> "window.appearance" -> "window" -> "global" -> ""). | |
| PHOSPHORANIMATION_EXPORT QString | defaultShaderEffectIdForPath (const QString &path) |
Built-in default shader effect id for an event path, or empty for none. | |
Variables | |
| PHOSPHORANIMATION_EXPORT const QString | Global |
| PHOSPHORANIMATION_EXPORT const QString | Window |
| PHOSPHORANIMATION_EXPORT const QString | WindowAppearance |
| PHOSPHORANIMATION_EXPORT const QString | WindowOpen |
| PHOSPHORANIMATION_EXPORT const QString | WindowClose |
| PHOSPHORANIMATION_EXPORT const QString | WindowMinimize |
| PHOSPHORANIMATION_EXPORT const QString | WindowFocus |
| PHOSPHORANIMATION_EXPORT const QString | WindowMovement |
| PHOSPHORANIMATION_EXPORT const QString | WindowMaximize |
| PHOSPHORANIMATION_EXPORT const QString | WindowMove |
| PHOSPHORANIMATION_EXPORT const QString | WindowSnapIn |
| PHOSPHORANIMATION_EXPORT const QString | WindowSnapOut |
| PHOSPHORANIMATION_EXPORT const QString | WindowLayoutSwitch |
| PHOSPHORANIMATION_EXPORT const QString | Desktop |
| PHOSPHORANIMATION_EXPORT const QString | DesktopSwitch |
| PHOSPHORANIMATION_EXPORT const QString | DesktopPeek |
| PHOSPHORANIMATION_EXPORT const QString | Editor |
| PHOSPHORANIMATION_EXPORT const QString | EditorSnapIn |
| PHOSPHORANIMATION_EXPORT const QString | EditorSnapOut |
| PHOSPHORANIMATION_EXPORT const QString | EditorSnapResize |
| PHOSPHORANIMATION_EXPORT const QString | Scrolling |
| PHOSPHORANIMATION_EXPORT const QString | ScrollingView |
| PHOSPHORANIMATION_EXPORT const QString | ScrollingTabSwitch |
| PHOSPHORANIMATION_EXPORT const QString | Shell |
| PHOSPHORANIMATION_EXPORT const QString | ShellAppletPopup |
| PHOSPHORANIMATION_EXPORT const QString | ShellAppletPopupShow |
| PHOSPHORANIMATION_EXPORT const QString | ShellAppletPopupHide |
| PHOSPHORANIMATION_EXPORT const QString | Osd |
| PHOSPHORANIMATION_EXPORT const QString | OsdShow |
| PHOSPHORANIMATION_EXPORT const QString | OsdPop |
| PHOSPHORANIMATION_EXPORT const QString | OsdHide |
| PHOSPHORANIMATION_EXPORT const QString | Popup |
| PHOSPHORANIMATION_EXPORT const QString | PopupZoneSelector |
| PHOSPHORANIMATION_EXPORT const QString | PopupZoneSelectorShow |
| PHOSPHORANIMATION_EXPORT const QString | PopupZoneSelectorHide |
| PHOSPHORANIMATION_EXPORT const QString | PopupLayoutPicker |
| PHOSPHORANIMATION_EXPORT const QString | PopupLayoutPickerShow |
| PHOSPHORANIMATION_EXPORT const QString | PopupLayoutPickerHide |
| PHOSPHORANIMATION_EXPORT const QString | PopupSnapAssist |
| PHOSPHORANIMATION_EXPORT const QString | PopupSnapAssistShow |
| PHOSPHORANIMATION_EXPORT const QString | PopupSnapAssistHide |
| PHOSPHORANIMATION_EXPORT const QString | PopupCheatsheet |
| PHOSPHORANIMATION_EXPORT const QString | PopupCheatsheetShow |
| PHOSPHORANIMATION_EXPORT const QString | PopupCheatsheetHide |
| PHOSPHORANIMATION_EXPORT const QString | Panel |
| PHOSPHORANIMATION_EXPORT const QString | PanelSlideIn |
| PHOSPHORANIMATION_EXPORT const QString | PanelSlideOut |
| PHOSPHORANIMATION_EXPORT const QString | PanelFadeIn |
| PHOSPHORANIMATION_EXPORT const QString | PanelFadeOut |
| PHOSPHORANIMATION_EXPORT const QString | Cursor |
| PHOSPHORANIMATION_EXPORT const QString | CursorHover |
| PHOSPHORANIMATION_EXPORT const QString | CursorClick |
| PHOSPHORANIMATION_EXPORT const QString | Widget |
| PHOSPHORANIMATION_EXPORT const QString | WidgetHover |
| 150 ms OutCubic (family seed) | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetPress |
| 100 ms OutCubic | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetDim |
| 200 ms OutCubic | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetTint |
| 300 ms widget-out (family root) | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetTintFast |
| 120 ms (variant) | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetToggleOn |
| 250 ms OutBack (spring feel) | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetToggleOff |
| 250 ms OutBack | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetBadgeShow |
| 200 ms OutBack | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetBadgeHide |
| 150 ms InCubic | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetBadgePulse |
| 400 ms count-change pulse | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetAccordionExpand |
| 250 ms OutCubic | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetAccordionCollapse |
| 180 ms InCubic | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetFadeIn |
| 200 ms OutCubic | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetFadeOut |
| 400 ms InCubic | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetReorder |
| 150 ms OutCubic (family seed) | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetProgress |
| 150 ms OutCubic (family seed) | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetPulse |
| 1000 ms sinusoidal (family root) | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetPulseFast |
| 500 ms | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetPulseSlow |
| 1500 ms | |
| PHOSPHORANIMATION_EXPORT const QString | WidgetZoneHighlight |
| PHOSPHORANIMATION_EXPORT const QString | WidgetZoneHighlightPop |
| PHOSPHORANIMATION_EXPORT const QString | WidgetZoneHighlightBorder |
| PHOSPHORANIMATION_EXPORT const QString | WidgetZoneOverlayFlash |
| PHOSPHORANIMATION_EXPORT const QString | EventClassGeometry |
| Geometry transitions: snapIn/snapOut, layoutSwitch, maximize — every leg that carries an old and new rect. | |
| PHOSPHORANIMATION_EXPORT const QString | EventClassAppearance |
| Appearance transitions: open, close, minimize, focus, and every OSD / popup show/hide — a single surface materialising or dissolving. | |
| PHOSPHORANIMATION_EXPORT const QString | EventClassDesktop |
| Desktop transitions: full-screen blends of two scene captures — the virtual-desktop switch (outgoing desktop against incoming one) and the show-desktop peek (windows scene against bare desktop). | |
| PHOSPHORANIMATION_EXPORT const QString | EventClassMove |
Interactive-drag transitions: the window.movement.move leaf only. | |
| PHOSPHORANIMATION_EXPORT const QString | EventClassStrip |
Strip transitions: the scrolling strip's view leg (scrolling.view). | |
| PHOSPHORANIMATION_EXPORT const QString | EventClassTab |
Tab transitions: the swap inside a tabbed scrolling column (scrolling.tabSwitch). | |
Dot-path constants for well-known animation events.
ProfileTree::resolve() walks segments right-to-left for inheritance. Plugins add paths freely (e.g. "widget.toast.slideIn") without library changes. That is a property of the MOTION tree only. The SHADER tree admits just the paths registered in shaderConsumedLeafEventPaths() and their ancestors: pruneShaderProfileTreeToSupportedPaths runs on both read and write, so a shader override on any other path is dropped rather than kept.
Naming convention (apply to new paths): show / hide — ephemeral surfaces (osd, popup, badge) open / close — persistent surfaces with a stateful open/closed <verb>In / <verb>Out — directional motion (slideIn, snapIn, fadeIn …); switch, layoutSwitch and peek are bidirectional-leg exceptions with no In/Out suffix, and view (scrolling.view) is a continuous-motion exception with no legs to name at all expand / collapse — size reveal of inline content (accordion) on / off — bistable controls (toggle) <event>.<variant> — speed/intensity variants (pulse.fast, tint.fast)
| PHOSPHORANIMATION_EXPORT QStringList PhosphorAnimation::ProfilePaths::allBuiltInPaths | ( | ) |
Full list of built-in paths in taxonomy order.
| PHOSPHORANIMATION_EXPORT QStringList PhosphorAnimation::ProfilePaths::allEventClassTokens | ( | ) |
Every event-class token, in the order the classes are declared above.
This is the vocabulary AnimationShaderEffect::appliesTo is validated against and the one the pack validator lints and names in its diagnostic. Consume it rather than re-spelling the tokens; a hand-maintained copy is how a new class ends up accepted by one consumer and rejected by another.
| PHOSPHORANIMATION_EXPORT QString PhosphorAnimation::ProfilePaths::defaultShaderEffectIdForPath | ( | const QString & | path | ) |
Built-in default shader effect id for an event path, or empty for none.
SSOT for "what shader does this event animate with out of the box". Two families default to a shader: • Window SNAP (snap in/out, layout-switch) → "window-morph" (geometry cross-fade), run by the kwin-effect. The interactive-drag leaf (window.movement.move) carries NO default — a crossfade pack cannot drive a held drag, and the move-class packs (wobble) stay opt-in. • Overlay show/hide leaves (osd.{show,hide}, popup.{zoneSelector,layoutPicker,snapAssist,cheatsheet}.{show,hide}) → "fade" (fade-and-scale), run by the daemon SurfaceAnimator instead of its C++ opacity/scale legs. Neither the category roots (osd, popup) nor the osd.pop leaf carries a default. Every other event defaults to none. The default applies only when the user has set no override for the path or an ancestor (an explicit "None" is an override and is respected) — see resolveShaderWithDefault in ShaderProfileTree.h. Consumed by the kwin-effect resolution, the daemon overlay resolution (animation_config), and the settings UI so the default both plays at runtime and shows as the current value in settings.
| PHOSPHORANIMATION_EXPORT QString PhosphorAnimation::ProfilePaths::eventClassForPath | ( | const QString & | path | ) |
Classify path into an event class, or empty string when the path has no single class (a mixed ancestor like window, or a path outside the classified families — editor / panel / widget / cursor / shader / global).
Resolution is leaf-aware: the OSD and popup roots and all their descendants are appearance, and so are the shell root and every shell.* leaf (what sets that family apart is whose surface it is, which the isolation answers, not the pack vocabulary); the window leaves split by motion-vs-lifecycle; the window.movement.move leaf is move (held interactive drag) while the rest of the movement sub-tree is geometry; the desktop root and every desktop.* leaf are desktop; the scrolling root and scrolling.view are strip while the scrolling.tabSwitch leaf is tab (the same leaf-beats-subtree carve-out window.movement.move gets); the window root itself is mixed → empty.
| PHOSPHORANIMATION_EXPORT bool PhosphorAnimation::ProfilePaths::eventPathResolvesPerWindow | ( | const QString & | path | ) |
True when path is resolved AGAINST A PARTICULAR WINDOW, so per-window state can reach it.
The property this answers is narrow and mechanical: does the compositor reach this event holding the window it is for. Ten paths do — the four window.appearance leaves, the five window.movement leaves, and scrolling.tabSwitch. No other path in the taxonomy is, either because its subject is not a window at all (a desktop switch, the scrolling strip itself, an OSD, a panel, the editor's own widgets) or because it is a surface no application owns (the shell subtree, deliberately, so a rule cannot retarget a pack engaged on the Shell page). Many of those are never resolved by a compositor leg at all; the rest resolve windowless.
WHY IT MATTERS TO CALLERS: a Rule's animation actions are stored per event path and resolved through the rule evaluator, which needs a window to match against. On a windowless path the resolvers short-circuit before the evaluator runs, so a rule naming one is stored, shown, and never consulted. The rule editor uses this to avoid offering such a path in the first place. The compositor ALSO reads it to decide whether to run its window filter, so a path this calls windowless skips the user's Animations.WindowFiltering exclusions as well as its rule tier. On scrolling.tabSwitch the window a rule matches against is the ARRIVING tab; a rule written against the departing application never fires on that event.
KEEPING IT HONEST: tryBeginShaderForEvent consults this to decide whether to resolve an event windowless, so for that leg the list is not a description of the routing that could drift from it — it IS the routing. The other resolve legs do not consult it and are windowless or per-window by construction at their own call sites: the desktop legs in lifecycle_wiring, the strip in tiling, the daemon's overlay legs in animation_config, and applyWindowGeometry's per-window resolve in drag_snap.
The hazard runs in the fail-open direction. Add a PER-WINDOW leg without listing it here and tryBeginShaderForEvent resolves it windowless, dropping both its rule tier and its window filter with no warning. (Listing a windowless leg here is the opposite mistake: it would then run through shouldAnimateWindow, whose blanket plasma-shell reject kills it outright.) The exact set is pinned by test_profiletree, in both directions, so a taxonomy addition has to make the call explicitly rather than default into either failure.
| PHOSPHORANIMATION_EXPORT QString PhosphorAnimation::ProfilePaths::parentPath | ( | const QString & | path | ) |
Walk path up one level ("window.appearance.open" -> "window.appearance" -> "window" -> "global" -> "").
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
Appearance transitions: open, close, minimize, focus, and every OSD / popup show/hide — a single surface materialising or dissolving.
|
extern |
Desktop transitions: full-screen blends of two scene captures — the virtual-desktop switch (outgoing desktop against incoming one) and the show-desktop peek (windows scene against bare desktop).
A distinct TWO-texture contract (from/to full-screen samplers), incompatible with the single-surface geometry/appearance shaders — a shader must opt into it explicitly via appliesTo: ["desktop"]. A universal single-surface effect (empty appliesTo) does NOT apply to desktop paths, because its lone surface sampler would be unbound in the two-texture pass.
|
extern |
Geometry transitions: snapIn/snapOut, layoutSwitch, maximize — every leg that carries an old and new rect.
|
extern |
Interactive-drag transitions: the window.movement.move leaf only.
A drag installs a HELD transition — no old→new crossfade plays (iFromRect stays invalid, progress clamps while the pointer is down), so a geometry crossfade pack is a guaranteed no-op there. Only a position / mesh backed pack consuming the move-physics inputs (iMoveMesh / iMoveOffset / iMoveVelocity* / iMoveTrail) can drive it, and it must opt in explicitly via appliesTo: ["move"] (wobble). Like desktop, this class is opt-in rather than universal-permissive, and the move leaf takes NO inherited shader from its ancestors (see ShaderProfileTree::resolve).
|
extern |
Strip transitions: the scrolling strip's view leg (scrolling.view).
Like move, the motion is CONTINUOUS — wheel scrolling retargets the per-output view spring on every batch, so there are no discrete from/to legs and a crossfade pack has nothing to play. Like desktop, the pass is per-output and full-screen: the compositor renders the already-translated scene into one capture and the pack decorates it (motion blur, smear, edge warp) driven by offset/velocity uniforms (iStripMotion), converging to the identity image at settle. A distinct one-scene-sampler contract (strip_transition.glsl), incompatible with the single-surface and two-texture pipelines — a shader must opt in explicitly via appliesTo: ["strip"], and a universal effect does NOT apply here. A strip-ONLY pack is therefore compositor-only, which is exactly what shaderEffectIsCompositorOnly's appearance rule concludes. That is a property of the pack, not of the class: a hybrid ["strip", "appearance"] pack is still daemon-routable through its appearance leg.
|
extern |
Tab transitions: the swap inside a tabbed scrolling column (scrolling.tabSwitch).
TWO textures like desktop, but on a window quad rather than a screen: the outgoing tab's captured content is bound as uOldWindow (the same shared old-content sampler the geometry crossfades use) and the pack blends it into the arriving tab's live surface over a discrete forward leg.
Opt-in rather than universal-permissive, for a reason of its own. A universal single-surface pack would not fail here the way it does on a desktop path — its sampler IS bound — it would simply fade the arriving tab in over whatever lies behind the column, which is the wallpaper. That reads as a flash of desktop between two windows that never moved, so a pack must declare appliesTo: ["tab"] to be offered.
Like move, the tab leaf takes NO inherited shader from its ancestors (shaderPathResolvesInIsolation / ShaderProfileTree::resolve). The reason is the opt-in class stated just above, not the ancestors' classes: because a pack must declare appliesTo: ["tab"], every pack offered on an ancestor for that ancestor's own sake is refused here. It has three levels above it — parentPath("scrolling") is global, not empty, and the baseline sits above that. A HYBRID declaring tab beside the ancestor's class does survive the gate, so the isolation is a policy choice for that case: a pack engaged for window appearance must not start driving tab swaps unasked. Only a direct override at the leaf applies; motion (curve/duration) inheritance is unaffected.
A tab-ONLY pack is compositor-only by shaderEffectIsCompositorOnly's appearance rule, which is what lets it include old_content.glsl unguarded: that sampler is binding-less and the daemon's strict SPIR-V bake rejects it. The BUNDLED-pack validator gate enforces this (a hybrid declaring "appearance" beside "tab" fails the daemon-dialect bake loudly, with a hint naming the fix); a user-installed hybrid bypasses the gate and degrades to logged bake failures rather than being rejected — the same standing gap every geometry+appearance old-content pack shares.
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
180 ms InCubic
|
extern |
250 ms OutCubic
|
extern |
150 ms InCubic
|
extern |
400 ms count-change pulse
|
extern |
200 ms OutBack
|
extern |
200 ms OutCubic
|
extern |
200 ms OutCubic
|
extern |
400 ms InCubic
|
extern |
150 ms OutCubic (family seed)
|
extern |
100 ms OutCubic
|
extern |
150 ms OutCubic (family seed)
|
extern |
1000 ms sinusoidal (family root)
|
extern |
500 ms
|
extern |
1500 ms
|
extern |
150 ms OutCubic (family seed)
|
extern |
300 ms widget-out (family root)
|
extern |
120 ms (variant)
|
extern |
250 ms OutBack
|
extern |
250 ms OutBack (spring feel)
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |