From 9cb9e2ed8d2e4cf2ae69572f101d291a01bfceed Mon Sep 17 00:00:00 2001 From: Hans Muller Date: Tue, 16 Jun 2015 16:48:08 -0700 Subject: [PATCH] Styling for text fragments This is a completion of Eric's WIP patch: https://codereview.chromium.org/1179663005/ Low level support for creating a paragraph that contains runs of styled text. The styles may be nested. The Paragraph and RenderParagraph classes have been replaced by Inline and RenderInline. Styled text is defined with a tree of InlineText and InlineStyle objects. R=abarth@chromium.org Review URL: https://codereview.chromium.org/1177833012. --- examples/rendering/interactive_flex.dart | 8 ++++++-- examples/rendering/justify_content.dart | 2 +- examples/rendering/render_paragraph.dart | 5 ++++- examples/rendering/touch_demo.dart | 11 ++++++----- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/examples/rendering/interactive_flex.dart b/examples/rendering/interactive_flex.dart index 4aaed292c56..bdcf71580a4 100644 --- a/examples/rendering/interactive_flex.dart +++ b/examples/rendering/interactive_flex.dart @@ -75,8 +75,12 @@ porchetta bacon kevin meatball meatloaf pig beef ribs chicken. Brisket ribeye andouille leberkas capicola meatloaf. Chicken pig ball tip pork picanha bresaola alcatra. Pork pork belly alcatra, flank chuck drumstick biltong doner jowl. Pancetta meatball tongue tenderloin rump tail jowl boudin."""; - RenderParagraph paragraph = new RenderParagraph(text: meatyString, color: const Color(0xFF009900)); - padding = new RenderPadding(padding: const EdgeDims.all(10.0), child: paragraph); + var text = new InlineStyle( + new TextStyle(color: const Color(0xFF009900)), + [new InlineText(meatyString)]); + padding = new RenderPadding( + padding: const EdgeDims.all(10.0), + child: new RenderParagraph(text)); column.add(padding); // Bottom cell diff --git a/examples/rendering/justify_content.dart b/examples/rendering/justify_content.dart index f267a2f43ee..ef7cf3fd5c5 100644 --- a/examples/rendering/justify_content.dart +++ b/examples/rendering/justify_content.dart @@ -20,7 +20,7 @@ void main() { var table = new RenderFlex(direction: FlexDirection.vertical); void addRow(FlexJustifyContent justify) { - RenderParagraph paragraph = new RenderParagraph(text: "${justify}"); + RenderParagraph paragraph = new RenderParagraph(new InlineText("${justify}")); table.add(new RenderPadding(child: paragraph, padding: new EdgeDims.only(top: 20.0))); var row = new RenderFlex(direction: FlexDirection.horizontal); row.add(new RenderSolidColorBox(const Color(0xFFFFCCCC), desiredSize: new Size(80.0, 60.0))); diff --git a/examples/rendering/render_paragraph.dart b/examples/rendering/render_paragraph.dart index 7ed158ff4f7..918cbcd33da 100644 --- a/examples/rendering/render_paragraph.dart +++ b/examples/rendering/render_paragraph.dart @@ -31,9 +31,12 @@ andouille leberkas capicola meatloaf. Chicken pig ball tip pork picanha bresaola alcatra. Pork pork belly alcatra, flank chuck drumstick biltong doner jowl. Pancetta meatball tongue tenderloin rump tail jowl boudin."""; + var text = new InlineStyle( + new TextStyle(color: const Color(0xFF009900)), + [new InlineText(meatyString)]); child = new RenderDecoratedBox( decoration: new BoxDecoration(backgroundColor: const Color(0xFFFFFFFF)), - child: new RenderParagraph(text: meatyString, color: const Color(0xFF009900)) + child: new RenderParagraph(text) ); flexRoot.add(child); child.parentData.flex = 1; diff --git a/examples/rendering/touch_demo.dart b/examples/rendering/touch_demo.dart index 802ef593390..5f701fe32f5 100644 --- a/examples/rendering/touch_demo.dart +++ b/examples/rendering/touch_demo.dart @@ -80,13 +80,14 @@ class RenderTouchDemo extends RenderBox { AppView app; void main() { - var para = new RenderParagraph(text: "Touch me!"); + var paragraph = new RenderParagraph(new InlineText("Touch me!")); var stack = new RenderStack(children: [ new RenderTouchDemo(), - para, + paragraph, ]); - // Make the paragraph not fill the whole screen so it doesn't eat events. - para.parentData..top = 40.0 - ..left = 20.0; + // Prevent the RenderParagraph from filling the whole screen so + // that it doesn't eat events. + paragraph.parentData..top = 40.0 + ..left = 20.0; app = new AppView(root: stack); }