| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'dart:async'; | 5 import 'dart:async'; |
| 6 | 6 |
| 7 import 'package:observatory/src/elements/helpers/rendering_queue.dart'; | 7 import 'package:observatory/src/elements/helpers/rendering_queue.dart'; |
| 8 export 'package:observatory/src/elements/helpers/rendering_queue.dart'; | 8 export 'package:observatory/src/elements/helpers/rendering_queue.dart'; |
| 9 | 9 |
| 10 /// A generic renderable object. | 10 /// A generic renderable object. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 /// Scheduler for rendering operations. | 28 /// Scheduler for rendering operations. |
| 29 class RenderingScheduler<T extends Renderable> implements RenderingTask { | 29 class RenderingScheduler<T extends Renderable> implements RenderingTask { |
| 30 bool _enabled = false; | 30 bool _enabled = false; |
| 31 bool _dirty = false; | 31 bool _dirty = false; |
| 32 bool _renderingScheduled = false; | 32 bool _renderingScheduled = false; |
| 33 bool _notificationScheduled = false; | 33 bool _notificationScheduled = false; |
| 34 /// Element managed by this scheduler. | 34 /// Element managed by this scheduler. |
| 35 final T element; | 35 final T element; |
| 36 /// Queue used for rendering operations. | 36 /// Queue used for rendering operations. |
| 37 final RenderingQueue queue; | 37 final RenderingQueue queue; |
| 38 /// Does the element need a new rendering cycle. |
| 39 bool get isDirty => _dirty; |
| 40 /// Is the scheduler enabled. |
| 41 bool get isEnabled => _enabled; |
| 38 | 42 |
| 39 final StreamController<RenderedEvent<T>> _onRendered = | 43 final StreamController<RenderedEvent<T>> _onRendered = |
| 40 new StreamController<RenderedEvent<T>>.broadcast(); | 44 new StreamController<RenderedEvent<T>>.broadcast(); |
| 41 Stream<RenderedEvent<T>> get onRendered => _onRendered.stream; | 45 Stream<RenderedEvent<T>> get onRendered => _onRendered.stream; |
| 42 | 46 |
| 43 /// Creates a new scheduler for an element. | 47 /// Creates a new scheduler for an element. |
| 44 /// If no queue is provided it will create a new default configured queue. | 48 /// If no queue is provided it will create a new default configured queue. |
| 45 factory RenderingScheduler(T element, {RenderingQueue queue}) { | 49 factory RenderingScheduler(T element, {RenderingQueue queue}) { |
| 46 assert(element != null); | 50 assert(element != null); |
| 47 if (queue == null) { queue = new RenderingQueue(); } | 51 if (queue == null) { queue = new RenderingQueue(); } |
| 48 return new RenderingScheduler<T>._(element, queue); | 52 return new RenderingScheduler<T>._(element, queue); |
| 49 } | 53 } |
| 50 | 54 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 if (_notificationScheduled) return; | 112 if (_notificationScheduled) return; |
| 109 _notify(); | 113 _notify(); |
| 110 _notificationScheduled = true; | 114 _notificationScheduled = true; |
| 111 } | 115 } |
| 112 | 116 |
| 113 Future _notify() async { | 117 Future _notify() async { |
| 114 _onRendered.add(new RenderedEvent<T>(element, _dirty)); | 118 _onRendered.add(new RenderedEvent<T>(element, _dirty)); |
| 115 _notificationScheduled = false; | 119 _notificationScheduled = false; |
| 116 } | 120 } |
| 117 } | 121 } |
| OLD | NEW |