Calculate the size of a text run

This commit is contained in:
Brian Anderson 2012-06-16 14:46:55 -07:00
parent 5af6c891ed
commit 86f59bd5ef

View file

@ -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<au> {
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;
}