diff options
author | Brian J. Burg <burg@cs.washington.edu> | 2012-10-18 11:53:25 -0700 |
---|---|---|
committer | Brian J. Burg <burg@cs.washington.edu> | 2012-10-18 11:53:25 -0700 |
commit | 0f050e783525225b8897db575abc7d0da53510cc (patch) | |
tree | 92b095ded3b2e15dd7953619e6ef49cd90695faf /src/servo/layout/text.rs | |
parent | efca6fedfc901e0954609dec8f6a6e22beaff043 (diff) | |
download | servo-0f050e783525225b8897db575abc7d0da53510cc.tar.gz servo-0f050e783525225b8897db575abc7d0da53510cc.zip |
More TextRange refactoring.
Diffstat (limited to 'src/servo/layout/text.rs')
-rw-r--r-- | src/servo/layout/text.rs | 76 |
1 files changed, 7 insertions, 69 deletions
diff --git a/src/servo/layout/text.rs b/src/servo/layout/text.rs index b218f4b191e..49f8682f4ec 100644 --- a/src/servo/layout/text.rs +++ b/src/servo/layout/text.rs @@ -1,34 +1,27 @@ /** Text layout. */ -use au = gfx::geometry; -use au::au; -use geom::size::Size2D; use servo_text::text_run::{TextRange, TextRun}; -use servo_text::font_cache::FontCache; use layout::box::{TextBox, RenderBox, RenderBoxData, UnscannedTextBox}; -use layout::context::LayoutContext; pub struct TextBoxData { run: @TextRun, - offset: uint, - length: uint + range: TextRange, } -pub fn TextBoxData(run: @TextRun, offset: uint, length: uint) -> TextBoxData { +pub fn TextBoxData(run: @TextRun, range: TextRange) -> TextBoxData { TextBoxData { run: run, - offset: offset, - length: length + range: range, } } pub fn adapt_textbox_with_range(box_data: &RenderBoxData, run: @TextRun, - offset: uint, length: uint) -> @RenderBox { + range: TextRange) -> @RenderBox { debug!("Creating textbox with span: (strlen=%u, off=%u, len=%u) of textrun: %s", - run.text.len(), offset, length, run.text); + run.text.len(), range.begin(), range.length(), run.text); let new_box_data = copy *box_data; - let new_text_data = TextBoxData(run, offset, length); - let metrics = run.metrics_for_range(TextRange(offset, length)); + let new_text_data = TextBoxData(run, range); + let metrics = run.metrics_for_range(range); new_box_data.position.size = metrics.bounding_box.size; @TextBox(move new_box_data, move new_text_data) } @@ -45,58 +38,3 @@ impl RenderBox : UnscannedMethods { } } } - -/* The main reflow routine for text layout. -impl @RenderBox : TextLayout { - fn reflow_text(ctx: &LayoutContext) { - let d = match self { - @TextBox(_,d) => { d } - _ => { fail ~"expected text box in reflow_text!" } - }; - - // TODO: get font from textrun's TextStyle - let font = ctx.font_cache.get_test_font(); - - // Do line breaking. - let mut current = TextRun(font, d.text); - let mut lines = dvec::DVec(); - let mut width_left = au::from_px(800); - let mut max_width = au(0); - - while current.size().width > width_left { - let min_width = current.min_break_width(); - - debug!("line %d, current width %d, width left %d, min width %d", - lines.len() as int, - *current.size().width as int, - *width_left as int, - *min_width as int); - - if min_width > width_left { - // Too bad, we couldn't break. Overflow. - break; - } - - let (prev_line, next_line) = current.split(font, width_left); - let prev_width = prev_line.size().width; - if max_width < prev_width { - max_width = prev_width; - } - - lines.push(move prev_line); - current = next_line; - } - - let remaining_width = current.size().width; - if max_width < remaining_width { - max_width = remaining_width; - } - - let line_count = 1 + (lines.len() as i32); - let total_height = au(*current.size().height * line_count); - lines.push(move current); - - self.d().position.size = Size2D(max_width, total_height); - d.runs = move dvec::unwrap(lines); - } -}*/ |