Fix animation retarget and reflow regressions
This commit is contained in:
parent
dfcb2d0fd6
commit
0f6f9f2602
6 changed files with 261 additions and 33 deletions
|
|
@ -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,
|
||||
}
|
||||
));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue