| OLD | NEW |
| 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 '../mojo/asset_bundle.dart'; | 10 import '../mojo/asset_bundle.dart'; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 export '../rendering/object.dart' show Point, Offset, Size, Rect, Color, Paint,
Path; | 24 export '../rendering/object.dart' show Point, Offset, Size, Rect, Color, Paint,
Path; |
| 25 export 'widget.dart' show Widget, Component, StatefulComponent, App, runApp, Lis
tener, ParentDataNode; | 25 export 'widget.dart' show Widget, Component, StatefulComponent, App, runApp, Lis
tener, ParentDataNode; |
| 26 | 26 |
| 27 | 27 |
| 28 // PAINTING NODES | 28 // PAINTING NODES |
| 29 | 29 |
| 30 class Opacity extends OneChildRenderObjectWrapper { | 30 class Opacity extends OneChildRenderObjectWrapper { |
| 31 Opacity({ String key, this.opacity, Widget child }) | 31 Opacity({ String key, this.opacity, Widget child }) |
| 32 : super(key: key, child: child); | 32 : super(key: key, child: child); |
| 33 | 33 |
| 34 @override |
| 34 RenderOpacity get root => super.root; | 35 RenderOpacity get root => super.root; |
| 35 final double opacity; | 36 final double opacity; |
| 36 | 37 |
| 38 @override |
| 37 RenderOpacity createNode() => new RenderOpacity(opacity: opacity); | 39 RenderOpacity createNode() => new RenderOpacity(opacity: opacity); |
| 38 | 40 |
| 41 @override |
| 39 void syncRenderObject(Opacity old) { | 42 void syncRenderObject(Opacity old) { |
| 40 super.syncRenderObject(old); | 43 super.syncRenderObject(old); |
| 41 root.opacity = opacity; | 44 root.opacity = opacity; |
| 42 } | 45 } |
| 43 } | 46 } |
| 44 | 47 |
| 45 class ColorFilter extends OneChildRenderObjectWrapper { | 48 class ColorFilter extends OneChildRenderObjectWrapper { |
| 46 ColorFilter({ String key, this.color, this.transferMode, Widget child }) | 49 ColorFilter({ String key, this.color, this.transferMode, Widget child }) |
| 47 : super(key: key, child: child); | 50 : super(key: key, child: child); |
| 48 | 51 |
| 52 @override |
| 49 RenderColorFilter get root => super.root; | 53 RenderColorFilter get root => super.root; |
| 50 final Color color; | 54 final Color color; |
| 51 final sky.TransferMode transferMode; | 55 final sky.TransferMode transferMode; |
| 52 | 56 |
| 57 @override |
| 53 RenderColorFilter createNode() => new RenderColorFilter(color: color, transfer
Mode: transferMode); | 58 RenderColorFilter createNode() => new RenderColorFilter(color: color, transfer
Mode: transferMode); |
| 54 | 59 |
| 60 @override |
| 55 void syncRenderObject(ColorFilter old) { | 61 void syncRenderObject(ColorFilter old) { |
| 56 super.syncRenderObject(old); | 62 super.syncRenderObject(old); |
| 57 root.color = color; | 63 root.color = color; |
| 58 root.transferMode = transferMode; | 64 root.transferMode = transferMode; |
| 59 } | 65 } |
| 60 } | 66 } |
| 61 | 67 |
| 62 class DecoratedBox extends OneChildRenderObjectWrapper { | 68 class DecoratedBox extends OneChildRenderObjectWrapper { |
| 63 | 69 |
| 64 DecoratedBox({ String key, this.decoration, Widget child }) | 70 DecoratedBox({ String key, this.decoration, Widget child }) |
| 65 : super(key: key, child: child); | 71 : super(key: key, child: child); |
| 66 | 72 |
| 73 @override |
| 67 RenderDecoratedBox get root => super.root; | 74 RenderDecoratedBox get root => super.root; |
| 68 final BoxDecoration decoration; | 75 final BoxDecoration decoration; |
| 69 | 76 |
| 77 @override |
| 70 RenderDecoratedBox createNode() => new RenderDecoratedBox(decoration: decorati
on); | 78 RenderDecoratedBox createNode() => new RenderDecoratedBox(decoration: decorati
on); |
| 71 | 79 |
| 80 @override |
| 72 void syncRenderObject(DecoratedBox old) { | 81 void syncRenderObject(DecoratedBox old) { |
| 73 super.syncRenderObject(old); | 82 super.syncRenderObject(old); |
| 74 root.decoration = decoration; | 83 root.decoration = decoration; |
| 75 } | 84 } |
| 76 | 85 |
| 77 } | 86 } |
| 78 | 87 |
| 79 class CustomPaint extends OneChildRenderObjectWrapper { | 88 class CustomPaint extends OneChildRenderObjectWrapper { |
| 80 | 89 |
| 81 CustomPaint({ String key, this.callback, this.token, Widget child }) | 90 CustomPaint({ String key, this.callback, this.token, Widget child }) |
| 82 : super(key: key, child: child); | 91 : super(key: key, child: child); |
| 83 | 92 |
| 93 @override |
| 84 RenderCustomPaint get root => super.root; | 94 RenderCustomPaint get root => super.root; |
| 85 final CustomPaintCallback callback; | 95 final CustomPaintCallback callback; |
| 86 final dynamic token; // set this to be repainted automatically when the token
changes | 96 final dynamic token; // set this to be repainted automatically when the token
changes |
| 87 | 97 |
| 98 @override |
| 88 RenderCustomPaint createNode() => new RenderCustomPaint(callback: callback); | 99 RenderCustomPaint createNode() => new RenderCustomPaint(callback: callback); |
| 89 | 100 |
| 101 @override |
| 90 void syncRenderObject(CustomPaint old) { | 102 void syncRenderObject(CustomPaint old) { |
| 91 super.syncRenderObject(old); | 103 super.syncRenderObject(old); |
| 92 if (old != null && old.token != token) | 104 if (old != null && old.token != token) |
| 93 root.markNeedsPaint(); | 105 root.markNeedsPaint(); |
| 94 root.callback = callback; | 106 root.callback = callback; |
| 95 } | 107 } |
| 96 | 108 |
| 109 @override |
| 97 void remove() { | 110 void remove() { |
| 98 root.callback = null; | 111 root.callback = null; |
| 99 super.remove(); | 112 super.remove(); |
| 100 } | 113 } |
| 101 | 114 |
| 102 } | 115 } |
| 103 | 116 |
| 104 class ClipRect extends OneChildRenderObjectWrapper { | 117 class ClipRect extends OneChildRenderObjectWrapper { |
| 105 ClipRect({ String key, Widget child }) | 118 ClipRect({ String key, Widget child }) |
| 106 : super(key: key, child: child); | 119 : super(key: key, child: child); |
| 107 | 120 |
| 121 @override |
| 108 RenderClipRect get root => super.root; | 122 RenderClipRect get root => super.root; |
| 123 |
| 124 @override |
| 109 RenderClipRect createNode() => new RenderClipRect(); | 125 RenderClipRect createNode() => new RenderClipRect(); |
| 110 | 126 |
| 111 // Nothing to sync, so we don't implement syncRenderObject() | 127 // Nothing to sync, so we don't implement syncRenderObject() |
| 112 } | 128 } |
| 113 | 129 |
| 114 class ClipRRect extends OneChildRenderObjectWrapper { | 130 class ClipRRect extends OneChildRenderObjectWrapper { |
| 115 final double xRadius; | 131 final double xRadius; |
| 116 final double yRadius; | 132 final double yRadius; |
| 117 ClipRRect({ String key, Widget child, this.xRadius, this.yRadius }) | 133 ClipRRect({ String key, Widget child, this.xRadius, this.yRadius }) |
| 118 : super(key: key, child: child); | 134 : super(key: key, child: child); |
| 119 | 135 |
| 136 @override |
| 120 RenderClipRRect get root => super.root; | 137 RenderClipRRect get root => super.root; |
| 138 |
| 139 @override |
| 121 RenderClipRRect createNode() => new RenderClipRRect(xRadius: xRadius, yRadius:
yRadius); | 140 RenderClipRRect createNode() => new RenderClipRRect(xRadius: xRadius, yRadius:
yRadius); |
| 122 | 141 |
| 123 void syncRenderObject(ClipRRect old) { | 142 void syncRenderObject(ClipRRect old) { |
| 124 super.syncRenderObject(old); | 143 super.syncRenderObject(old); |
| 125 root.xRadius = xRadius; | 144 root.xRadius = xRadius; |
| 126 root.yRadius = yRadius; | 145 root.yRadius = yRadius; |
| 127 } | 146 } |
| 128 } | 147 } |
| 129 | 148 |
| 130 class ClipOval extends OneChildRenderObjectWrapper { | 149 class ClipOval extends OneChildRenderObjectWrapper { |
| 131 ClipOval({ String key, Widget child }) | 150 ClipOval({ String key, Widget child }) |
| 132 : super(key: key, child: child); | 151 : super(key: key, child: child); |
| 133 | 152 |
| 153 @override |
| 134 RenderClipOval get root => super.root; | 154 RenderClipOval get root => super.root; |
| 155 |
| 156 @override |
| 135 RenderClipOval createNode() => new RenderClipOval(); | 157 RenderClipOval createNode() => new RenderClipOval(); |
| 136 | 158 |
| 137 // Nothing to sync, so we don't implement syncRenderObject() | 159 // Nothing to sync, so we don't implement syncRenderObject() |
| 138 } | 160 } |
| 139 | 161 |
| 140 // POSITIONING AND SIZING NODES | 162 // POSITIONING AND SIZING NODES |
| 141 | 163 |
| 142 class Transform extends OneChildRenderObjectWrapper { | 164 class Transform extends OneChildRenderObjectWrapper { |
| 143 | 165 |
| 144 Transform({ String key, this.transform, Widget child }) | 166 Transform({ String key, this.transform, Widget child }) |
| 145 : super(key: key, child: child); | 167 : super(key: key, child: child); |
| 146 | 168 |
| 169 @override |
| 147 RenderTransform get root => super.root; | 170 RenderTransform get root => super.root; |
| 148 final Matrix4 transform; | 171 final Matrix4 transform; |
| 149 | 172 |
| 173 @override |
| 150 RenderTransform createNode() => new RenderTransform(transform: transform); | 174 RenderTransform createNode() => new RenderTransform(transform: transform); |
| 151 | 175 |
| 176 @override |
| 152 void syncRenderObject(Transform old) { | 177 void syncRenderObject(Transform old) { |
| 153 super.syncRenderObject(old); | 178 super.syncRenderObject(old); |
| 154 root.transform = transform; | 179 root.transform = transform; |
| 155 } | 180 } |
| 156 | 181 |
| 157 } | 182 } |
| 158 | 183 |
| 159 class Padding extends OneChildRenderObjectWrapper { | 184 class Padding extends OneChildRenderObjectWrapper { |
| 160 | 185 |
| 161 Padding({ String key, this.padding, Widget child }) | 186 Padding({ String key, this.padding, Widget child }) |
| 162 : super(key: key, child: child); | 187 : super(key: key, child: child); |
| 163 | 188 |
| 189 @override |
| 164 RenderPadding get root => super.root; | 190 RenderPadding get root => super.root; |
| 165 final EdgeDims padding; | 191 final EdgeDims padding; |
| 166 | 192 |
| 193 @override |
| 167 RenderPadding createNode() => new RenderPadding(padding: padding); | 194 RenderPadding createNode() => new RenderPadding(padding: padding); |
| 168 | 195 |
| 196 @override |
| 169 void syncRenderObject(Padding old) { | 197 void syncRenderObject(Padding old) { |
| 170 super.syncRenderObject(old); | 198 super.syncRenderObject(old); |
| 171 root.padding = padding; | 199 root.padding = padding; |
| 172 } | 200 } |
| 173 | 201 |
| 174 } | 202 } |
| 175 | 203 |
| 176 class Center extends OneChildRenderObjectWrapper { | 204 class Center extends OneChildRenderObjectWrapper { |
| 177 Center({ String key, Widget child }) | 205 Center({ String key, Widget child }) |
| 178 : super(key: key, child: child); | 206 : super(key: key, child: child); |
| 179 | 207 |
| 208 @override |
| 180 RenderPositionedBox get root => super.root; | 209 RenderPositionedBox get root => super.root; |
| 210 |
| 211 @override |
| 181 RenderPositionedBox createNode() => new RenderPositionedBox(); | 212 RenderPositionedBox createNode() => new RenderPositionedBox(); |
| 182 | 213 |
| 183 // Nothing to sync, so we don't implement syncRenderObject() | 214 // Nothing to sync, so we don't implement syncRenderObject() |
| 184 } | 215 } |
| 185 | 216 |
| 186 class SizedBox extends OneChildRenderObjectWrapper { | 217 class SizedBox extends OneChildRenderObjectWrapper { |
| 187 | 218 |
| 188 SizedBox({ | 219 SizedBox({ |
| 189 String key, | 220 String key, |
| 190 this.width, | 221 this.width, |
| 191 this.height, | 222 this.height, |
| 192 Widget child | 223 Widget child |
| 193 }) : super(key: key, child: child); | 224 }) : super(key: key, child: child); |
| 194 | 225 |
| 226 @override |
| 195 RenderConstrainedBox get root => super.root; | 227 RenderConstrainedBox get root => super.root; |
| 196 | 228 |
| 197 final double width; | 229 final double width; |
| 198 final double height; | 230 final double height; |
| 199 | 231 |
| 232 @override |
| 200 RenderConstrainedBox createNode() => new RenderConstrainedBox(additionalConstr
aints: _additionalConstraints()); | 233 RenderConstrainedBox createNode() => new RenderConstrainedBox(additionalConstr
aints: _additionalConstraints()); |
| 201 | 234 |
| 202 BoxConstraints _additionalConstraints() { | 235 BoxConstraints _additionalConstraints() { |
| 203 var result = const BoxConstraints(); | 236 var result = const BoxConstraints(); |
| 204 if (width != null) | 237 if (width != null) |
| 205 result = result.applyWidth(width); | 238 result = result.applyWidth(width); |
| 206 if (height != null) | 239 if (height != null) |
| 207 result = result.applyHeight(height); | 240 result = result.applyHeight(height); |
| 208 return result; | 241 return result; |
| 209 } | 242 } |
| 210 | 243 |
| 244 @override |
| 211 void syncRenderObject(SizedBox old) { | 245 void syncRenderObject(SizedBox old) { |
| 212 super.syncRenderObject(old); | 246 super.syncRenderObject(old); |
| 213 root.additionalConstraints = _additionalConstraints(); | 247 root.additionalConstraints = _additionalConstraints(); |
| 214 } | 248 } |
| 215 | 249 |
| 216 } | 250 } |
| 217 | 251 |
| 218 class ConstrainedBox extends OneChildRenderObjectWrapper { | 252 class ConstrainedBox extends OneChildRenderObjectWrapper { |
| 219 | 253 |
| 220 ConstrainedBox({ String key, this.constraints, Widget child }) | 254 ConstrainedBox({ String key, this.constraints, Widget child }) |
| 221 : super(key: key, child: child); | 255 : super(key: key, child: child); |
| 222 | 256 |
| 257 @override |
| 223 RenderConstrainedBox get root => super.root; | 258 RenderConstrainedBox get root => super.root; |
| 224 | 259 |
| 225 final BoxConstraints constraints; | 260 final BoxConstraints constraints; |
| 226 | 261 |
| 262 @override |
| 227 RenderConstrainedBox createNode() => new RenderConstrainedBox(additionalConstr
aints: constraints); | 263 RenderConstrainedBox createNode() => new RenderConstrainedBox(additionalConstr
aints: constraints); |
| 228 | 264 |
| 265 @override |
| 229 void syncRenderObject(ConstrainedBox old) { | 266 void syncRenderObject(ConstrainedBox old) { |
| 230 super.syncRenderObject(old); | 267 super.syncRenderObject(old); |
| 231 root.additionalConstraints = constraints; | 268 root.additionalConstraints = constraints; |
| 232 } | 269 } |
| 233 | 270 |
| 234 } | 271 } |
| 235 | 272 |
| 236 class ShrinkWrapWidth extends OneChildRenderObjectWrapper { | 273 class ShrinkWrapWidth extends OneChildRenderObjectWrapper { |
| 237 | 274 |
| 238 ShrinkWrapWidth({ | 275 ShrinkWrapWidth({ |
| 239 String key, | 276 String key, |
| 240 this.stepWidth, | 277 this.stepWidth, |
| 241 this.stepHeight, | 278 this.stepHeight, |
| 242 Widget child | 279 Widget child |
| 243 }): super(key: key, child: child); | 280 }): super(key: key, child: child); |
| 244 | 281 |
| 282 @override |
| 245 RenderShrinkWrapWidth get root => super.root; | 283 RenderShrinkWrapWidth get root => super.root; |
| 246 | 284 |
| 247 final double stepWidth; | 285 final double stepWidth; |
| 248 final double stepHeight; | 286 final double stepHeight; |
| 249 | 287 |
| 288 @override |
| 250 RenderShrinkWrapWidth createNode() => new RenderShrinkWrapWidth(); | 289 RenderShrinkWrapWidth createNode() => new RenderShrinkWrapWidth(); |
| 251 | 290 |
| 291 @override |
| 252 void syncRenderObject(ShrinkWrapWidth old) { | 292 void syncRenderObject(ShrinkWrapWidth old) { |
| 253 super.syncRenderObject(old); | 293 super.syncRenderObject(old); |
| 254 root.stepWidth = stepWidth; | 294 root.stepWidth = stepWidth; |
| 255 root.stepHeight = stepHeight; | 295 root.stepHeight = stepHeight; |
| 256 } | 296 } |
| 257 | 297 |
| 258 } | 298 } |
| 259 | 299 |
| 260 class Baseline extends OneChildRenderObjectWrapper { | 300 class Baseline extends OneChildRenderObjectWrapper { |
| 261 | 301 |
| 262 Baseline({ | 302 Baseline({ |
| 263 String key, | 303 String key, |
| 264 this.baseline, // in pixels | 304 this.baseline, // in pixels |
| 265 this.baselineType: TextBaseline.alphabetic, | 305 this.baselineType: TextBaseline.alphabetic, |
| 266 Widget child | 306 Widget child |
| 267 }): super(key: key, child: child); | 307 }): super(key: key, child: child); |
| 268 | 308 |
| 309 @override |
| 269 RenderBaseline get root => super.root; | 310 RenderBaseline get root => super.root; |
| 270 | 311 |
| 271 final double baseline; | 312 final double baseline; |
| 272 final TextBaseline baselineType; | 313 final TextBaseline baselineType; |
| 273 | 314 |
| 315 @override |
| 274 RenderBaseline createNode() => new RenderBaseline(baseline: baseline, baseline
Type: baselineType); | 316 RenderBaseline createNode() => new RenderBaseline(baseline: baseline, baseline
Type: baselineType); |
| 275 | 317 |
| 318 @override |
| 276 void syncRenderObject(Baseline old) { | 319 void syncRenderObject(Baseline old) { |
| 277 super.syncRenderObject(old); | 320 super.syncRenderObject(old); |
| 278 root.baseline = baseline; | 321 root.baseline = baseline; |
| 279 root.baselineType = baselineType; | 322 root.baselineType = baselineType; |
| 280 } | 323 } |
| 281 | 324 |
| 282 } | 325 } |
| 283 | 326 |
| 284 class SizeObserver extends OneChildRenderObjectWrapper { | 327 class SizeObserver extends OneChildRenderObjectWrapper { |
| 285 | 328 |
| 286 SizeObserver({ String key, this.callback, Widget child }) | 329 SizeObserver({ String key, this.callback, Widget child }) |
| 287 : super(key: key, child: child); | 330 : super(key: key, child: child); |
| 288 | 331 |
| 332 @override |
| 289 RenderSizeObserver get root => super.root; | 333 RenderSizeObserver get root => super.root; |
| 290 final SizeChangedCallback callback; | 334 final SizeChangedCallback callback; |
| 291 | 335 |
| 336 @override |
| 292 RenderSizeObserver createNode() => new RenderSizeObserver(callback: callback); | 337 RenderSizeObserver createNode() => new RenderSizeObserver(callback: callback); |
| 293 | 338 |
| 339 @override |
| 294 void syncRenderObject(SizeObserver old) { | 340 void syncRenderObject(SizeObserver old) { |
| 295 super.syncRenderObject(old); | 341 super.syncRenderObject(old); |
| 296 root.callback = callback; | 342 root.callback = callback; |
| 297 } | 343 } |
| 298 | 344 |
| 345 @override |
| 299 void remove() { | 346 void remove() { |
| 300 root.callback = null; | 347 root.callback = null; |
| 301 super.remove(); | 348 super.remove(); |
| 302 } | 349 } |
| 303 | 350 |
| 304 } | 351 } |
| 305 | 352 |
| 306 | 353 |
| 307 // CONVENIENCE CLASS TO COMBINE COMMON PAINTING, POSITIONING, AND SIZING NODES | 354 // CONVENIENCE CLASS TO COMBINE COMMON PAINTING, POSITIONING, AND SIZING NODES |
| 308 | 355 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 322 | 369 |
| 323 final Widget child; | 370 final Widget child; |
| 324 final BoxConstraints constraints; | 371 final BoxConstraints constraints; |
| 325 final BoxDecoration decoration; | 372 final BoxDecoration decoration; |
| 326 final EdgeDims margin; | 373 final EdgeDims margin; |
| 327 final EdgeDims padding; | 374 final EdgeDims padding; |
| 328 final Matrix4 transform; | 375 final Matrix4 transform; |
| 329 final double width; | 376 final double width; |
| 330 final double height; | 377 final double height; |
| 331 | 378 |
| 379 @override |
| 332 Widget build() { | 380 Widget build() { |
| 333 Widget current = child; | 381 Widget current = child; |
| 334 | 382 |
| 335 if (child == null && width == null && height == null) | 383 if (child == null && width == null && height == null) |
| 336 current = new ConstrainedBox(constraints: BoxConstraints.expand); | 384 current = new ConstrainedBox(constraints: BoxConstraints.expand); |
| 337 | 385 |
| 338 if (padding != null) | 386 if (padding != null) |
| 339 current = new Padding(padding: padding, child: current); | 387 current = new Padding(padding: padding, child: current); |
| 340 | 388 |
| 341 if (decoration != null) | 389 if (decoration != null) |
| (...skipping 20 matching lines...) Expand all Loading... |
| 362 | 410 |
| 363 } | 411 } |
| 364 | 412 |
| 365 | 413 |
| 366 // LAYOUT NODES | 414 // LAYOUT NODES |
| 367 | 415 |
| 368 class Block extends MultiChildRenderObjectWrapper { | 416 class Block extends MultiChildRenderObjectWrapper { |
| 369 Block(List<Widget> children, { String key }) | 417 Block(List<Widget> children, { String key }) |
| 370 : super(key: key, children: children); | 418 : super(key: key, children: children); |
| 371 | 419 |
| 420 @override |
| 372 RenderBlock get root => super.root; | 421 RenderBlock get root => super.root; |
| 422 |
| 423 @override |
| 373 RenderBlock createNode() => new RenderBlock(); | 424 RenderBlock createNode() => new RenderBlock(); |
| 374 } | 425 } |
| 375 | 426 |
| 376 class Stack extends MultiChildRenderObjectWrapper { | 427 class Stack extends MultiChildRenderObjectWrapper { |
| 377 Stack(List<Widget> children, { String key }) | 428 Stack(List<Widget> children, { String key }) |
| 378 : super(key: key, children: children); | 429 : super(key: key, children: children); |
| 379 | 430 |
| 431 @override |
| 380 RenderStack get root => super.root; | 432 RenderStack get root => super.root; |
| 433 |
| 434 @override |
| 381 RenderStack createNode() => new RenderStack(); | 435 RenderStack createNode() => new RenderStack(); |
| 382 } | 436 } |
| 383 | 437 |
| 384 class Positioned extends ParentDataNode { | 438 class Positioned extends ParentDataNode { |
| 385 Positioned({ | 439 Positioned({ |
| 386 String key, | 440 String key, |
| 387 Widget child, | 441 Widget child, |
| 388 double top, | 442 double top, |
| 389 double right, | 443 double right, |
| 390 double bottom, | 444 double bottom, |
| 391 double left | 445 double left |
| 392 }) : super(child, | 446 }) : super(child, |
| 393 new StackParentData()..top = top | 447 new StackParentData()..top = top |
| 394 ..right = right | 448 ..right = right |
| 395 ..bottom = bottom | 449 ..bottom = bottom |
| 396 ..left = left, | 450 ..left = left, |
| 397 key: key); | 451 key: key); |
| 398 } | 452 } |
| 399 | 453 |
| 400 class Flex extends MultiChildRenderObjectWrapper { | 454 class Flex extends MultiChildRenderObjectWrapper { |
| 401 | 455 |
| 402 Flex(List<Widget> children, { | 456 Flex(List<Widget> children, { |
| 403 String key, | 457 String key, |
| 404 this.direction: FlexDirection.horizontal, | 458 this.direction: FlexDirection.horizontal, |
| 405 this.justifyContent: FlexJustifyContent.flexStart, | 459 this.justifyContent: FlexJustifyContent.flexStart, |
| 406 this.alignItems: FlexAlignItems.center | 460 this.alignItems: FlexAlignItems.center |
| 407 }) : super(key: key, children: children); | 461 }) : super(key: key, children: children); |
| 408 | 462 |
| 463 @override |
| 409 RenderFlex get root => super.root; | 464 RenderFlex get root => super.root; |
| 465 |
| 466 @override |
| 410 RenderFlex createNode() => new RenderFlex(direction: this.direction); | 467 RenderFlex createNode() => new RenderFlex(direction: this.direction); |
| 411 | 468 |
| 412 final FlexDirection direction; | 469 final FlexDirection direction; |
| 413 final FlexJustifyContent justifyContent; | 470 final FlexJustifyContent justifyContent; |
| 414 final FlexAlignItems alignItems; | 471 final FlexAlignItems alignItems; |
| 415 | 472 |
| 473 @override |
| 416 void syncRenderObject(Widget old) { | 474 void syncRenderObject(Widget old) { |
| 417 super.syncRenderObject(old); | 475 super.syncRenderObject(old); |
| 418 root.direction = direction; | 476 root.direction = direction; |
| 419 root.justifyContent = justifyContent; | 477 root.justifyContent = justifyContent; |
| 420 root.alignItems = alignItems; | 478 root.alignItems = alignItems; |
| 421 } | 479 } |
| 422 | 480 |
| 423 } | 481 } |
| 424 | 482 |
| 425 class Flexible extends ParentDataNode { | 483 class Flexible extends ParentDataNode { |
| 426 Flexible({ String key, Widget child, int flex: 1 }) | 484 Flexible({ String key, Widget child, int flex: 1 }) |
| 427 : super(child, new FlexBoxParentData()..flex = flex, key: key); | 485 : super(child, new FlexBoxParentData()..flex = flex, key: key); |
| 428 } | 486 } |
| 429 | 487 |
| 430 class Inline extends LeafRenderObjectWrapper { | 488 class Inline extends LeafRenderObjectWrapper { |
| 431 Inline({ String key, this.text }) : super(key: key); | 489 Inline({ String key, this.text }) : super(key: key); |
| 432 | 490 |
| 491 @override |
| 433 RenderParagraph get root => super.root; | 492 RenderParagraph get root => super.root; |
| 493 |
| 494 @override |
| 434 RenderParagraph createNode() => new RenderParagraph(text); | 495 RenderParagraph createNode() => new RenderParagraph(text); |
| 435 | 496 |
| 436 final InlineBase text; | 497 final InlineBase text; |
| 437 | 498 |
| 499 @override |
| 438 void syncRenderObject(Widget old) { | 500 void syncRenderObject(Widget old) { |
| 439 super.syncRenderObject(old); | 501 super.syncRenderObject(old); |
| 440 root.inline = text; | 502 root.inline = text; |
| 441 } | 503 } |
| 442 | 504 |
| 443 } | 505 } |
| 444 | 506 |
| 445 class StyledText extends Component { | 507 class StyledText extends Component { |
| 446 // elements ::= "string" | [<text-style> <elements>*] | 508 // elements ::= "string" | [<text-style> <elements>*] |
| 447 // Where "string" is text to display and text-style is an instance of | 509 // Where "string" is text to display and text-style is an instance of |
| 448 // TextStyle. The text-style applies to all of the elements that follow. | 510 // TextStyle. The text-style applies to all of the elements that follow. |
| 449 StyledText({ this.elements, String key }) : super(key: key); | 511 StyledText({ this.elements, String key }) : super(key: key); |
| 450 | 512 |
| 451 final dynamic elements; | 513 final dynamic elements; |
| 452 | 514 |
| 453 InlineBase _toInline(dynamic element) { | 515 InlineBase _toInline(dynamic element) { |
| 454 if (element is String) { | 516 if (element is String) { |
| 455 return new InlineText(element); | 517 return new InlineText(element); |
| 456 } | 518 } |
| 457 if (element is Iterable && element.first is TextStyle) { | 519 if (element is Iterable && element.first is TextStyle) { |
| 458 return new InlineStyle(element.first, element.skip(1).map(_toInline).toLis
t()); | 520 return new InlineStyle(element.first, element.skip(1).map(_toInline).toLis
t()); |
| 459 } | 521 } |
| 460 throw new ArgumentError("invalid elements"); | 522 throw new ArgumentError("invalid elements"); |
| 461 } | 523 } |
| 462 | 524 |
| 525 @override |
| 463 Widget build() { | 526 Widget build() { |
| 464 return new Inline(text: _toInline(elements)); | 527 return new Inline(text: _toInline(elements)); |
| 465 } | 528 } |
| 466 } | 529 } |
| 467 | 530 |
| 468 class Text extends Component { | 531 class Text extends Component { |
| 469 Text(this.data, { String key, TextStyle this.style }) : super(key: key); | 532 Text(this.data, { String key, TextStyle this.style }) : super(key: key); |
| 470 final String data; | 533 final String data; |
| 471 final TextStyle style; | 534 final TextStyle style; |
| 472 bool get interchangeable => true; | 535 bool get interchangeable => true; |
| 536 |
| 537 @override |
| 473 Widget build() { | 538 Widget build() { |
| 474 InlineBase text = new InlineText(data); | 539 InlineBase text = new InlineText(data); |
| 475 TextStyle defaultStyle = DefaultTextStyle.of(this); | 540 TextStyle defaultStyle = DefaultTextStyle.of(this); |
| 476 TextStyle combinedStyle; | 541 TextStyle combinedStyle; |
| 477 if (defaultStyle != null) { | 542 if (defaultStyle != null) { |
| 478 if (style != null) | 543 if (style != null) |
| 479 combinedStyle = defaultStyle.merge(style); | 544 combinedStyle = defaultStyle.merge(style); |
| 480 else | 545 else |
| 481 combinedStyle = defaultStyle; | 546 combinedStyle = defaultStyle; |
| 482 } else { | 547 } else { |
| 483 combinedStyle = style; | 548 combinedStyle = style; |
| 484 } | 549 } |
| 485 if (combinedStyle != null) | 550 if (combinedStyle != null) |
| 486 text = new InlineStyle(combinedStyle, [text]); | 551 text = new InlineStyle(combinedStyle, [text]); |
| 487 return new Inline(text: text); | 552 return new Inline(text: text); |
| 488 } | 553 } |
| 489 } | 554 } |
| 490 | 555 |
| 491 class Image extends LeafRenderObjectWrapper { | 556 class Image extends LeafRenderObjectWrapper { |
| 492 Image({ sky.Image image, this.size }) | 557 Image({ sky.Image image, this.size }) |
| 493 : image = image, super(key: image.hashCode.toString()); | 558 : image = image, super(key: image.hashCode.toString()); |
| 494 | 559 |
| 560 @override |
| 495 RenderImage get root => super.root; | 561 RenderImage get root => super.root; |
| 562 |
| 563 @override |
| 496 RenderImage createNode() => new RenderImage(image, size); | 564 RenderImage createNode() => new RenderImage(image, size); |
| 497 | 565 |
| 498 final sky.Image image; | 566 final sky.Image image; |
| 499 final Size size; | 567 final Size size; |
| 500 | 568 |
| 569 @override |
| 501 void syncRenderObject(Widget old) { | 570 void syncRenderObject(Widget old) { |
| 502 super.syncRenderObject(old); | 571 super.syncRenderObject(old); |
| 503 root.image = image; | 572 root.image = image; |
| 504 root.requestedSize = size; | 573 root.requestedSize = size; |
| 505 } | 574 } |
| 506 } | 575 } |
| 507 | 576 |
| 508 class FutureImage extends StatefulComponent { | 577 class FutureImage extends StatefulComponent { |
| 509 FutureImage({ this.image, this.size }); | 578 FutureImage({ this.image, this.size }); |
| 510 | 579 |
| 511 Future<sky.Image> image; | 580 Future<sky.Image> image; |
| 512 Size size; | 581 Size size; |
| 513 sky.Image _resolvedImage; | 582 sky.Image _resolvedImage; |
| 514 | 583 |
| 584 @override |
| 515 void didMount() { | 585 void didMount() { |
| 516 super.didMount(); | 586 super.didMount(); |
| 517 _resolveImage(); | 587 _resolveImage(); |
| 518 } | 588 } |
| 519 | 589 |
| 520 void _resolveImage() { | 590 void _resolveImage() { |
| 521 image.then((sky.Image resolvedImage) { | 591 image.then((sky.Image resolvedImage) { |
| 522 if (!mounted) | 592 if (!mounted) |
| 523 return; | 593 return; |
| 524 setState(() { | 594 setState(() { |
| 525 _resolvedImage = resolvedImage; | 595 _resolvedImage = resolvedImage; |
| 526 }); | 596 }); |
| 527 }); | 597 }); |
| 528 } | 598 } |
| 529 | 599 |
| 600 @override |
| 530 void syncFields(FutureImage source) { | 601 void syncFields(FutureImage source) { |
| 531 bool needToResolveImage = (image != source.image); | 602 bool needToResolveImage = (image != source.image); |
| 532 image = source.image; | 603 image = source.image; |
| 533 size = source.size; | 604 size = source.size; |
| 534 if (needToResolveImage) | 605 if (needToResolveImage) |
| 535 _resolveImage(); | 606 _resolveImage(); |
| 536 } | 607 } |
| 537 | 608 |
| 609 @override |
| 538 Widget build() { | 610 Widget build() { |
| 539 return new Image(image: _resolvedImage, size: size); | 611 return new Image(image: _resolvedImage, size: size); |
| 540 } | 612 } |
| 541 } | 613 } |
| 542 | 614 |
| 543 class NetworkImage extends Component { | 615 class NetworkImage extends Component { |
| 544 NetworkImage({ String src, this.size }) : src = src, super(key: src); | 616 NetworkImage({ String src, this.size }) : src = src, super(key: src); |
| 545 | 617 |
| 546 final String src; | 618 final String src; |
| 547 final Size size; | 619 final Size size; |
| 548 | 620 |
| 621 @override |
| 549 Widget build() { | 622 Widget build() { |
| 550 return new FutureImage(image: image_cache.load(src), size: size); | 623 return new FutureImage(image: image_cache.load(src), size: size); |
| 551 } | 624 } |
| 552 } | 625 } |
| 553 | 626 |
| 554 class AssetImage extends Component { | 627 class AssetImage extends Component { |
| 555 AssetImage({ this.bundle, String name, this.size }) | 628 AssetImage({ this.bundle, String name, this.size }) |
| 556 : name = name, super(key: name); | 629 : name = name, super(key: name); |
| 557 | 630 |
| 558 final AssetBundle bundle; | 631 final AssetBundle bundle; |
| 559 final String name; | 632 final String name; |
| 560 final Size size; | 633 final Size size; |
| 561 | 634 |
| 635 @override |
| 562 Widget build() { | 636 Widget build() { |
| 563 return new FutureImage(image: bundle.loadImage(name), size: size); | 637 return new FutureImage(image: bundle.loadImage(name), size: size); |
| 564 } | 638 } |
| 565 } | 639 } |
| 566 | 640 |
| 567 class WidgetToRenderBoxAdapter extends LeafRenderObjectWrapper { | 641 class WidgetToRenderBoxAdapter extends LeafRenderObjectWrapper { |
| 568 | 642 |
| 569 WidgetToRenderBoxAdapter(RenderBox renderBox) | 643 WidgetToRenderBoxAdapter(RenderBox renderBox) |
| 570 : renderBox = renderBox, | 644 : renderBox = renderBox, |
| 571 super(key: renderBox.hashCode.toString()); | 645 super(key: renderBox.hashCode.toString()); |
| 572 | 646 |
| 647 @override |
| 573 RenderBox get root => super.root; | 648 RenderBox get root => super.root; |
| 649 |
| 650 @override |
| 574 RenderBox createNode() => this.renderBox; | 651 RenderBox createNode() => this.renderBox; |
| 575 | 652 |
| 576 final RenderBox renderBox; | 653 final RenderBox renderBox; |
| 577 | 654 |
| 655 @override |
| 578 void syncRenderObject(Widget old) { | 656 void syncRenderObject(Widget old) { |
| 579 super.syncRenderObject(old); | 657 super.syncRenderObject(old); |
| 580 if (old != null) { | 658 if (old != null) { |
| 581 assert(old is WidgetToRenderBoxAdapter); | 659 assert(old is WidgetToRenderBoxAdapter); |
| 582 assert(root == old.root); | 660 assert(root == old.root); |
| 583 } | 661 } |
| 584 } | 662 } |
| 585 | 663 |
| 664 @override |
| 586 void remove() { | 665 void remove() { |
| 587 RenderObjectWrapper ancestor = findAncestorRenderObjectWrapper(); | 666 RenderObjectWrapper ancestor = findAncestorRenderObjectWrapper(); |
| 588 assert(ancestor is RenderObjectWrapper); | 667 assert(ancestor is RenderObjectWrapper); |
| 589 ancestor.detachChildRoot(this); | 668 ancestor.detachChildRoot(this); |
| 590 super.remove(); | 669 super.remove(); |
| 591 } | 670 } |
| 592 | 671 |
| 593 } | 672 } |
| OLD | NEW |