aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Watson <gw@intuitionlibrary.com>2014-09-23 15:32:36 +1000
committerGlenn Watson <gw@intuitionlibrary.com>2014-09-23 15:40:08 +1000
commit32c02fc0484a6dc203958e66c07c780bf4248155 (patch)
tree81bdec1e0349f2c3de3beba27b164bf63228743f
parent6177a3bdcca974d5070b0ecab0973d42963946ec (diff)
downloadservo-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.rs30
-rw-r--r--tests/ref/basic.list1
-rw-r--r--tests/ref/css/ahem.css10
-rw-r--r--tests/ref/inline_block_parent_padding_a.html27
-rw-r--r--tests/ref/inline_block_parent_padding_ref.html26
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>