1
0
Fork 0
forked from wry/wry

Fix animation retarget and reflow regressions

This commit is contained in:
atagen 2026-05-24 14:55:24 +10:00
parent dfcb2d0fd6
commit 0f6f9f2602
6 changed files with 261 additions and 33 deletions

View file

@ -1,6 +1,6 @@
use {crate::rect::Rect, crate::tree::NodeId};
const MIN_SHRINK_DENOMINATOR: i32 = 4;
const MIN_SHRINK_DENOMINATOR: i32 = 8;
#[derive(Clone, Debug)]
pub struct MultiphaseRequest {
@ -2198,6 +2198,23 @@ mod tests {
assert!(validate_plan_continuous(&req, &planned.plan));
}
#[test]
fn single_window_one_axis_group_is_still_multiphase_plannable() {
let req = request(vec![window(1, rect(0, 0, 100, 100), rect(40, 0, 140, 100))]);
let planned = plan_no_overlap_explained(&req).unwrap();
assert_eq!(planned.explanation.strategy, PlanStrategy::SingleAction);
assert_eq!(
planned.plan.phases[0].action,
MultiphasePhaseAction::Uniform(PhaseAction {
kind: PhaseKind::Move,
axis: PhaseAxis::Horizontal,
})
);
assert_eq!(planned.explanation.phases[0].nodes, vec![id(1)]);
assert!(validate_plan_continuous(&req, &planned.plan));
}
#[test]
fn mixed_single_phase_still_rejects_diagonal_per_window_motion() {
let req = request(vec![
@ -2424,6 +2441,61 @@ mod tests {
assert!(validate_plan_continuous(&req, plan));
}
#[test]
fn three_child_stack_extraction_plans_without_linear_fallback() {
let old = split(
10,
PhaseAxis::Horizontal,
&[1, 1],
vec![
leaf(1),
split(
11,
PhaseAxis::Vertical,
&[1, 1, 1],
vec![leaf(2), leaf(3), leaf(4)],
),
],
);
let new = split(
10,
PhaseAxis::Horizontal,
&[1, 1, 1],
vec![
leaf(1),
leaf(3),
split(11, PhaseAxis::Vertical, &[1, 1], vec![leaf(2), leaf(4)]),
],
);
let req = generated_request(&old, &new, rect(0, 0, 600, 300));
let planned = plan_no_overlap_explained(&req).unwrap();
assert_eq!(
planned.explanation.strategy,
PlanStrategy::SpaceThenOrthogonalGrowth {
axis: PhaseAxis::Horizontal,
}
);
assert_eq!(
actions(&planned.plan),
vec![
PhaseAction {
kind: PhaseKind::Scale,
axis: PhaseAxis::Horizontal,
},
PhaseAction {
kind: PhaseKind::Move,
axis: PhaseAxis::Horizontal,
},
PhaseAction {
kind: PhaseKind::Scale,
axis: PhaseAxis::Vertical,
},
]
);
assert!(validate_plan_continuous(&req, &planned.plan));
}
#[test]
fn validated_phase_paths_accept_interrupted_reverse_route() {
let a_current = rect(50, 0, 150, 50);
@ -2793,7 +2865,7 @@ mod tests {
MultiphasePlanFailure::ShrinkBound {
axis: PhaseAxis::Horizontal,
available: 10,
required: 100,
required: 50,
}
));
}