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

Unified Diff: sky/examples/fn/widgets/material.dart

Issue 974903005: attempt at making menuitems react (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: rationalise my local client and upload the result Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/examples/fn/widgets/drawer.dart ('k') | sky/examples/fn/widgets/menuitem.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/examples/fn/widgets/material.dart
diff --git a/sky/examples/fn/widgets/material.dart b/sky/examples/fn/widgets/material.dart
new file mode 100644
index 0000000000000000000000000000000000000000..0260705a0bdffc10b1b1642801a82ed784bfef18
--- /dev/null
+++ b/sky/examples/fn/widgets/material.dart
@@ -0,0 +1,81 @@
+part of widgets;
+
+abstract class MaterialComponent extends Component {
+
+ static const _splashesKey = const Object();
+
+ static Style _style = new Style('''
+ transform: translateX(0);
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0'''
+ );
+
+ LinkedHashSet<SplashAnimation> _splashes;
+
+ MaterialComponent({ Object key }) : super(key: key);
+
+ Node render() {
+ List<Node> children = [];
+
+ if (_splashes != null) {
+ children.addAll(_splashes.map((s) => new InkSplash(s.onStyleChanged)));
+ }
+
+ return new Container(
+ style: _style,
+ onScrollStart: _cancelSplashes,
+ onWheel: _cancelSplashes,
+ onPointerDown: _startSplash,
+ children: children,
+ key: _splashesKey
+ );
+ }
+
+ sky.ClientRect _getBoundingRect() => getRoot().getBoundingClientRect();
+
+ void _startSplash(sky.Event event) {
+ setState(() {
+ if (_splashes == null) {
+ _splashes = new LinkedHashSet<SplashAnimation>();
+ }
+
+ var splash;
+ splash = new SplashAnimation(_getBoundingRect(), event.x, event.y,
+ onDone: () { _splashDone(splash); });
+
+ _splashes.add(splash);
+ });
+ }
+
+ void _cancelSplashes(sky.Event event) {
+ if (_splashes == null) {
+ return;
+ }
+
+ setState(() {
+ var splashes = _splashes;
+ _splashes = null;
+ splashes.forEach((s) { s.cancel(); });
+ });
+ }
+
+ void willUnmount() {
+ _cancelSplashes(null);
+ }
+
+ void _splashDone(SplashAnimation splash) {
+ if (_splashes == null) {
+ return;
+ }
+
+ setState(() {
+ _splashes.remove(splash);
+ if (_splashes.length == 0) {
+ _splashes = null;
+ }
+ });
+ }
+}
« no previous file with comments | « sky/examples/fn/widgets/drawer.dart ('k') | sky/examples/fn/widgets/menuitem.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698