Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Side by Side Diff: sky/sdk/lib/widgets/basic.dart

Issue 1239573002: Make all the classes in basic.dart use consistent style. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 import 'dart:async'; 5 import 'dart:async';
6 import 'dart:sky' as sky; 6 import 'dart:sky' as sky;
7 7
8 import 'package:vector_math/vector_math.dart'; 8 import 'package:vector_math/vector_math.dart';
9 9
10 import 'package:sky/mojo/asset_bundle.dart'; 10 import 'package:sky/mojo/asset_bundle.dart';
11 import 'package:sky/mojo/net/image_cache.dart' as image_cache; 11 import 'package:sky/mojo/net/image_cache.dart' as image_cache;
12 import 'package:sky/painting/text_style.dart'; 12 import 'package:sky/painting/text_style.dart';
13 import 'package:sky/rendering/block.dart'; 13 import 'package:sky/rendering/block.dart';
14 import 'package:sky/rendering/box.dart'; 14 import 'package:sky/rendering/box.dart';
15 import 'package:sky/rendering/flex.dart'; 15 import 'package:sky/rendering/flex.dart';
16 import 'package:sky/rendering/object.dart'; 16 import 'package:sky/rendering/object.dart';
17 import 'package:sky/rendering/paragraph.dart'; 17 import 'package:sky/rendering/paragraph.dart';
18 import 'package:sky/rendering/stack.dart'; 18 import 'package:sky/rendering/stack.dart';
19 import 'package:sky/widgets/default_text_style.dart'; 19 import 'package:sky/widgets/default_text_style.dart';
20 import 'package:sky/widgets/widget.dart'; 20 import 'package:sky/widgets/widget.dart';
21 21
22 export 'package:sky/rendering/box.dart' show BackgroundImage, BoxConstraints, Bo xDecoration, Border, BorderSide, EdgeDims; 22 export 'package:sky/rendering/box.dart' show BackgroundImage, BoxConstraints, Bo xDecoration, Border, BorderSide, EdgeDims;
23 export 'package:sky/rendering/flex.dart' show FlexDirection, FlexJustifyContent, FlexAlignItems; 23 export 'package:sky/rendering/flex.dart' show FlexDirection, FlexJustifyContent, FlexAlignItems;
24 export 'package:sky/rendering/object.dart' show Point, Offset, Size, Rect, Color , Paint, Path; 24 export 'package:sky/rendering/object.dart' show Point, Offset, Size, Rect, Color , Paint, Path;
25 export 'package:sky/widgets/widget.dart' show Widget, Component, StatefulCompone nt, App, runApp, Listener, ParentDataNode; 25 export 'package:sky/widgets/widget.dart' show Widget, Component, StatefulCompone nt, App, runApp, Listener, ParentDataNode;
26 26
27
27 // PAINTING NODES 28 // PAINTING NODES
28 29
29 class Opacity extends OneChildRenderObjectWrapper { 30 class Opacity extends OneChildRenderObjectWrapper {
30 Opacity({ String key, this.opacity, Widget child }) 31 Opacity({ String key, this.opacity, Widget child })
31 : super(key: key, child: child); 32 : super(key: key, child: child);
32 33
33 RenderOpacity get root => super.root;
34 final double opacity; 34 final double opacity;
35 35
36 RenderOpacity createNode() => new RenderOpacity(opacity: opacity); 36 RenderOpacity createNode() => new RenderOpacity(opacity: opacity);
37 RenderOpacity get root => super.root;
37 38
38 void syncRenderObject(Opacity old) { 39 void syncRenderObject(Opacity old) {
39 super.syncRenderObject(old); 40 super.syncRenderObject(old);
40 root.opacity = opacity; 41 root.opacity = opacity;
41 } 42 }
42 } 43 }
43 44
44 class ColorFilter extends OneChildRenderObjectWrapper { 45 class ColorFilter extends OneChildRenderObjectWrapper {
45 ColorFilter({ String key, this.color, this.transferMode, Widget child }) 46 ColorFilter({ String key, this.color, this.transferMode, Widget child })
46 : super(key: key, child: child); 47 : super(key: key, child: child);
47 48
48 RenderColorFilter get root => super.root;
49 final Color color; 49 final Color color;
50 final sky.TransferMode transferMode; 50 final sky.TransferMode transferMode;
51 51
52 RenderColorFilter createNode() => new RenderColorFilter(color: color, transfer Mode: transferMode); 52 RenderColorFilter createNode() => new RenderColorFilter(color: color, transfer Mode: transferMode);
53 RenderColorFilter get root => super.root;
53 54
54 void syncRenderObject(ColorFilter old) { 55 void syncRenderObject(ColorFilter old) {
55 super.syncRenderObject(old); 56 super.syncRenderObject(old);
56 root.color = color; 57 root.color = color;
57 root.transferMode = transferMode; 58 root.transferMode = transferMode;
58 } 59 }
59 } 60 }
60 61
61 class DecoratedBox extends OneChildRenderObjectWrapper { 62 class DecoratedBox extends OneChildRenderObjectWrapper {
62
63 DecoratedBox({ String key, this.decoration, Widget child }) 63 DecoratedBox({ String key, this.decoration, Widget child })
64 : super(key: key, child: child); 64 : super(key: key, child: child);
65 65
66 RenderDecoratedBox get root => super.root;
67 final BoxDecoration decoration; 66 final BoxDecoration decoration;
68 67
69 RenderDecoratedBox createNode() => new RenderDecoratedBox(decoration: decorati on); 68 RenderDecoratedBox createNode() => new RenderDecoratedBox(decoration: decorati on);
69 RenderDecoratedBox get root => super.root;
70 70
71 void syncRenderObject(DecoratedBox old) { 71 void syncRenderObject(DecoratedBox old) {
72 super.syncRenderObject(old); 72 super.syncRenderObject(old);
73 root.decoration = decoration; 73 root.decoration = decoration;
74 } 74 }
75
76 } 75 }
77 76
78 class CustomPaint extends OneChildRenderObjectWrapper { 77 class CustomPaint extends OneChildRenderObjectWrapper {
79
80 CustomPaint({ String key, this.callback, this.token, Widget child }) 78 CustomPaint({ String key, this.callback, this.token, Widget child })
81 : super(key: key, child: child); 79 : super(key: key, child: child);
82 80
83 RenderCustomPaint get root => super.root;
84 final CustomPaintCallback callback; 81 final CustomPaintCallback callback;
85 final dynamic token; // set this to be repainted automatically when the token changes 82 final dynamic token; // set this to be repainted automatically when the token changes
86 83
87 RenderCustomPaint createNode() => new RenderCustomPaint(callback: callback); 84 RenderCustomPaint createNode() => new RenderCustomPaint(callback: callback);
85 RenderCustomPaint get root => super.root;
88 86
89 void syncRenderObject(CustomPaint old) { 87 void syncRenderObject(CustomPaint old) {
90 super.syncRenderObject(old); 88 super.syncRenderObject(old);
91 if (old != null && old.token != token) 89 if (old != null && old.token != token)
92 root.markNeedsPaint(); 90 root.markNeedsPaint();
93 root.callback = callback; 91 root.callback = callback;
94 } 92 }
95 93
96 void remove() { 94 void remove() {
97 root.callback = null; 95 root.callback = null;
98 super.remove(); 96 super.remove();
99 } 97 }
100
101 } 98 }
102 99
103 class ClipRect extends OneChildRenderObjectWrapper { 100 class ClipRect extends OneChildRenderObjectWrapper {
104 ClipRect({ String key, Widget child }) 101 ClipRect({ String key, Widget child })
105 : super(key: key, child: child); 102 : super(key: key, child: child);
106 103
104 RenderClipRect createNode() => new RenderClipRect();
107 RenderClipRect get root => super.root; 105 RenderClipRect get root => super.root;
108 RenderClipRect createNode() => new RenderClipRect();
109 106
110 // Nothing to sync, so we don't implement syncRenderObject() 107 // Nothing to sync, so we don't implement syncRenderObject()
111 } 108 }
112 109
113 class ClipRRect extends OneChildRenderObjectWrapper { 110 class ClipRRect extends OneChildRenderObjectWrapper {
111 ClipRRect({ String key, this.xRadius, this.yRadius, Widget child })
112 : super(key: key, child: child);
113
114 final double xRadius; 114 final double xRadius;
115 final double yRadius; 115 final double yRadius;
116 ClipRRect({ String key, Widget child, this.xRadius, this.yRadius })
117 : super(key: key, child: child);
118 116
117 RenderClipRRect createNode() => new RenderClipRRect(xRadius: xRadius, yRadius: yRadius);
119 RenderClipRRect get root => super.root; 118 RenderClipRRect get root => super.root;
120 RenderClipRRect createNode() => new RenderClipRRect(xRadius: xRadius, yRadius: yRadius);
121 119
122 void syncRenderObject(ClipRRect old) { 120 void syncRenderObject(ClipRRect old) {
123 super.syncRenderObject(old); 121 super.syncRenderObject(old);
124 root.xRadius = xRadius; 122 root.xRadius = xRadius;
125 root.yRadius = yRadius; 123 root.yRadius = yRadius;
126 } 124 }
127 } 125 }
128 126
129 class ClipOval extends OneChildRenderObjectWrapper { 127 class ClipOval extends OneChildRenderObjectWrapper {
130 ClipOval({ String key, Widget child }) 128 ClipOval({ String key, Widget child })
131 : super(key: key, child: child); 129 : super(key: key, child: child);
132 130
131 RenderClipOval createNode() => new RenderClipOval();
133 RenderClipOval get root => super.root; 132 RenderClipOval get root => super.root;
134 RenderClipOval createNode() => new RenderClipOval();
135 133
136 // Nothing to sync, so we don't implement syncRenderObject() 134 // Nothing to sync, so we don't implement syncRenderObject()
137 } 135 }
138 136
137
139 // POSITIONING AND SIZING NODES 138 // POSITIONING AND SIZING NODES
140 139
141 class Transform extends OneChildRenderObjectWrapper { 140 class Transform extends OneChildRenderObjectWrapper {
142
143 Transform({ String key, this.transform, Widget child }) 141 Transform({ String key, this.transform, Widget child })
144 : super(key: key, child: child); 142 : super(key: key, child: child);
145 143
146 RenderTransform get root => super.root;
147 final Matrix4 transform; 144 final Matrix4 transform;
148 145
149 RenderTransform createNode() => new RenderTransform(transform: transform); 146 RenderTransform createNode() => new RenderTransform(transform: transform);
147 RenderTransform get root => super.root;
150 148
151 void syncRenderObject(Transform old) { 149 void syncRenderObject(Transform old) {
152 super.syncRenderObject(old); 150 super.syncRenderObject(old);
153 root.transform = transform; 151 root.transform = transform;
154 } 152 }
155
156 } 153 }
157 154
158 class Padding extends OneChildRenderObjectWrapper { 155 class Padding extends OneChildRenderObjectWrapper {
159
160 Padding({ String key, this.padding, Widget child }) 156 Padding({ String key, this.padding, Widget child })
161 : super(key: key, child: child); 157 : super(key: key, child: child);
162 158
163 RenderPadding get root => super.root;
164 final EdgeDims padding; 159 final EdgeDims padding;
165 160
166 RenderPadding createNode() => new RenderPadding(padding: padding); 161 RenderPadding createNode() => new RenderPadding(padding: padding);
162 RenderPadding get root => super.root;
167 163
168 void syncRenderObject(Padding old) { 164 void syncRenderObject(Padding old) {
169 super.syncRenderObject(old); 165 super.syncRenderObject(old);
170 root.padding = padding; 166 root.padding = padding;
171 } 167 }
172
173 } 168 }
174 169
175 class Center extends OneChildRenderObjectWrapper { 170 class Center extends OneChildRenderObjectWrapper {
176 Center({ String key, Widget child }) 171 Center({ String key, Widget child })
177 : super(key: key, child: child); 172 : super(key: key, child: child);
178 173
174 RenderPositionedBox createNode() => new RenderPositionedBox();
179 RenderPositionedBox get root => super.root; 175 RenderPositionedBox get root => super.root;
180 RenderPositionedBox createNode() => new RenderPositionedBox();
181 176
182 // Nothing to sync, so we don't implement syncRenderObject() 177 // Nothing to sync, so we don't implement syncRenderObject()
183 } 178 }
184 179
185 class SizedBox extends OneChildRenderObjectWrapper { 180 class SizedBox extends OneChildRenderObjectWrapper {
186 181 SizedBox({ String key, this.width, this.height, Widget child })
187 SizedBox({ 182 : super(key: key, child: child);
188 String key,
189 this.width,
190 this.height,
191 Widget child
192 }) : super(key: key, child: child);
193
194 RenderConstrainedBox get root => super.root;
195 183
196 final double width; 184 final double width;
197 final double height; 185 final double height;
198 186
199 RenderConstrainedBox createNode() => new RenderConstrainedBox(additionalConstr aints: _additionalConstraints()); 187 RenderConstrainedBox createNode() => new RenderConstrainedBox(additionalConstr aints: _additionalConstraints());
188 RenderConstrainedBox get root => super.root;
200 189
201 BoxConstraints _additionalConstraints() { 190 BoxConstraints _additionalConstraints() {
202 var result = const BoxConstraints(); 191 BoxConstraints result = const BoxConstraints();
203 if (width != null) 192 if (width != null)
204 result = result.applyWidth(width); 193 result = result.applyWidth(width);
205 if (height != null) 194 if (height != null)
206 result = result.applyHeight(height); 195 result = result.applyHeight(height);
207 return result; 196 return result;
208 } 197 }
209 198
210 void syncRenderObject(SizedBox old) { 199 void syncRenderObject(SizedBox old) {
211 super.syncRenderObject(old); 200 super.syncRenderObject(old);
212 root.additionalConstraints = _additionalConstraints(); 201 root.additionalConstraints = _additionalConstraints();
213 } 202 }
214
215 } 203 }
216 204
217 class ConstrainedBox extends OneChildRenderObjectWrapper { 205 class ConstrainedBox extends OneChildRenderObjectWrapper {
218
219 ConstrainedBox({ String key, this.constraints, Widget child }) 206 ConstrainedBox({ String key, this.constraints, Widget child })
220 : super(key: key, child: child); 207 : super(key: key, child: child);
221 208
222 RenderConstrainedBox get root => super.root;
223
224 final BoxConstraints constraints; 209 final BoxConstraints constraints;
225 210
226 RenderConstrainedBox createNode() => new RenderConstrainedBox(additionalConstr aints: constraints); 211 RenderConstrainedBox createNode() => new RenderConstrainedBox(additionalConstr aints: constraints);
212 RenderConstrainedBox get root => super.root;
227 213
228 void syncRenderObject(ConstrainedBox old) { 214 void syncRenderObject(ConstrainedBox old) {
229 super.syncRenderObject(old); 215 super.syncRenderObject(old);
230 root.additionalConstraints = constraints; 216 root.additionalConstraints = constraints;
231 } 217 }
232
233 } 218 }
234 219
235 class ShrinkWrapWidth extends OneChildRenderObjectWrapper { 220 class ShrinkWrapWidth extends OneChildRenderObjectWrapper {
236 221 ShrinkWrapWidth({ String key, this.stepWidth, this.stepHeight, Widget child })
237 ShrinkWrapWidth({ 222 : super(key: key, child: child);
238 String key,
239 this.stepWidth,
240 this.stepHeight,
241 Widget child
242 }): super(key: key, child: child);
243
244 RenderShrinkWrapWidth get root => super.root;
245 223
246 final double stepWidth; 224 final double stepWidth;
247 final double stepHeight; 225 final double stepHeight;
248 226
249 RenderShrinkWrapWidth createNode() => new RenderShrinkWrapWidth(); 227 RenderShrinkWrapWidth createNode() => new RenderShrinkWrapWidth();
228 RenderShrinkWrapWidth get root => super.root;
250 229
251 void syncRenderObject(ShrinkWrapWidth old) { 230 void syncRenderObject(ShrinkWrapWidth old) {
252 super.syncRenderObject(old); 231 super.syncRenderObject(old);
253 root.stepWidth = stepWidth; 232 root.stepWidth = stepWidth;
254 root.stepHeight = stepHeight; 233 root.stepHeight = stepHeight;
255 } 234 }
256
257 } 235 }
258 236
259 class Baseline extends OneChildRenderObjectWrapper { 237 class Baseline extends OneChildRenderObjectWrapper {
238 Baseline({ String key, this.baseline, this.baselineType: TextBaseline.alphabet ic, Widget child })
239 : super(key: key, child: child);
260 240
261 Baseline({ 241 final double baseline; // in pixels
262 String key,
263 this.baseline, // in pixels
264 this.baselineType: TextBaseline.alphabetic,
265 Widget child
266 }): super(key: key, child: child);
267
268 RenderBaseline get root => super.root;
269
270 final double baseline;
271 final TextBaseline baselineType; 242 final TextBaseline baselineType;
272 243
273 RenderBaseline createNode() => new RenderBaseline(baseline: baseline, baseline Type: baselineType); 244 RenderBaseline createNode() => new RenderBaseline(baseline: baseline, baseline Type: baselineType);
245 RenderBaseline get root => super.root;
274 246
275 void syncRenderObject(Baseline old) { 247 void syncRenderObject(Baseline old) {
276 super.syncRenderObject(old); 248 super.syncRenderObject(old);
277 root.baseline = baseline; 249 root.baseline = baseline;
278 root.baselineType = baselineType; 250 root.baselineType = baselineType;
279 } 251 }
280
281 } 252 }
282 253
283 class Viewport extends OneChildRenderObjectWrapper { 254 class Viewport extends OneChildRenderObjectWrapper {
284 255 Viewport({ String key, this.offset: 0.0, Widget child })
285 Viewport({ 256 : super(key: key, child: child);
286 String key,
287 this.offset: 0.0,
288 Widget child
289 }) : super(key: key, child: child);
290 257
291 final double offset; 258 final double offset;
292 259
260 RenderViewport createNode() => new RenderViewport(scrollOffset: new Offset(0.0 , offset));
293 RenderViewport get root => super.root; 261 RenderViewport get root => super.root;
294 RenderViewport createNode() => new RenderViewport(scrollOffset: new Offset(0.0 , offset));
295 262
296 void syncRenderObject(Viewport old) { 263 void syncRenderObject(Viewport old) {
297 super.syncRenderObject(old); 264 super.syncRenderObject(old);
298 root.scrollOffset = new Offset(0.0, offset); 265 root.scrollOffset = new Offset(0.0, offset);
299 } 266 }
300
301 } 267 }
302 268
303 class SizeObserver extends OneChildRenderObjectWrapper { 269 class SizeObserver extends OneChildRenderObjectWrapper {
304
305 SizeObserver({ String key, this.callback, Widget child }) 270 SizeObserver({ String key, this.callback, Widget child })
306 : super(key: key, child: child); 271 : super(key: key, child: child);
307 272
308 RenderSizeObserver get root => super.root;
309 final SizeChangedCallback callback; 273 final SizeChangedCallback callback;
310 274
311 RenderSizeObserver createNode() => new RenderSizeObserver(callback: callback); 275 RenderSizeObserver createNode() => new RenderSizeObserver(callback: callback);
276 RenderSizeObserver get root => super.root;
312 277
313 void syncRenderObject(SizeObserver old) { 278 void syncRenderObject(SizeObserver old) {
314 super.syncRenderObject(old); 279 super.syncRenderObject(old);
315 root.callback = callback; 280 root.callback = callback;
316 } 281 }
317 282
318 void remove() { 283 void remove() {
319 root.callback = null; 284 root.callback = null;
320 super.remove(); 285 super.remove();
321 } 286 }
322
323 } 287 }
324 288
325 289
326 // CONVENIENCE CLASS TO COMBINE COMMON PAINTING, POSITIONING, AND SIZING NODES 290 // CONVENIENCE CLASS TO COMBINE COMMON PAINTING, POSITIONING, AND SIZING NODES
327 291
328 class Container extends Component { 292 class Container extends Component {
329 293
330 Container({ 294 Container({
331 String key, 295 String key,
332 this.child, 296 this.child,
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 345
382 } 346 }
383 347
384 348
385 // LAYOUT NODES 349 // LAYOUT NODES
386 350
387 class Block extends MultiChildRenderObjectWrapper { 351 class Block extends MultiChildRenderObjectWrapper {
388 Block(List<Widget> children, { String key }) 352 Block(List<Widget> children, { String key })
389 : super(key: key, children: children); 353 : super(key: key, children: children);
390 354
355 RenderBlock createNode() => new RenderBlock();
391 RenderBlock get root => super.root; 356 RenderBlock get root => super.root;
392 RenderBlock createNode() => new RenderBlock();
393 } 357 }
394 358
395 class Stack extends MultiChildRenderObjectWrapper { 359 class Stack extends MultiChildRenderObjectWrapper {
396 Stack(List<Widget> children, { String key }) 360 Stack(List<Widget> children, { String key })
397 : super(key: key, children: children); 361 : super(key: key, children: children);
398 362
363 RenderStack createNode() => new RenderStack();
399 RenderStack get root => super.root; 364 RenderStack get root => super.root;
400 RenderStack createNode() => new RenderStack();
401 } 365 }
402 366
403 class Positioned extends ParentDataNode { 367 class Positioned extends ParentDataNode {
404 Positioned({ 368 Positioned({
405 String key, 369 String key,
406 Widget child, 370 Widget child,
407 double top, 371 double top,
408 double right, 372 double right,
409 double bottom, 373 double bottom,
410 double left 374 double left
411 }) : super(child, 375 }) : super(child,
412 new StackParentData()..top = top 376 new StackParentData()..top = top
413 ..right = right 377 ..right = right
414 ..bottom = bottom 378 ..bottom = bottom
415 ..left = left, 379 ..left = left,
416 key: key); 380 key: key);
417 } 381 }
418 382
419 class Flex extends MultiChildRenderObjectWrapper { 383 class Flex extends MultiChildRenderObjectWrapper {
420 384
421 Flex(List<Widget> children, { 385 Flex(List<Widget> children, {
422 String key, 386 String key,
423 this.direction: FlexDirection.horizontal, 387 this.direction: FlexDirection.horizontal,
424 this.justifyContent: FlexJustifyContent.start, 388 this.justifyContent: FlexJustifyContent.start,
425 this.alignItems: FlexAlignItems.center 389 this.alignItems: FlexAlignItems.center
426 }) : super(key: key, children: children); 390 }) : super(key: key, children: children);
427 391
428 RenderFlex get root => super.root;
429 RenderFlex createNode() => new RenderFlex(direction: this.direction);
430
431 final FlexDirection direction; 392 final FlexDirection direction;
432 final FlexJustifyContent justifyContent; 393 final FlexJustifyContent justifyContent;
433 final FlexAlignItems alignItems; 394 final FlexAlignItems alignItems;
434 395
396 RenderFlex createNode() => new RenderFlex(direction: this.direction);
397 RenderFlex get root => super.root;
398
435 void syncRenderObject(Widget old) { 399 void syncRenderObject(Widget old) {
436 super.syncRenderObject(old); 400 super.syncRenderObject(old);
437 root.direction = direction; 401 root.direction = direction;
438 root.justifyContent = justifyContent; 402 root.justifyContent = justifyContent;
439 root.alignItems = alignItems; 403 root.alignItems = alignItems;
440 } 404 }
441 405
442 } 406 }
443 407
444 class Flexible extends ParentDataNode { 408 class Flexible extends ParentDataNode {
445 Flexible({ String key, Widget child, int flex: 1 }) 409 Flexible({ String key, int flex: 1, Widget child })
446 : super(child, new FlexBoxParentData()..flex = flex, key: key); 410 : super(child, new FlexBoxParentData()..flex = flex, key: key);
447 } 411 }
448 412
449 class Inline extends LeafRenderObjectWrapper { 413 class Inline extends LeafRenderObjectWrapper {
450 Inline({ String key, this.text }) : super(key: key); 414 Inline({ String key, this.text }) : super(key: key);
451 415
416 final InlineBase text;
417
418 RenderParagraph createNode() => new RenderParagraph(text);
452 RenderParagraph get root => super.root; 419 RenderParagraph get root => super.root;
453 RenderParagraph createNode() => new RenderParagraph(text);
454
455 final InlineBase text;
456 420
457 void syncRenderObject(Widget old) { 421 void syncRenderObject(Widget old) {
458 super.syncRenderObject(old); 422 super.syncRenderObject(old);
459 root.inline = text; 423 root.inline = text;
460 } 424 }
461
462 } 425 }
463 426
464 class StyledText extends Component { 427 class StyledText extends Component {
465 // elements ::= "string" | [<text-style> <elements>*] 428 // elements ::= "string" | [<text-style> <elements>*]
466 // Where "string" is text to display and text-style is an instance of 429 // Where "string" is text to display and text-style is an instance of
467 // TextStyle. The text-style applies to all of the elements that follow. 430 // TextStyle. The text-style applies to all of the elements that follow.
468 StyledText({ this.elements, String key }) : super(key: key); 431 StyledText({ this.elements, String key }) : super(key: key);
469 432
470 final dynamic elements; 433 final dynamic elements;
471 434
472 InlineBase _toInline(dynamic element) { 435 InlineBase _toInline(dynamic element) {
473 if (element is String) { 436 if (element is String)
474 return new InlineText(element); 437 return new InlineText(element);
475 } 438 if (element is Iterable && element.first is TextStyle)
476 if (element is Iterable && element.first is TextStyle) {
477 return new InlineStyle(element.first, element.skip(1).map(_toInline).toLis t()); 439 return new InlineStyle(element.first, element.skip(1).map(_toInline).toLis t());
478 }
479 throw new ArgumentError("invalid elements"); 440 throw new ArgumentError("invalid elements");
480 } 441 }
481 442
482 Widget build() { 443 Widget build() {
483 return new Inline(text: _toInline(elements)); 444 return new Inline(text: _toInline(elements));
484 } 445 }
485 } 446 }
486 447
487 class Text extends Component { 448 class Text extends Component {
488 Text(this.data, { String key, TextStyle this.style }) : super(key: key); 449 Text(this.data, { String key, TextStyle this.style }) : super(key: key);
450
489 final String data; 451 final String data;
490 final TextStyle style; 452 final TextStyle style;
491 bool get interchangeable => true; 453
492 Widget build() { 454 Widget build() {
493 InlineBase text = new InlineText(data); 455 InlineBase text = new InlineText(data);
494 TextStyle defaultStyle = DefaultTextStyle.of(this); 456 TextStyle defaultStyle = DefaultTextStyle.of(this);
495 TextStyle combinedStyle; 457 TextStyle combinedStyle;
496 if (defaultStyle != null) { 458 if (defaultStyle != null) {
497 if (style != null) 459 if (style != null)
498 combinedStyle = defaultStyle.merge(style); 460 combinedStyle = defaultStyle.merge(style);
499 else 461 else
500 combinedStyle = defaultStyle; 462 combinedStyle = defaultStyle;
501 } else { 463 } else {
502 combinedStyle = style; 464 combinedStyle = style;
503 } 465 }
504 if (combinedStyle != null) 466 if (combinedStyle != null)
505 text = new InlineStyle(combinedStyle, [text]); 467 text = new InlineStyle(combinedStyle, [text]);
506 return new Inline(text: text); 468 return new Inline(text: text);
507 } 469 }
508 } 470 }
509 471
510 class Image extends LeafRenderObjectWrapper { 472 class Image extends LeafRenderObjectWrapper {
511 Image({ sky.Image image, this.size }) 473 Image({ sky.Image image, this.size })
512 : image = image, super(key: image.hashCode.toString()); 474 : image = image,
513 475 super(key: image.hashCode.toString()); // TODO(ianh): Find a way to unique ly identify the sky.Image rather than using hashCode, which could collide
514 RenderImage get root => super.root;
515 RenderImage createNode() => new RenderImage(image, size);
516 476
517 final sky.Image image; 477 final sky.Image image;
518 final Size size; 478 final Size size;
519 479
480 RenderImage createNode() => new RenderImage(image, size);
481 RenderImage get root => super.root;
482
520 void syncRenderObject(Widget old) { 483 void syncRenderObject(Widget old) {
521 super.syncRenderObject(old); 484 super.syncRenderObject(old);
522 root.image = image; 485 root.image = image;
523 root.requestedSize = size; 486 root.requestedSize = size;
524 } 487 }
525 } 488 }
526 489
527 class FutureImage extends StatefulComponent { 490 class FutureImage extends StatefulComponent {
528 FutureImage({ this.image, this.size }); 491 FutureImage({ String key, this.image, this.size }) : super(key: key);
529 492
530 Future<sky.Image> image; 493 Future<sky.Image> image;
531 Size size; 494 Size size;
495
532 sky.Image _resolvedImage; 496 sky.Image _resolvedImage;
533 497
534 void didMount() {
535 super.didMount();
536 _resolveImage();
537 }
538
539 void _resolveImage() { 498 void _resolveImage() {
540 image.then((sky.Image resolvedImage) { 499 image.then((sky.Image resolvedImage) {
541 if (!mounted) 500 if (!mounted)
542 return; 501 return;
543 setState(() { 502 setState(() {
544 _resolvedImage = resolvedImage; 503 _resolvedImage = resolvedImage;
545 }); 504 });
546 }); 505 });
547 } 506 }
548 507
508 void didMount() {
509 super.didMount();
510 _resolveImage();
511 }
512
549 void syncFields(FutureImage source) { 513 void syncFields(FutureImage source) {
550 bool needToResolveImage = (image != source.image); 514 bool needToResolveImage = (image != source.image);
551 image = source.image; 515 image = source.image;
552 size = source.size; 516 size = source.size;
553 if (needToResolveImage) 517 if (needToResolveImage)
554 _resolveImage(); 518 _resolveImage();
555 } 519 }
556 520
557 Widget build() { 521 Widget build() {
558 return new Image(image: _resolvedImage, size: size); 522 return new Image(image: _resolvedImage, size: size);
559 } 523 }
560 } 524 }
561 525
562 class NetworkImage extends Component { 526 class NetworkImage extends Component {
563 NetworkImage({ String src, this.size }) : src = src, super(key: src); 527 NetworkImage({ String src, this.size })
528 : src = src,
529 super(key: src);
564 530
565 final String src; 531 final String src;
566 final Size size; 532 final Size size;
567 533
568 Widget build() { 534 Widget build() {
569 return new FutureImage(image: image_cache.load(src), size: size); 535 return new FutureImage(image: image_cache.load(src), size: size);
570 } 536 }
571 } 537 }
572 538
573 class AssetImage extends Component { 539 class AssetImage extends Component {
574 AssetImage({ this.bundle, String name, this.size }) 540 AssetImage({ String name, this.bundle, this.size })
575 : name = name, super(key: name); 541 : name = name,
542 super(key: name);
576 543
544 final String name;
577 final AssetBundle bundle; 545 final AssetBundle bundle;
578 final String name;
579 final Size size; 546 final Size size;
580 547
581 Widget build() { 548 Widget build() {
582 return new FutureImage(image: bundle.loadImage(name), size: size); 549 return new FutureImage(image: bundle.loadImage(name), size: size);
583 } 550 }
584 } 551 }
585 552
586 class WidgetToRenderBoxAdapter extends LeafRenderObjectWrapper { 553 class WidgetToRenderBoxAdapter extends LeafRenderObjectWrapper {
587
588 WidgetToRenderBoxAdapter(RenderBox renderBox) 554 WidgetToRenderBoxAdapter(RenderBox renderBox)
589 : renderBox = renderBox, 555 : renderBox = renderBox,
590 super(key: renderBox.hashCode.toString()); 556 super(key: renderBox.hashCode.toString()); // TODO(ianh): Find a way to un iquely identify the RenderBox rather than using hashCode, which could collide
591
592 RenderBox get root => super.root;
593 RenderBox createNode() => this.renderBox;
594 557
595 final RenderBox renderBox; 558 final RenderBox renderBox;
596 559
560 RenderBox createNode() => this.renderBox;
561 RenderBox get root => super.root;
562
597 void syncRenderObject(Widget old) { 563 void syncRenderObject(Widget old) {
598 super.syncRenderObject(old); 564 super.syncRenderObject(old);
599 if (old != null) { 565 if (old != null) {
600 assert(old is WidgetToRenderBoxAdapter); 566 assert(old is WidgetToRenderBoxAdapter);
601 assert(root == old.root); 567 assert(root == old.root);
602 } 568 }
603 } 569 }
604 570
605 void remove() { 571 void remove() {
606 RenderObjectWrapper ancestor = findAncestorRenderObjectWrapper(); 572 RenderObjectWrapper ancestor = findAncestorRenderObjectWrapper();
607 assert(ancestor is RenderObjectWrapper); 573 assert(ancestor is RenderObjectWrapper);
574 assert(ancestor.root == root.parent);
608 ancestor.detachChildRoot(this); 575 ancestor.detachChildRoot(this);
609 super.remove(); 576 super.remove();
610 } 577 }
611
612 } 578 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698