anchor.diff:  
           offsetTable[sprite] = new Tuple2<double, double>(tx, ty);
   
  -        tweens.add(new xl.Tween(sprite, .3)
  +        tweens.add(new xl.Tween(sprite, ANIMATION_TIME_MS / 1000)
             ..animate.x.to(tx)
             ..animate.y.to(ty));
   
  
positive.code: import 'package:flow/src/digest.dart';
  
  class WebglRenderer<T> extends WebRenderer<T> {
  
    final StreamController<Map<ItemRenderer<T>, xl.DisplayObjectContainer>> _parentMap$ctrl = new StreamController<Map<ItemRenderer<T>, xl.DisplayObjectContainer>>();
    final StreamController<Map<ItemRenderer<T>, Tuple2<double, double>>> _offsetTable$ctrl = new StreamController<Map<ItemRenderer<T>, Tuple2<double, double>>>();
  
negative.code:     rx.observable(screenSize$ctrl.stream)
        .distinct((Tuple2<int, int> prev, Tuple2<int, int> next) => prev == next)
        .listen((Tuple2<int, int> tuple) {
          if (tuple.item1 < canvas.width) {
            new Timer(const Duration(milliseconds: ANIMATION_TIME_MS), () {
              canvas.width = tuple.item1;
              materializeStage$sink.add(true);
            });
          } else {
            canvas.width = tuple.item1;
            materializeStage$sink.add(true);
          }
  
          if (tuple.item2 < canvas.height) {
            new Timer(const Duration(milliseconds: ANIMATION_TIME_MS), () {
              canvas.height = tuple.item2;
              materializeStage$sink.add(true);
            });
          } else {
            canvas.height = tuple.item2;
            materializeStage$sink.add(true);
          }
        });
  
      new rx.Observable<Tuple5<Iterable<RenderState<T>>, Map<ItemRenderer<T>, xl.DisplayObjectContainer>, Map<ItemRenderer<T>, Tuple2<double, double>>, Map<NodeData<T>, RenderState<T>>, HierarchyOrientation>>.combineLatest(<Stream>[state$, _parentMap$ctrl.stream, _offsetTable$ctrl.stream, _rootItems$ctrl.stream, orientation$],
  