anchor.diff:    static const double _waveInitialOpacity = 0.25;
     static const double _waveOpacityDecayVelocity = 0.8;
   
  -  static double _waveRadiusForTimes(
  -      int touchDownMs, int touchUpMs, Wave animContainer) {
  -    var touchDown = touchDownMs.toDouble() / 1000;
  -    var touchUp = touchUpMs.toDouble() / 1000;
  -    var totalElapsed = touchDown + touchUp;
  -    var width = animContainer.clientWidth.toDouble();
  -    var height = animContainer.clientHeight.toDouble();
  +  static double _waveMaxDuration(Wave wave) {
  +    var width = wave.clientWidth.toDouble();
  +    var height = wave.clientHeight.toDouble();
       var waveRadius =
           min(sqrt(width * width + height * height), _waveMaxRadius) * 1.1 + 5.0;
       var duration = 1.1 - 0.2 * (waveRadius / _waveMaxRadius);
  +    return duration;
  +  }
  +
  +  static double _waveRadiusForTimes(int touchDownMs, int touchUpMs, Wave wave) {
  +    var width = wave.clientWidth.toDouble();
  +    var height = wave.clientHeight.toDouble();
  +    var waveRadius =
  +        min(sqrt(width * width + height * height), _waveMaxRadius) * 1.1 + 5.0;
  +    var maxTimeDown =
  +        log(1 - min(wave.maxRadius, _waveMaxRadius) / waveRadius) /
  +            log(80);
  +    var touchDown = min(- maxTimeDown / 2, touchDownMs.toDouble() / 1000);
  +    window.console
  +        .log('Effective touchdown time is $touchDown');
  +
  +    var touchUp = touchUpMs.toDouble() / 1000;
  +    var totalElapsed = touchDown * 2 + touchUp;
  +    var duration = _waveMaxDuration(wave);
       var timePortion = totalElapsed / duration;
       var size = waveRadius * (1 - pow(80, -timePortion));
  +    window.console
  +        .log('Radius is $size / ${min(wave.maxRadius, _waveMaxRadius)}');
       return size.abs();
     }
   
  
positive.code: 
        wave.add(inner);
        wc.add(outer);
      });
      return new Wave(
          maxRadius: 0.0, fgColor: fgColor, wave: wave, wc: wc, row: row);
    }
  
    void _removeFromScope(Wave wave) {
  
negative.code: 
    final List<Element> wave;
    final List<Element> wc;
    final StreamSubscription listener;
  
    Wave({double this.maxRadius, String this.fgColor, List<Element> this.wave,
        List<Element> this.wc, Point this.startPosition, Point this.endPosition,
        int this.clientSize, int this.clientWidth, int this.clientHeight,
        DivElement this.row, StreamSubscription this.listener});
  }
  