zone: the long swipe travels to home instead of back to the detent
settleTo gave home and overview the same end shift, so a release past the multitasking detent animated *down* to it, held the overview fully present, and teleported — the release never reached its end target. detent is the boundary between the two (rail: pullTo(travel, missionAt)), and presence is built to reach 0 at clock 2, which is where home lives.
This commit is contained in:
parent
3f796f5345
commit
68c353ad10
1 changed files with 18 additions and 4 deletions
|
|
@ -282,15 +282,29 @@ Singleton {
|
|||
|
||||
// Release the gesture at a named destination, travelling there first.
|
||||
function settleTo(target) {
|
||||
const endShift = (target === "last_zone") ? 0 : 1;
|
||||
const from = root.shift;
|
||||
// Where on the *clock* each destination lives — not on `shift`, which
|
||||
// saturates at 1 and cannot express home at all.
|
||||
//
|
||||
// `presence` two properties up is written to rise to the detent and then
|
||||
// fall away "over the same distance", which puts home at clock 2. This
|
||||
// settled it at 1 for both home and overview, so a long swipe ran the
|
||||
// short swipe's motion, held the multitasking view fully present, and
|
||||
// then teleported — the release never travelled to its end target, which
|
||||
// is the same defect `lineage-trebuchet`'s quickstep is cited for.
|
||||
// Measured on the glass 2026-08-15: *"the long full swipe up is
|
||||
// completely fucked, only the short swipe partially works."*
|
||||
const endClock = target === "last_zone" ? 0 : target === "home" ? 2 : 1;
|
||||
// The clock, not the clamped carry: past the detent `shift` is pinned at
|
||||
// 1, so a release from a home-bound pull computed a duration for travel
|
||||
// it had already done.
|
||||
const from = root.clock;
|
||||
settleAnim.stop();
|
||||
root._settleTarget = target;
|
||||
root.settling = true;
|
||||
settleAnim.from = root.travel;
|
||||
settleAnim.to = endShift * root.detent;
|
||||
settleAnim.to = endClock * root.detent;
|
||||
settleAnim.duration = Math.min(root.maxSwipeDuration,
|
||||
Math.abs(Math.round((endShift - from)
|
||||
Math.abs(Math.round((endClock - from)
|
||||
* root.maxSwipeDuration * root.swipeDurationMultiplier)));
|
||||
settleAnim.start();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue