| impl ISizeAndMarginsComputer for AbsoluteNonReplaced { |
| fn solve_inline_size_constraints(&self, |
| block: &mut BlockFlow, |
| input: &ISizeConstraintInput) |
| -> ISizeConstraintSolution { |
| let (inline_start,inline_size,margin_inline_start,margin_inline_end) = |
| match (inline_startssssssxxxxxxsssssxxxxxxxxxssssssxxx,inline_startssssssxxxxxxsssssxxxxxxxxxssssssxxx) { |
| (MaybeAuto::Auto, MaybeAuto::Auto, MaybeAuto::Auto) => { |
| let margin_start = inline_start_margin.specified_or_zero(); |
| let margin_end = inline_end_margin.specified_or_zero(); |
| // Now it is the same situation as inline-start Specified and inline-end |
| // and inline-size Auto. |
| // |
| // Set inline-end to zero to calculate inline-size. |
| let inline_size = block.get_shrink_to_fit_inline_size(available_inline_size - |
| (margin_start + margin_end)); |
| (Au(0), inline_size, margin_start, margin_end) |
| } |
| }; |
| |
| let (inline_start, inline_size, margin_inline_start, margin_inline_end) = |
| match (inline_start, inline_end, computed_inline_size) { |
| (MaybeAuto::Auto, MaybeAuto::Auto, MaybeAuto::Auto) => { |
| let margin_start = inline_start_margin.specified_or_zero(); |
| let margin_end = inline_end_margin.specified_or_zero(); |
| // Now it is the same situation as inline-start Specified and inline-end |
| // and inline-size Auto. |
| // |
| // Set inline-end to zero to calculate inline-size. |
| let inline_size = |
| block.get_shrink_to_fit_inline_size(available_inline_size - |
| (margin_start + margin_end)); |
| (Au(0), inline_size, margin_start, margin_end) |
| } |
| }; |
| } |
| } |