| 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 '../fn2.dart'; | 5 import '../fn2.dart'; |
| 6 import 'dart:sky' as sky; | 6 import 'dart:sky' as sky; |
| 7 import '../rendering/box.dart'; | 7 import '../rendering/box.dart'; |
| 8 import '../rendering/object.dart'; | 8 import '../rendering/object.dart'; |
| 9 | 9 |
| 10 | 10 |
| 11 enum ScaffoldSlots { | 11 enum ScaffoldSlots { |
| 12 Toolbar, | 12 toolbar, |
| 13 Body, | 13 body, |
| 14 StatusBar, | 14 statusBar, |
| 15 Drawer, | 15 drawer, |
| 16 FloatingActionButton | 16 floatingActionButton |
| 17 } | 17 } |
| 18 | 18 |
| 19 class RenderScaffold extends RenderBox { | 19 class RenderScaffold extends RenderBox { |
| 20 | 20 |
| 21 RenderScaffold({ | 21 RenderScaffold({ |
| 22 RenderBox toolbar, | 22 RenderBox toolbar, |
| 23 RenderBox body, | 23 RenderBox body, |
| 24 RenderBox statusbar, | 24 RenderBox statusbar, |
| 25 RenderBox drawer, | 25 RenderBox drawer, |
| 26 RenderBox floatingActionButton | 26 RenderBox floatingActionButton |
| 27 }) { | 27 }) { |
| 28 this[ScaffoldSlots.Toolbar] = toolbar; | 28 this[ScaffoldSlots.toolbar] = toolbar; |
| 29 this[ScaffoldSlots.Body] = body; | 29 this[ScaffoldSlots.body] = body; |
| 30 this[ScaffoldSlots.StatusBar] = statusbar; | 30 this[ScaffoldSlots.statusBar] = statusbar; |
| 31 this[ScaffoldSlots.Drawer] = drawer; | 31 this[ScaffoldSlots.drawer] = drawer; |
| 32 this[ScaffoldSlots.FloatingActionButton] = floatingActionButton; | 32 this[ScaffoldSlots.floatingActionButton] = floatingActionButton; |
| 33 } | 33 } |
| 34 | 34 |
| 35 Map<ScaffoldSlots, RenderBox> _slots = new Map<ScaffoldSlots, RenderBox>(); | 35 Map<ScaffoldSlots, RenderBox> _slots = new Map<ScaffoldSlots, RenderBox>(); |
| 36 RenderBox operator[] (ScaffoldSlots slot) => _slots[slot]; | 36 RenderBox operator[] (ScaffoldSlots slot) => _slots[slot]; |
| 37 void operator[]= (ScaffoldSlots slot, RenderBox value) { | 37 void operator[]= (ScaffoldSlots slot, RenderBox value) { |
| 38 RenderBox old = _slots[slot]; | 38 RenderBox old = _slots[slot]; |
| 39 if (old == value) | 39 if (old == value) |
| 40 return; | 40 return; |
| 41 if (old != null) | 41 if (old != null) |
| 42 dropChild(old); | 42 dropChild(old); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 65 } | 65 } |
| 66 | 66 |
| 67 static const kToolbarHeight = 100.0; | 67 static const kToolbarHeight = 100.0; |
| 68 static const kStatusbarHeight = 50.0; | 68 static const kStatusbarHeight = 50.0; |
| 69 static const kButtonX = -16.0; // from right edge of body | 69 static const kButtonX = -16.0; // from right edge of body |
| 70 static const kButtonY = -16.0; // from bottom edge of body | 70 static const kButtonY = -16.0; // from bottom edge of body |
| 71 | 71 |
| 72 void performLayout() { | 72 void performLayout() { |
| 73 double bodyHeight = size.height; | 73 double bodyHeight = size.height; |
| 74 double bodyPosition = 0.0; | 74 double bodyPosition = 0.0; |
| 75 if (_slots[ScaffoldSlots.Toolbar] != null) { | 75 if (_slots[ScaffoldSlots.toolbar] != null) { |
| 76 RenderBox toolbar = _slots[ScaffoldSlots.Toolbar]; | 76 RenderBox toolbar = _slots[ScaffoldSlots.toolbar]; |
| 77 toolbar.layout(new BoxConstraints.tight(new sky.Size(size.width, kToolbarH
eight))); | 77 toolbar.layout(new BoxConstraints.tight(new sky.Size(size.width, kToolbarH
eight))); |
| 78 assert(toolbar.parentData is BoxParentData); | 78 assert(toolbar.parentData is BoxParentData); |
| 79 toolbar.parentData.position = new sky.Point(0.0, 0.0); | 79 toolbar.parentData.position = new sky.Point(0.0, 0.0); |
| 80 bodyPosition = kToolbarHeight; | 80 bodyPosition = kToolbarHeight; |
| 81 bodyHeight -= kToolbarHeight; | 81 bodyHeight -= kToolbarHeight; |
| 82 } | 82 } |
| 83 if (_slots[ScaffoldSlots.StatusBar] != null) { | 83 if (_slots[ScaffoldSlots.statusBar] != null) { |
| 84 RenderBox statusbar = _slots[ScaffoldSlots.StatusBar]; | 84 RenderBox statusbar = _slots[ScaffoldSlots.statusBar]; |
| 85 statusbar.layout(new BoxConstraints.tight(new sky.Size(size.width, kStatus
barHeight))); | 85 statusbar.layout(new BoxConstraints.tight(new sky.Size(size.width, kStatus
barHeight))); |
| 86 assert(statusbar.parentData is BoxParentData); | 86 assert(statusbar.parentData is BoxParentData); |
| 87 statusbar.parentData.position = new sky.Point(0.0, size.height - kStatusba
rHeight); | 87 statusbar.parentData.position = new sky.Point(0.0, size.height - kStatusba
rHeight); |
| 88 bodyHeight -= kStatusbarHeight; | 88 bodyHeight -= kStatusbarHeight; |
| 89 } | 89 } |
| 90 if (_slots[ScaffoldSlots.Body] != null) { | 90 if (_slots[ScaffoldSlots.body] != null) { |
| 91 RenderBox body = _slots[ScaffoldSlots.Body]; | 91 RenderBox body = _slots[ScaffoldSlots.body]; |
| 92 body.layout(new BoxConstraints.tight(new sky.Size(size.width, bodyHeight))
); | 92 body.layout(new BoxConstraints.tight(new sky.Size(size.width, bodyHeight))
); |
| 93 assert(body.parentData is BoxParentData); | 93 assert(body.parentData is BoxParentData); |
| 94 body.parentData.position = new sky.Point(0.0, bodyPosition); | 94 body.parentData.position = new sky.Point(0.0, bodyPosition); |
| 95 } | 95 } |
| 96 if (_slots[ScaffoldSlots.Drawer] != null) { | 96 if (_slots[ScaffoldSlots.drawer] != null) { |
| 97 RenderBox drawer = _slots[ScaffoldSlots.Drawer]; | 97 RenderBox drawer = _slots[ScaffoldSlots.drawer]; |
| 98 drawer.layout(new BoxConstraints(minWidth: 0.0, maxWidth: size.width, minH
eight: size.height, maxHeight: size.height)); | 98 drawer.layout(new BoxConstraints(minWidth: 0.0, maxWidth: size.width, minH
eight: size.height, maxHeight: size.height)); |
| 99 assert(drawer.parentData is BoxParentData); | 99 assert(drawer.parentData is BoxParentData); |
| 100 drawer.parentData.position = new sky.Point(0.0, 0.0); | 100 drawer.parentData.position = new sky.Point(0.0, 0.0); |
| 101 } | 101 } |
| 102 if (_slots[ScaffoldSlots.FloatingActionButton] != null) { | 102 if (_slots[ScaffoldSlots.floatingActionButton] != null) { |
| 103 RenderBox floatingActionButton = _slots[ScaffoldSlots.FloatingActionButton
]; | 103 RenderBox floatingActionButton = _slots[ScaffoldSlots.floatingActionButton
]; |
| 104 floatingActionButton.layout(new BoxConstraints(minWidth: 0.0, maxWidth: si
ze.width, minHeight: size.height, maxHeight: size.height)); | 104 floatingActionButton.layout(new BoxConstraints(minWidth: 0.0, maxWidth: si
ze.width, minHeight: size.height, maxHeight: size.height)); |
| 105 assert(floatingActionButton.parentData is BoxParentData); | 105 assert(floatingActionButton.parentData is BoxParentData); |
| 106 floatingActionButton.parentData.position = new sky.Point(size.width - kBut
tonX, bodyPosition + bodyHeight - kButtonY); | 106 floatingActionButton.parentData.position = new sky.Point(size.width - kBut
tonX, bodyPosition + bodyHeight - kButtonY); |
| 107 } | 107 } |
| 108 } | 108 } |
| 109 | 109 |
| 110 void paint(RenderObjectDisplayList canvas) { | 110 void paint(RenderObjectDisplayList canvas) { |
| 111 for (ScaffoldSlots slot in [ScaffoldSlots.Body, ScaffoldSlots.StatusBar, Sca
ffoldSlots.Toolbar, ScaffoldSlots.FloatingActionButton, ScaffoldSlots.Drawer]) { | 111 for (ScaffoldSlots slot in [ScaffoldSlots.body, ScaffoldSlots.statusBar, Sca
ffoldSlots.toolbar, ScaffoldSlots.floatingActionButton, ScaffoldSlots.drawer]) { |
| 112 RenderBox box = _slots[slot]; | 112 RenderBox box = _slots[slot]; |
| 113 if (box != null) { | 113 if (box != null) { |
| 114 assert(box.parentData is BoxParentData); | 114 assert(box.parentData is BoxParentData); |
| 115 canvas.paintChild(box, box.parentData.position); | 115 canvas.paintChild(box, box.parentData.position); |
| 116 } | 116 } |
| 117 } | 117 } |
| 118 } | 118 } |
| 119 | 119 |
| 120 void hitTestChildren(HitTestResult result, { sky.Point position }) { | 120 void hitTestChildren(HitTestResult result, { sky.Point position }) { |
| 121 for (ScaffoldSlots slot in [ScaffoldSlots.Drawer, ScaffoldSlots.FloatingActi
onButton, ScaffoldSlots.Toolbar, ScaffoldSlots.StatusBar, ScaffoldSlots.Body]) { | 121 for (ScaffoldSlots slot in [ScaffoldSlots.drawer, ScaffoldSlots.floatingActi
onButton, ScaffoldSlots.toolbar, ScaffoldSlots.statusBar, ScaffoldSlots.body]) { |
| 122 RenderBox box = _slots[slot]; | 122 RenderBox box = _slots[slot]; |
| 123 if (box != null) { | 123 if (box != null) { |
| 124 assert(box.parentData is BoxParentData); | 124 assert(box.parentData is BoxParentData); |
| 125 if (new sky.Rect.fromPointAndSize(box.parentData.position, box.size).con
tains(position)) { | 125 if (new sky.Rect.fromPointAndSize(box.parentData.position, box.size).con
tains(position)) { |
| 126 if (box.hitTest(result, position: (position - box.parentData.position)
.toPoint())) | 126 if (box.hitTest(result, position: (position - box.parentData.position)
.toPoint())) |
| 127 return; | 127 return; |
| 128 } | 128 } |
| 129 } | 129 } |
| 130 } | 130 } |
| 131 } | 131 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 } | 163 } |
| 164 | 164 |
| 165 void removeChild(UINode node) { | 165 void removeChild(UINode node) { |
| 166 assert(node != null); | 166 assert(node != null); |
| 167 root.remove(node.root); | 167 root.remove(node.root); |
| 168 super.removeChild(node); | 168 super.removeChild(node); |
| 169 } | 169 } |
| 170 | 170 |
| 171 void syncRenderObject(UINode old) { | 171 void syncRenderObject(UINode old) { |
| 172 super.syncRenderObject(old); | 172 super.syncRenderObject(old); |
| 173 syncChild(toolbar, old is Scaffold ? old.toolbar : null, ScaffoldSlots.Toolb
ar); | 173 syncChild(toolbar, old is Scaffold ? old.toolbar : null, ScaffoldSlots.toolb
ar); |
| 174 syncChild(body, old is Scaffold ? old.body : null, ScaffoldSlots.Body); | 174 syncChild(body, old is Scaffold ? old.body : null, ScaffoldSlots.body); |
| 175 syncChild(statusbar, old is Scaffold ? old.statusbar : null, ScaffoldSlots.S
tatusBar); | 175 syncChild(statusbar, old is Scaffold ? old.statusbar : null, ScaffoldSlots.s
tatusBar); |
| 176 syncChild(drawer, old is Scaffold ? old.drawer : null, ScaffoldSlots.Drawer)
; | 176 syncChild(drawer, old is Scaffold ? old.drawer : null, ScaffoldSlots.drawer)
; |
| 177 syncChild(floatingActionButton, old is Scaffold ? old.floatingActionButton :
null, ScaffoldSlots.FloatingActionButton); | 177 syncChild(floatingActionButton, old is Scaffold ? old.floatingActionButton :
null, ScaffoldSlots.floatingActionButton); |
| 178 } | 178 } |
| 179 | 179 |
| 180 } | 180 } |
| OLD | NEW |