|
4 | 4 |
|
5 | 5 | // @dart = 2.6 |
6 | 6 | import 'dart:async'; |
| 7 | +import 'dart:math' as math; |
7 | 8 |
|
8 | 9 | import 'package:test/bootstrap/browser.dart'; |
9 | 10 | import 'package:test/test.dart'; |
@@ -153,6 +154,50 @@ void testMain() async { |
153 | 154 | return takeScreenshot(canvas, bounds, 'canvas_paragraph_align_dom'); |
154 | 155 | }); |
155 | 156 |
|
| 157 | + void testAlignAndTransform(EngineCanvas canvas) { |
| 158 | + CanvasParagraph paragraph; |
| 159 | + |
| 160 | + void build(CanvasParagraphBuilder builder) { |
| 161 | + builder.pushStyle(EngineTextStyle.only(color: white)); |
| 162 | + builder.addText('Lorem '); |
| 163 | + builder.pushStyle(EngineTextStyle.only(color: red)); |
| 164 | + builder.addText('ipsum\n'); |
| 165 | + builder.pushStyle(EngineTextStyle.only(color: yellow)); |
| 166 | + builder.addText('dolor'); |
| 167 | + } |
| 168 | + |
| 169 | + void drawParagraphAt(Offset offset, TextAlign align) { |
| 170 | + paragraph = rich( |
| 171 | + ParagraphStyle(fontFamily: 'Roboto', fontSize: 20.0, textAlign: align), |
| 172 | + build, |
| 173 | + )..layout(constrain(150.0)); |
| 174 | + canvas.save(); |
| 175 | + canvas.translate(offset.dx, offset.dy); |
| 176 | + canvas.rotate(math.pi / 4); |
| 177 | + final Rect rect = |
| 178 | + Rect.fromLTRB(0.0, 0.0, 150.0, paragraph.height); |
| 179 | + canvas.drawRect(rect, SurfacePaintData()..color = black); |
| 180 | + canvas.drawParagraph(paragraph, Offset.zero); |
| 181 | + canvas.restore(); |
| 182 | + } |
| 183 | + |
| 184 | + drawParagraphAt(Offset(50.0, 0.0), TextAlign.left); |
| 185 | + drawParagraphAt(Offset(150.0, 0.0), TextAlign.center); |
| 186 | + drawParagraphAt(Offset(250.0, 0.0), TextAlign.right); |
| 187 | + } |
| 188 | + |
| 189 | + test('alignment and transform', () { |
| 190 | + final canvas = BitmapCanvas(bounds, RenderStrategy()); |
| 191 | + testAlignAndTransform(canvas); |
| 192 | + return takeScreenshot(canvas, bounds, 'canvas_paragraph_align_transform'); |
| 193 | + }); |
| 194 | + |
| 195 | + test('alignment and transform (DOM)', () { |
| 196 | + final canvas = DomCanvas(domRenderer.createElement('flt-picture')); |
| 197 | + testAlignAndTransform(canvas); |
| 198 | + return takeScreenshot(canvas, bounds, 'canvas_paragraph_align_transform_dom'); |
| 199 | + }); |
| 200 | + |
156 | 201 | test('paints spans with varying heights/baselines', () { |
157 | 202 | final canvas = BitmapCanvas(bounds, RenderStrategy()); |
158 | 203 |
|
|
0 commit comments