From 5e5844a33d6a6474ff84bc4721bbd06a3bb3bce5 Mon Sep 17 00:00:00 2001 From: "Brian J. Burg" Date: Tue, 16 Oct 2012 17:16:04 -0700 Subject: [PATCH] Don't measure advance zero-length text. --- src/servo/text/font.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/servo/text/font.rs b/src/servo/text/font.rs index f0671e55758..675a06ac837 100644 --- a/src/servo/text/font.rs +++ b/src/servo/text/font.rs @@ -52,14 +52,19 @@ pub trait FontMethods { pub impl Font : FontMethods { fn measure_text(run: &TextRun, offset: uint, length: uint) -> RunMetrics { + assert offset < run.text.len(); + assert offset + length <= run.text.len(); + // TODO: alter advance direction for RTL // TODO(Issue #98): using inter-char and inter-word spacing settings when measuring text let mut advance = au(0); - do run.glyphs.iter_glyphs_for_range(offset, length) |_i, glyph| { - advance += glyph.advance(); + if length > 0 { + do run.glyphs.iter_glyphs_for_range(offset, length) |_i, glyph| { + advance += glyph.advance(); + } } let mut bounds = Rect(Point2D(au(0), -self.metrics.ascent), - Size2D(advance, self.metrics.ascent + self.metrics.descent)); + Size2D(advance, self.metrics.ascent + self.metrics.descent)); // TODO(Issue #125): support loose and tight bounding boxes; using the // ascent+descent and advance is sometimes too generous and