diff options
author | Glenn Watson <gw@intuitionlibrary.com> | 2014-09-23 15:32:36 +1000 |
---|---|---|
committer | Glenn Watson <gw@intuitionlibrary.com> | 2014-09-23 15:40:08 +1000 |
commit | 32c02fc0484a6dc203958e66c07c780bf4248155 (patch) | |
tree | 81bdec1e0349f2c3de3beba27b164bf63228743f | |
parent | 6177a3bdcca974d5070b0ecab0973d42963946ec (diff) | |
download | servo-32c02fc0484a6dc203958e66c07c780bf4248155.tar.gz servo-32c02fc0484a6dc203958e66c07c780bf4248155.zip |
Fix inline context padding on inline-block.
Fixes categories bar on wikipedia - ref #2554.
-rw-r--r-- | components/layout/fragment.rs | 30 | ||||
-rw-r--r-- | tests/ref/basic.list | 1 | ||||
-rw-r--r-- | tests/ref/css/ahem.css | 10 | ||||
-rw-r--r-- | tests/ref/inline_block_parent_padding_a.html | 27 | ||||
-rw-r--r-- | tests/ref/inline_block_parent_padding_ref.html | 26 |
5 files changed, 81 insertions, 13 deletions
diff --git a/components/layout/fragment.rs b/components/layout/fragment.rs index 1281775ee0b..04cbaccad92 100644 --- a/components/layout/fragment.rs +++ b/components/layout/fragment.rs @@ -1178,9 +1178,9 @@ impl Fragment { -> IntrinsicISizes { let mut result = self.style_specified_intrinsic_inline_size(); - match self.specific { + let use_border_padding = match self.specific { GenericFragment | IframeFragment(_) | TableFragment | TableCellFragment | TableColumnFragment(_) | TableRowFragment | - TableWrapperFragment => {} + TableWrapperFragment => { true } InlineBlockFragment(ref mut info) => { let block_flow = info.flow_ref.get_mut().as_block(); result.minimum_inline_size = max(result.minimum_inline_size, @@ -1189,11 +1189,13 @@ impl Fragment { result.preferred_inline_size = max(result.preferred_inline_size, block_flow.base.intrinsic_inline_sizes.preferred_inline_size + block_flow.base.intrinsic_inline_sizes.surround_inline_size); + false }, ImageFragment(ref mut image_fragment_info) => { let image_inline_size = image_fragment_info.image_inline_size(); result.minimum_inline_size = max(result.minimum_inline_size, image_inline_size); result.preferred_inline_size = max(result.preferred_inline_size, image_inline_size); + true } ScannedTextFragment(ref text_fragment_info) => { let range = &text_fragment_info.range; @@ -1205,19 +1207,22 @@ impl Fragment { result.minimum_inline_size = max(result.minimum_inline_size, min_line_inline_size); result.preferred_inline_size = max(result.preferred_inline_size, max_line_inline_size); + true } UnscannedTextFragment(..) => fail!("Unscanned text fragments should have been scanned by now!"), - } + }; // Take borders and padding for parent inline fragments into account, if necessary. - match self.inline_context { - None => {} - Some(ref context) => { - for style in context.styles.iter() { - let border_width = style.logical_border_width().inline_start_end(); - let padding_inline_size = model::padding_from_style(&**style, Au(0)).inline_start_end(); - result.minimum_inline_size = result.minimum_inline_size + border_width + padding_inline_size; - result.preferred_inline_size = result.preferred_inline_size + border_width + padding_inline_size; + if use_border_padding { + match self.inline_context { + None => {} + Some(ref context) => { + for style in context.styles.iter() { + let border_width = style.logical_border_width().inline_start_end(); + let padding_inline_size = model::padding_from_style(&**style, Au(0)).inline_start_end(); + result.minimum_inline_size = result.minimum_inline_size + border_width + padding_inline_size; + result.preferred_inline_size = result.preferred_inline_size + border_width + padding_inline_size; + } } } } @@ -1447,8 +1452,7 @@ impl Fragment { InlineBlockFragment(ref mut info) => { let block_flow = info.flow_ref.get_mut().as_block(); self.border_box.size.inline = block_flow.base.intrinsic_inline_sizes.preferred_inline_size + - block_flow.base.intrinsic_inline_sizes.surround_inline_size + - noncontent_inline_size; + block_flow.base.intrinsic_inline_sizes.surround_inline_size; block_flow.base.position.size.inline = self.border_box.size.inline; } ScannedTextFragment(_) => { diff --git a/tests/ref/basic.list b/tests/ref/basic.list index c67aed95d13..88c40413d69 100644 --- a/tests/ref/basic.list +++ b/tests/ref/basic.list @@ -140,3 +140,4 @@ flaky_gpu,flaky_linux == acid2_noscroll.html acid2_ref_broken.html == img_block_maxwidth_b.html img_block_maxwidth_ref.html == float_clearance_a.html float_clearance_ref.html == block_formatting_context_a.html block_formatting_context_ref.html +== inline_block_parent_padding_a.html inline_block_parent_padding_ref.html diff --git a/tests/ref/css/ahem.css b/tests/ref/css/ahem.css new file mode 100644 index 00000000000..ef0395b0503 --- /dev/null +++ b/tests/ref/css/ahem.css @@ -0,0 +1,10 @@ +@font-face { + font-family: 'ahem'; + src: url(../fonts/ahem/ahem.ttf); +} + +body { + font-family: 'ahem'; + font-size: 100px; + line-height: 1; +} diff --git a/tests/ref/inline_block_parent_padding_a.html b/tests/ref/inline_block_parent_padding_a.html new file mode 100644 index 00000000000..c4f7813aaeb --- /dev/null +++ b/tests/ref/inline_block_parent_padding_a.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html> + <head> + <link rel="stylesheet" type="text/css" href="css/ahem.css"> + <style type="text/css"> + body { + margin: 0; + } + ul { + margin: 0; + padding: 0; + list-style: none; + list-style-type: none; + list-style-image: none; + } + li { + display: inline-block; + padding: 0 100px; + color: red; + background-color: yellow; + } + </style> + </head> + <body> + <ul><li>X</li></ul> + </body> +</html> diff --git a/tests/ref/inline_block_parent_padding_ref.html b/tests/ref/inline_block_parent_padding_ref.html new file mode 100644 index 00000000000..3dcefd3ad8a --- /dev/null +++ b/tests/ref/inline_block_parent_padding_ref.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html> + <head> + <style type="text/css"> + body { + margin: 0; + } + div { + float: left; + width: 100px; + height: 100px; + } + .red { + background-color: red; + } + .yellow { + background-color: yellow; + } + </style> + </head> + <body> + <div class="yellow"></div> + <div class="red"></div> + <div class="yellow"></div> + </body> +</html> |