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

Side by Side Diff: sky/examples/raw/ink_well.dart

Issue 1145973009: Add a simple inksplash example (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: nits Created 5 years, 6 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 unified diff | Download patch
« no previous file with comments | « no previous file | sky/examples/raw/touch_demo.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 import 'dart:sky' as sky;
6 import 'package:sky/framework/app.dart';
7 import 'package:sky/framework/rendering/render_box.dart';
8 import 'package:sky/framework/rendering/render_node.dart';
9 import 'package:sky/framework/animation/animated_value.dart';
10 import 'package:sky/framework/animation/curves.dart';
11
12 const double _kInitialSize = 0.0;
13 const double _kTargetSize = 100.0;
14 const double _kSplashDuration = 500.0;
15 const int _kInitialOpacity = 0x80;
16
17 class InkSplash {
18 final InkWell inkWell;
19 final sky.Paint _paint = new sky.Paint();
20 final sky.Point position;
21 AnimatedValue radius;
22
23 InkSplash({ this.position, this.inkWell }) {
24 radius = new AnimatedValue(_kInitialSize, onChange: _handleRadiusChange);
25 radius.animateTo(_kTargetSize, _kSplashDuration, curve: easeOut);
26 }
27
28 void _handleRadiusChange() {
29 if (radius.value == _kTargetSize)
30 inkWell._splashes.remove(this);
31 inkWell.markNeedsPaint();
32 }
33
34 void paint(RenderNodeDisplayList canvas) {
35 int opacity = (_kInitialOpacity * (1.0 - (radius.value / _kTargetSize))).flo or();
36 _paint.color = opacity << 24;
37 canvas.drawCircle(position.x, position.y, radius.value, _paint);
38 }
39 }
40
41 class InkWell extends RenderBox {
42 final List<InkSplash> _splashes = new List<InkSplash>();
43
44 void handlePointer(sky.PointerEvent event) {
45 switch (event.type) {
46 case 'pointerdown':
47 _splashes.add(new InkSplash(position: new sky.Point(event.x, event.y),
48 inkWell: this));
49 break;
50 }
51 markNeedsPaint();
52 }
53
54 void performLayout() {
55 size = constraints.constrain(new sky.Size.infinite());
56 }
57
58 void paint(RenderNodeDisplayList canvas) {
59 canvas.drawRect(new sky.Rect.fromLTRB(0.0, 0.0, size.width, size.height),
60 new sky.Paint()..color = 0xFFCCCCCC);
61 for (InkSplash splash in _splashes)
62 splash.paint(canvas);
63 }
64 }
65
66 AppView app;
67
68 void main() {
69 app = new AppView(new InkWell());
70 }
OLDNEW
« no previous file with comments | « no previous file | sky/examples/raw/touch_demo.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698