bar: entrance animation on first map
ANIMATION WORK #3. Liquid Motion only: the island's layer-shell top margin springs (anim::spring_to) from just above its resting position up to the theme's configured margin.top over 420ms on first map, plus an opacity-only fade (the new bar-entrance CSS class / bar-in keyframe). Deliberately animates the surface's own layer-shell margin in Rust rather than a CSS margin on an inner widget: that would touch box-model geometry, and WorkspaceTrail::place()'s single-shot initial sample is a documented previous crash site for exactly that kind of still-moving-on-first-paint bug (see the ws-in/row-in guard's own comment further down). A layer-shell margin change repositions the whole surface without touching any widget's own measured size, so it's invisible to compute_bounds(host) by construction. glass-workbench (flush edge-to-edge bar, no floating margin to slide from) gets nothing. spotlight gets the opacity fade only -- its capsule already has its own width/drawer motion in flight during a real search, so a margin spring felt like piling onto that rather than complementing it.
This commit is contained in:
parent
c0a013c8ed
commit
9761b85112
2 changed files with 63 additions and 0 deletions
11
src/theme.rs
11
src/theme.rs
|
|
@ -243,6 +243,17 @@ fn load_css() -> String {
|
|||
@keyframes row-in {{ from {{ opacity: 0; margin-top: 8px; }} to {{ opacity: 1; margin-top: 0; }} }}\
|
||||
@keyframes digit-flip {{ from {{ opacity: 0; margin-top: 7px; }} to {{ opacity: 1; margin-top: 0; }} }}\
|
||||
@keyframes caret-draw {{ from {{ margin-right: 200px; opacity: 0.2; }} to {{ margin-right: 4px; opacity: 1; }} }}\
|
||||
/* ANIMATION WORK #3, bar entrance on first map: opacity ONLY —\
|
||||
no margin/geometry term — so this can never perturb any\
|
||||
descendant's own box-model size (see main.rs's own long\
|
||||
comment on this, next to where `bar-entrance` gets added, for\
|
||||
why that matters to the workspace trail specifically).\
|
||||
Liquid Motion additionally springs the surface's own\
|
||||
layer-shell top margin via `anim::spring_to` in Rust, which\
|
||||
this keyframe knows nothing about; glass-workbench never adds\
|
||||
this class at all. */\
|
||||
@keyframes bar-in {{ from {{ opacity: 0; }} }}\
|
||||
.bar-entrance {{ animation: bar-in 0.4s {spring_settle} both; }}\
|
||||
window.breadbar {{ background-color: alpha(@bg, {bg_alpha}); color: @on-bg;\
|
||||
border-radius: {radius_bar}; {window_border}\
|
||||
transition: border-radius 0.3s {spring_settle}; }}\
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue