anchor.diff:      context.fillRect(left, y, width - left, 1);
     }
   
  +  int get maxIterations => colors.length - 1;
  +
     num get radiusPixels => width < height ? width/2.0 : height/2.0;
     num scalePixel(num pix) => pix * radius / radiusPixels;
   
  -  num pixelToReal(int x) => scalePixel(x - width / 2) + center.real;
  -  num pixelToImag(int y) => -scalePixel(y - height / 2) + center.imag;
  +  num pixelToCoordX(int x) => scalePixel(x - width / 2) + center.real;
  +  num pixelToCoordY(int y) => -scalePixel(y - height / 2) + center.imag;
   }
   
   /// Returns the number of iterations it takes for the Mandelbrot sequence to
  
positive.code:   }
  }
  
  typedef ClickHandler(Complex point);
  
  class MandelbrotView extends AnimatedTag implements Cloneable {
    final Complex center;
    final num radius;
    final int maxIterations;
  
    final int width;
    final int height;
    final List<String> colors;
    final ClickHandler onClick;
  
    const MandelbrotView({
      this.center: const Complex(0, 0),
      this.radius: 2.0,
      this.maxIterations: 1000,
  
      this.width: 400,
      this.height: 400,
      this.colors: const [
        "#f10","#e20","#d30","#c40","#b50","#a60","#970",
        "#880","#790","#6a0","#5b0","#4c0","#3d0","#2e0","#1f0"],
      this.onClick
    });
  
  
negative.code:       p.nextState = p.nextState.zoom(scaleAmount);
      }
      var center = p.state.center;
      var colors = colorRange(
          new Color.hsl(1, 80, 70),
          new Color.hsl(360 * 10, 100, 0),
          1000);
      return $.Div(inner: [
        new MandelbrotView(center: center, radius: p.state.radius, onClick: onClick,
            colors: colors),
        $.Div(inner: [
          $.Button(onClick: (_) => zoom(0.5), inner: "Zoom In"),
          $.Button(onClick: (_) => zoom(2.0), inner: "Zoom Out"),
  