From 8b80e15fd0353872eca1d4bd22e5b5df74401c83 Mon Sep 17 00:00:00 2001 From: "Brian J. Burg" Date: Mon, 15 Oct 2012 15:09:57 -0700 Subject: [PATCH] Add stubs for box-splitting. --- src/servo/layout/box.rs | 20 ++++++++++++++++++++ src/servo/layout/text.rs | 11 ++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/servo/layout/box.rs b/src/servo/layout/box.rs index 57578ddb188..8cf6cad3add 100644 --- a/src/servo/layout/box.rs +++ b/src/servo/layout/box.rs @@ -91,6 +91,13 @@ pub enum RenderBox { UnscannedTextBox(RenderBoxData, ~str) } +enum SplitBoxResult { + CannotSplit(@RenderBox), + SplitUnnecessary(@RenderBox), + SplitDidFit(@RenderBox, @RenderBox), + SplitDidNotFit(@RenderBox, @RenderBox) +} + enum InlineSpacerSide { LogicalBefore, LogicalAfter, @@ -107,6 +114,7 @@ trait RenderBoxMethods { pure fn content_box() -> Rect; pure fn border_box() -> Rect; + fn split_to_width(@self, &LayoutContext, au) -> SplitBoxResult; fn get_min_width(&LayoutContext) -> au; fn get_pref_width(&LayoutContext) -> au; fn get_used_width() -> (au, au); @@ -167,6 +175,18 @@ impl RenderBox : RenderBoxMethods { } } + fn split_to_width(@self, _ctx: &LayoutContext, _max_width: au) -> SplitBoxResult { + // TODO: finish + CannotSplit(self) +/* match self { + @GenericBox(*) => CannotSplit(self), + @ImageBox(*) => CannotSplit(self), + @TextBox(*) => { + } + } +*/ + } + /** In general, these functions are transitively impure because they * may cause glyphs to be allocated. For now, it's impure because of * holder.get_image() diff --git a/src/servo/layout/text.rs b/src/servo/layout/text.rs index 095d5b6ae6f..3b8638888f3 100644 --- a/src/servo/layout/text.rs +++ b/src/servo/layout/text.rs @@ -5,7 +5,7 @@ use au::au; use geom::size::Size2D; use servo_text::text_run::TextRun; use servo_text::font_cache::FontCache; -use layout::box::{TextBox, RenderBox, UnscannedTextBox}; +use layout::box::{TextBox, RenderBox, RenderBoxData, UnscannedTextBox}; use layout::context::LayoutContext; pub struct TextBoxData { @@ -22,6 +22,15 @@ pub fn TextBoxData(run: @TextRun, offset: uint, length: uint) -> TextBoxData { } } +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); + @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 { pure fn raw_text() -> ~str; }