aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDaniel Hedlund <daniel@digitree.org>2013-12-07 07:59:41 -0800
committerDaniel Hedlund <daniel@digitree.org>2013-12-13 08:18:44 -0800
commit555e04475e14b8a72b3e4f1c87fecb7d522b8a33 (patch)
treed99f3113daf9e4932f21bdc6c2a491e270884f5e /src
parentc168e04fe1fc446c973228b7b100bd638a7f4f39 (diff)
downloadservo-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.rs19
-rw-r--r--src/test/ref/basic.list1
-rw-r--r--src/test/ref/inline_text_align_a.html24
-rw-r--r--src/test/ref/inline_text_align_b.html16
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>