From 86f59bd5efa130797948971f5fec21f7f4cf5e14 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 16 Jun 2012 14:46:55 -0700 Subject: [PATCH] Calculate the size of a text run --- src/servo/text/text_run.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/servo/text/text_run.rs b/src/servo/text/text_run.rs index 75a87a70f81..590ff2ec246 100644 --- a/src/servo/text/text_run.rs +++ b/src/servo/text/text_run.rs @@ -1,5 +1,8 @@ +import geom::point::Point2D; +import geom::size::Size2D; +import gfx::geometry::{au, px_to_au}; import libc::{c_void}; -import font::font; +import font::{font, create_test_font}; import glyph::glyph; import shaper::shape_text; @@ -10,5 +13,25 @@ class text_run { new(font: &font, text: str) { self.glyphs = shape_text(font, text); } + + fn size() -> Size2D { + let height = px_to_au(14); + let pen_start_x = px_to_au(0); + let pen_start_y = height; + let pen_start = Point2D(pen_start_x, pen_start_y); + let pen_end = self.glyphs.foldl(pen_start) { |cur, glyph| + Point2D(cur.x.add(glyph.pos.offset.x).add(glyph.pos.advance.x), + cur.y.add(glyph.pos.offset.y).add(glyph.pos.advance.y)) + }; + ret Size2D(pen_end.x, pen_end.y); + } } +fn should_calculate_the_total_size() { + #[test]; + + let font = create_test_font(); + let run = text_run(&font, "firecracker"); + let expected = Size2D(px_to_au(110), px_to_au(14)); + assert run.size() == expected; +}