@@ -361,45 +361,46 @@ impl<T: LayoutTreeNode> Flow<T> for LayoutUnit<T> {
361361 child_border,
362362 child_padding_border,
363363 ) ;
364+ let stretched_cross_size = node_inner_size. cross_size ( axis_info. dir )
365+ - child_margin. cross_axis_sum ( axis_info. dir ) ;
364366 let aspect_ratio = child_node. style ( ) . aspect_ratio ( ) ;
365367 let has_aspect_ratio = aspect_ratio. is_some ( ) && aspect_ratio. unwrap ( ) > 0. ;
366- if css_size. width . is_none ( ) ^ css_size. height . is_none ( ) && has_aspect_ratio {
367- if css_size. height . is_none ( ) {
368- css_size. height = OptionNum :: some ( resolve_height_from_aspect_ratio (
369- child_border,
370- child_padding_border,
371- & child_node. style ( ) . box_sizing ( ) ,
368+ if has_aspect_ratio {
369+ if css_size. width . is_none ( ) ^ css_size. height . is_none ( ) {
370+ if css_size. height . is_none ( ) {
371+ css_size. height = OptionNum :: some ( resolve_height_from_aspect_ratio (
372+ child_border,
373+ child_padding_border,
374+ & child_node. style ( ) . box_sizing ( ) ,
375+ aspect_ratio. unwrap ( ) ,
376+ css_size. width . val ( ) . unwrap ( ) ,
377+ ) )
378+ } else {
379+ css_size. width = OptionNum :: some ( resolve_width_from_aspect_ratio (
380+ child_border,
381+ child_padding_border,
382+ & child_node. style ( ) . box_sizing ( ) ,
383+ aspect_ratio. unwrap ( ) ,
384+ css_size. height . val ( ) . unwrap ( ) ,
385+ ) )
386+ }
387+ } else if css_size. width . is_none ( )
388+ && css_size. height . is_none ( )
389+ && stretched_cross_size. is_some ( )
390+ {
391+ let transfer_limit = transfer_min_max_size (
372392 aspect_ratio. unwrap ( ) ,
373- css_size. width . val ( ) . unwrap ( ) ,
374- ) )
375- } else {
376- css_size . width = OptionNum :: some ( resolve_width_from_aspect_ratio (
393+ css_size,
394+ axis_info . dir ,
395+ min_max_limit ,
396+ child_node . style ( ) . box_sizing ( ) ,
377397 child_border,
378398 child_padding_border,
379- & child_node. style ( ) . box_sizing ( ) ,
380- aspect_ratio. unwrap ( ) ,
381- css_size. height . val ( ) . unwrap ( ) ,
382- ) )
383- }
384- }
385- let size_indefinite = css_size. width . is_none ( ) && css_size. height . is_none ( ) ;
386- let stretched_cross_size = node_inner_size. cross_size ( axis_info. dir )
387- - child_margin. cross_axis_sum ( axis_info. dir ) ;
388- if has_aspect_ratio && size_indefinite {
389- let transfer_limit = transfer_min_max_size (
390- aspect_ratio. unwrap ( ) ,
391- css_size,
392- axis_info. dir ,
393- min_max_limit,
394- child_node. style ( ) . box_sizing ( ) ,
395- child_border,
396- child_padding_border,
397- ) ;
398- let min_cross_size = transfer_limit. min_cross_size ( axis_info. dir ) ;
399- let min_main_size = transfer_limit. min_main_size ( axis_info. dir ) ;
400- let max_cross_size = transfer_limit. max_cross_size ( axis_info. dir ) ;
401- let max_main_size = transfer_limit. max_main_size ( axis_info. dir ) ;
402- if stretched_cross_size. is_some ( ) {
399+ ) ;
400+ let min_cross_size = transfer_limit. min_cross_size ( axis_info. dir ) ;
401+ let min_main_size = transfer_limit. min_main_size ( axis_info. dir ) ;
402+ let max_cross_size = transfer_limit. max_cross_size ( axis_info. dir ) ;
403+ let max_main_size = transfer_limit. max_main_size ( axis_info. dir ) ;
403404 if min_cross_size. is_positive ( )
404405 && stretched_cross_size. or_zero ( ) < min_cross_size
405406 {
0 commit comments