diff options
author | Simon Sapin <simon.sapin@exyr.org> | 2014-08-22 22:49:32 +0100 |
---|---|---|
committer | Simon Sapin <simon.sapin@exyr.org> | 2014-08-29 17:50:56 +0100 |
commit | 80704aeabd1c8882760f8efc49b8bc5abca91a60 (patch) | |
tree | 1010303f145632284fac74720a05aeaa7736cacb /src/components/layout/fragment.rs | |
parent | db80b76d0a3e21e49630725376aaf3781730f489 (diff) | |
download | servo-80704aeabd1c8882760f8efc49b8bc5abca91a60.tar.gz servo-80704aeabd1c8882760f8efc49b8bc5abca91a60.zip |
Implement sideways text.
Diffstat (limited to 'src/components/layout/fragment.rs')
-rw-r--r-- | src/components/layout/fragment.rs | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/components/layout/fragment.rs b/src/components/layout/fragment.rs index e0c0b2f6e88..f00bb8a7f7c 100644 --- a/src/components/layout/fragment.rs +++ b/src/components/layout/fragment.rs @@ -29,6 +29,7 @@ use gfx::display_list::{ImageDisplayItemClass, LineDisplayItem}; use gfx::display_list::{LineDisplayItemClass, OpaqueNode, PseudoDisplayItemClass}; use gfx::display_list::{SolidColorDisplayItem, SolidColorDisplayItemClass, StackingLevel}; use gfx::display_list::{TextDisplayItem, TextDisplayItemClass}; +use gfx::display_list::{Upright, SidewaysLeft, SidewaysRight}; use gfx::font::FontStyle; use gfx::text::glyph::CharIndex; use gfx::text::text_run::TextRun; @@ -935,12 +936,31 @@ impl Fragment { TableColumnFragment(_) => fail!("Shouldn't see table column fragments here."), ScannedTextFragment(ref text_fragment) => { // Create the text display item. + let orientation = if self.style.writing_mode.is_vertical() { + if self.style.writing_mode.is_sideways_left() { + SidewaysLeft + } else { + SidewaysRight + } + } else { + Upright + }; + + let metrics = &text_fragment.run.font_metrics; + let baseline_origin ={ + let mut tmp = content_box.start; + tmp.b = tmp.b + metrics.ascent; + tmp.to_physical(self.style.writing_mode, container_size) + flow_origin + }; + let text_display_item = box TextDisplayItem { base: BaseDisplayItem::new( absolute_content_box, self.node, ContentStackingLevel), text_run: text_fragment.run.clone(), range: text_fragment.range, text_color: self.style().get_color().color.to_gfx_color(), + orientation: orientation, + baseline_origin: baseline_origin, }; accumulator.push(display_list, TextDisplayItemClass(text_display_item)); @@ -965,7 +985,6 @@ impl Fragment { let text_decorations = self.style().get_inheritedtext()._servo_text_decorations_in_effect; - let metrics = &text_fragment.run.font_metrics; line(text_decorations.underline, || { let mut rect = content_box.clone(); rect.start.b = rect.start.b + metrics.ascent - metrics.underline_offset; |