diff --git a/src/servo/layout/text.rs b/src/servo/layout/text.rs index 3b8638888f3..05f0ec85f16 100644 --- a/src/servo/layout/text.rs +++ b/src/servo/layout/text.rs @@ -26,9 +26,9 @@ pub fn adapt_textbox_with_range(box_data: &RenderBoxData, run: @TextRun, offset: uint, length: uint) -> @RenderBox { let new_box_data = copy *box_data; let new_text_data = TextBoxData(run, offset, length); + let metrics = run.metrics_for_range(offset, length); + new_box_data.position.size = metrics.bounding_box.size; @TextBox(move new_box_data, move new_text_data) - // TODO: set position based on run metrics - //new_box_data.position.size = { width: run.font } trait UnscannedMethods { diff --git a/src/servo/text/text_run.rs b/src/servo/text/text_run.rs index 783d6939f5a..5e5348bbf28 100644 --- a/src/servo/text/text_run.rs +++ b/src/servo/text/text_run.rs @@ -1,7 +1,7 @@ use arc = std::arc; use arc::ARC; use au = gfx::geometry; -use font::Font; +use font::{RunMetrics, Font}; use font_cache::FontCache; use geom::point::Point2D; use geom::size::Size2D; @@ -49,6 +49,7 @@ trait TextRunMethods { pure fn glyphs(&self) -> &self/GlyphStore; pure fn iter_indivisible_pieces_for_range(&self, offset: uint, length: uint, f: fn(uint, uint) -> bool); + fn metrics_for_range(offset: uint, length: uint) -> RunMetrics; fn min_width_for_range(offset: uint, length: uint) -> au; fn iter_natural_lines_for_range(&self, offset: uint, length: uint, f: fn(uint, uint) -> bool); } @@ -56,6 +57,10 @@ trait TextRunMethods { impl TextRun : TextRunMethods { pure fn glyphs(&self) -> &self/GlyphStore { &self.glyphs } + fn metrics_for_range(offset: uint, length: uint) -> RunMetrics { + self.font.measure_text(&self, offset, length) + } + fn min_width_for_range(offset: uint, length: uint) -> au { assert length > 0; assert offset < self.text.len();