blob: 2cd8e613381a274062d3f54cc98e5180571b4776 [file] [log] [blame]
<!--
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-->
<import src="sky-element.sky" />
<sky-element>
<template>
<style>
:host {
position: absolute;
pointer-events: none;
overflow: hidden;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
#splash {
position: absolute;
background-color: rgba(0, 0, 0, 0.4);
border-radius: 0;
top: 0;
left: 0;
height: 0;
width: 0;
}
</style>
<div id="splash" />
</template>
<script>
import "../animation/controller.dart";
import "../animation/curves.dart";
import "../animation/timer.dart";
import "dart:math" as math;
import "dart:sky";
import "dart:async";
const double _kSplashSize = 400.0;
const double _kSplashDuration = 500.0;
@Tagname('sky-ink-splash')
class SkyInkSplash extends SkyElement implements AnimationDelegate {
AnimationController _animation;
Element _splash;
double _offsetX;
double _offsetY;
Completer<SkyInkSplash> _completer = new Completer();
SkyInkSplash() {
_animation = new AnimationController(this);
}
void shadowRootReady() {
_splash = shadowRoot.getElementById('splash');
}
Future start(double x, double y, ClientRect rect) {
_offsetX = x - rect.left;
_offsetY = y - rect.top;
_animation.start(
begin: 0.0,
end: _kSplashSize,
duration: _kSplashDuration,
curve: easeOut);
return _completer.future;
}
void _done() {
remove();
_completer.complete(this);
}
void cancel() {
// TODO(eseidel): Should fade away instead of stopping immediately.
_animation.stop();
_done();
}
void updateAnimation(double p) {
if (p == _kSplashSize) {
_done();
return;
}
_splash.style['top'] = '${_offsetY - p/2}px';
_splash.style['left'] = '${_offsetX - p/2}px';
_splash.style['width'] = '${p}px';
_splash.style['height'] = '${p}px';
_splash.style['border-radius'] = '${p}px';
_splash.style['opacity'] = '${1.0 - (p / _kSplashSize)}';
}
}
_init(script) => register(script, SkyInkSplash);
</script>
</sky-element>