diff options
author | Daniel Hedlund <daniel@digitree.org> | 2013-12-07 07:59:41 -0800 |
---|---|---|
committer | Daniel Hedlund <daniel@digitree.org> | 2013-12-13 08:18:44 -0800 |
commit | 555e04475e14b8a72b3e4f1c87fecb7d522b8a33 (patch) | |
tree | d99f3113daf9e4932f21bdc6c2a491e270884f5e /src | |
parent | c168e04fe1fc446c973228b7b100bd638a7f4f39 (diff) | |
download | servo-555e04475e14b8a72b3e4f1c87fecb7d522b8a33.tar.gz servo-555e04475e14b8a72b3e4f1c87fecb7d522b8a33.zip |
InlineFlow should always inherit text-width from base style
Fixes #222.
Diffstat (limited to 'src')
-rw-r--r-- | src/components/main/layout/inline.rs | 19 | ||||
-rw-r--r-- | src/test/ref/basic.list | 1 | ||||
-rw-r--r-- | src/test/ref/inline_text_align_a.html | 24 | ||||
-rw-r--r-- | src/test/ref/inline_text_align_b.html | 16 |
4 files changed, 46 insertions, 14 deletions
diff --git a/src/components/main/layout/inline.rs b/src/components/main/layout/inline.rs index aa5b5825070..861fa93a1c9 100644 --- a/src/components/main/layout/inline.rs +++ b/src/components/main/layout/inline.rs @@ -579,22 +579,10 @@ impl InlineFlow { } /// Sets box X positions based on alignment for one line. - fn set_horizontal_box_positions(boxes: &[Box], line: &LineBox) { + fn set_horizontal_box_positions(boxes: &[Box], line: &LineBox, linebox_align: text_align::T) { // Figure out how much width we have. let slack_width = Au::max(Au(0), line.green_zone.width - line.bounds.size.width); - // Get the text alignment. - // - // TODO(burg, issue #222): use 'text-align' property from `InlineFlow`'s block container, - // not from the style of the first box child. - let linebox_align = if line.range.begin() < boxes.len() { - let first_box = &boxes[line.range.begin()]; - first_box.style().Text.text_align - } else { - // Nothing to lay out, so assume left alignment. - text_align::left - }; - // Set the box x positions based on that alignment. let mut offset_x = line.bounds.origin.x; offset_x = offset_x + match linebox_align { @@ -712,10 +700,13 @@ impl Flow for InlineFlow { let mut line_height_offset = Au::new(0); + // All lines use text alignment from base (non-inline) node + let text_align = self.base.node.style().get().Text.text_align; + // Now, go through each line and lay out the boxes inside. for line in self.lines.mut_iter() { // Lay out boxes horizontally. - InlineFlow::set_horizontal_box_positions(self.boxes, line); + InlineFlow::set_horizontal_box_positions(self.boxes, line, text_align); // Set the top y position of the current linebox. // `line_height_offset` is updated at the end of the previous loop. diff --git a/src/test/ref/basic.list b/src/test/ref/basic.list index f4d2b5aaacc..787823656c2 100644 --- a/src/test/ref/basic.list +++ b/src/test/ref/basic.list @@ -18,3 +18,4 @@ == border_style_none_a.html border_style_none_b.html == acid1_a.html acid1_b.html == text_decoration_propagation_a.html text_decoration_propagation_b.html +== inline_text_align_a.html inline_text_align_b.html diff --git a/src/test/ref/inline_text_align_a.html b/src/test/ref/inline_text_align_a.html new file mode 100644 index 00000000000..57fc40b7448 --- /dev/null +++ b/src/test/ref/inline_text_align_a.html @@ -0,0 +1,24 @@ +<html> + <head> + <style> + .right { + text-align: right; + } + .left { + text-align: left; + } + .inline { + display: inline; + } + </style> + </head> + <body> + <div class="right"> + <span class="left"> <!-- should ignore 'text-align' of inline elements --> + <div class="inline left"> <!-- ... and those explicitly defined as inline --> + <span>hello, wide world</span> + </span> + </span> + </div> + </body> +</html> diff --git a/src/test/ref/inline_text_align_b.html b/src/test/ref/inline_text_align_b.html new file mode 100644 index 00000000000..72ab836ae04 --- /dev/null +++ b/src/test/ref/inline_text_align_b.html @@ -0,0 +1,16 @@ +<html> + <head> + <style> + .right { + text-align: right; + } + </style> + </head> + <body> + <div class="right"> + <span class="right"> + hello, wide world + </span> + </div> + </body> +</html> |