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:collection'; | 6 import 'dart:collection'; |
7 import 'dart:mirrors'; | 7 import 'dart:mirrors'; |
8 import 'dart:sky' as sky; | 8 import 'dart:sky' as sky; |
9 | 9 |
10 import '../rendering/box.dart'; | 10 import '../rendering/box.dart'; |
11 import '../rendering/object.dart'; | 11 import '../rendering/object.dart'; |
12 import '../rendering/sky_binding.dart'; | 12 import '../rendering/sky_binding.dart'; |
| 13 import '../sky/hittest.dart'; |
13 | 14 |
14 export '../rendering/box.dart' show BoxConstraints, BoxDecoration, Border, Borde
rSide, EdgeDims; | 15 export '../rendering/box.dart' show BoxConstraints, BoxDecoration, Border, Borde
rSide, EdgeDims; |
15 export '../rendering/flex.dart' show FlexDirection; | 16 export '../rendering/flex.dart' show FlexDirection; |
16 export '../rendering/object.dart' show Point, Size, Rect, Color, Paint, Path; | 17 export '../rendering/object.dart' show Point, Size, Rect, Color, Paint, Path; |
17 | 18 |
18 final bool _shouldLogRenderDuration = false; | 19 final bool _shouldLogRenderDuration = false; |
19 | 20 |
20 // All Effen nodes derive from Widget. All nodes have a _parent, a _key and | 21 // All Effen nodes derive from Widget. All nodes have a _parent, a _key and |
21 // can be sync'd. | 22 // can be sync'd. |
22 abstract class Widget { | 23 abstract class Widget { |
(...skipping 754 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
777 } | 778 } |
778 | 779 |
779 assert(root == this.root); // TODO(ianh): Remove this once the analyzer is c
leverer | 780 assert(root == this.root); // TODO(ianh): Remove this once the analyzer is c
leverer |
780 } | 781 } |
781 | 782 |
782 } | 783 } |
783 | 784 |
784 class WidgetSkyBinding extends SkyBinding { | 785 class WidgetSkyBinding extends SkyBinding { |
785 | 786 |
786 WidgetSkyBinding({ RenderView renderViewOverride: null }) | 787 WidgetSkyBinding({ RenderView renderViewOverride: null }) |
787 : super(renderViewOverride: renderViewOverride) { | 788 : super(renderViewOverride: renderViewOverride); |
788 assert(_skyBinding == null); | |
789 } | |
790 | 789 |
791 static WidgetSkyBinding _skyBinding; | |
792 static SkyBinding get skyBinding => _skyBinding; | |
793 static void initWidgetSkyBinding({ RenderView renderViewOverride: null }) { | 790 static void initWidgetSkyBinding({ RenderView renderViewOverride: null }) { |
794 if (_skyBinding == null) | 791 if (SkyBinding.instance == null) |
795 _skyBinding = new WidgetSkyBinding(renderViewOverride: renderViewOverride)
; | 792 new WidgetSkyBinding(renderViewOverride: renderViewOverride); |
| 793 assert(SkyBinding.instance is WidgetSkyBinding); |
796 } | 794 } |
797 | 795 |
798 void dispatchEvent(sky.Event event, HitTestResult result) { | 796 void dispatchEvent(sky.Event event, HitTestResult result) { |
799 assert(_skyBinding == this); | 797 assert(SkyBinding.instance == this); |
800 super.dispatchEvent(event, result); | 798 super.dispatchEvent(event, result); |
801 for (HitTestEntry entry in result.path.reversed) { | 799 for (HitTestEntry entry in result.path.reversed) { |
802 Widget target = RenderObjectWrapper._getMounted(entry.target); | 800 Widget target = RenderObjectWrapper._getMounted(entry.target); |
803 if (target == null) | 801 if (target == null) |
804 continue; | 802 continue; |
805 RenderObject targetRoot = target.root; | 803 RenderObject targetRoot = target.root; |
806 while (target != null && target.root == targetRoot) { | 804 while (target != null && target.root == targetRoot) { |
807 if (target is Listener) | 805 if (target is Listener) |
808 target._handleEvent(event); | 806 target._handleEvent(event); |
809 target = target._parent; | 807 target = target._parent; |
(...skipping 24 matching lines...) Expand all Loading... |
834 assert(_dirty); | 832 assert(_dirty); |
835 assert(_mounted); | 833 assert(_mounted); |
836 assert(parent == null); | 834 assert(parent == null); |
837 _sync(null, null); | 835 _sync(null, null); |
838 } | 836 } |
839 | 837 |
840 } | 838 } |
841 | 839 |
842 class RenderViewWrapper extends OneChildRenderObjectWrapper { | 840 class RenderViewWrapper extends OneChildRenderObjectWrapper { |
843 RenderViewWrapper({ String key, Widget child }) : super(key: key, child: child
); | 841 RenderViewWrapper({ String key, Widget child }) : super(key: key, child: child
); |
844 | |
845 RenderView get root => super.root; | 842 RenderView get root => super.root; |
846 RenderView createNode() => WidgetSkyBinding._skyBinding.renderView; | 843 RenderView createNode() => SkyBinding.instance.renderView; |
847 } | 844 } |
848 | 845 |
849 class AppContainer extends AbstractWidgetRoot { | 846 class AppContainer extends AbstractWidgetRoot { |
850 AppContainer(this.app); | 847 AppContainer(this.app) { |
851 | 848 assert(SkyBinding.instance is WidgetSkyBinding); |
| 849 } |
852 final App app; | 850 final App app; |
853 | |
854 Widget build() => new RenderViewWrapper(child: app); | 851 Widget build() => new RenderViewWrapper(child: app); |
855 } | 852 } |
856 | 853 |
857 void runApp(App app, { RenderView renderViewOverride }) { | 854 void runApp(App app, { RenderView renderViewOverride }) { |
858 WidgetSkyBinding.initWidgetSkyBinding(renderViewOverride: renderViewOverride); | 855 WidgetSkyBinding.initWidgetSkyBinding(renderViewOverride: renderViewOverride); |
859 new AppContainer(app); | 856 new AppContainer(app); |
860 } | 857 } |
861 | 858 |
862 typedef Widget Builder(); | 859 typedef Widget Builder(); |
863 | 860 |
(...skipping 30 matching lines...) Expand all Loading... |
894 if (root.parent == null) { | 891 if (root.parent == null) { |
895 // we haven't attached it yet | 892 // we haven't attached it yet |
896 assert(_container.child == null); | 893 assert(_container.child == null); |
897 _container.child = root; | 894 _container.child = root; |
898 } | 895 } |
899 assert(root.parent == _container); | 896 assert(root.parent == _container); |
900 } | 897 } |
901 | 898 |
902 Widget build() => builder(); | 899 Widget build() => builder(); |
903 } | 900 } |
OLD | NEW |