anchor.diff:      // Setup buffer.
       buffer = new fl.TextBuffer();
       buffer.onModify.listen((data) {
  -      final height = h;
  -      final half = (w / 2).ceil();
  -
  -      canvas.updateShaders(defaultVertexShader, buffer.text);
  -      canvas.updateVertexData([
  -        // Top-left triangle
  -        -half, -height, -half, height, half, height,
  -
  -        // Bottom-right triangle
  -        half, -height, -half, -height, half, height
  -      ]);
  -      canvas.redraw();
  +      if ((data.nInserted > 0 || data.nDeleted > 0) &&
  +          button.label == 'Recompile') {
  +        button.labelfont = fl.COURIER_BOLD_ITALIC;
  +        button.labeltype = fl.SHADOW_LABEL;
  +        button.labelcolor = fl.GREEN;
  +        button.label = 'Recompile!';
  +        button.redraw();
  +      }
       });
   
       // Bind text buffer to editor and load cool mandelbrot shader.
       editor.buffer = buffer;
       buffer.text = mandelbrotFragmentShader;
   
  -    /*canvas.updateShaders(defaultVertexShader, buffer.text);
  -    canvas.updateVertexData([
  -      // Top-left triangle
  -      -half, -height, -half, height, half, height,
  -
  -      // Bottom-right triangle
  -      half, -height, -half, -height, half, height
  -    ]);*/
  -
  -    resizable = this;
  +    resizable = new fl.Widget(0, button.h, width, height - button.h);
       end();
  +
  +    // Update shaders.
  +    update();
  +  }
  +
  +  void update() {
  +    button.labelfont = fl.COURIER;
  +    button.labeltype = fl.NORMAL_LABEL;
  +    button.labelcolor = fl.BLACK;
  +    button.label = 'Recompile';
  +    button.redraw();
  +
  +    canvas.updateShaders(defaultVertexShader, buffer.text);
  +    canvas.redraw();
     }
   }
   
  
positive.code:   /// Constructor
    ShaderEditor(int _w, int _h, String l) : super(_w, _h, l) {
      color = fl.WHITE;
      final height = _h;
      final half = (_w / 2).round();
      final pad = 10;
  
      canvas = new Gl2DCanvas(0, 0, half, height);
  
      editor = new fl.TextEditor(half + pad, pad, w - half - pad, height - pad);
      editor.box = fl.FLAT_BOX;
      editor.cursorStyle = fl.TextDisplay.SIMPLE_CURSOR;
      editor.cursorColor = fl.rgbColor(64);
  
negative.code:   /// Fragment shader editor
    fl.TextEditor editor;
  
    /// Recompile button.
    fl.Button button;
  
    /// Text buffer for the editor
    fl.TextBuffer buffer;
  
  