anchor.diff:                client.send(Message.changeColor, brush.color);
               }
   
  -            _drawPoint(x, y, brush.size, brush.color);
  +            _drawPoint(x, y);
               client.send(Message.drawPoint, brush.pos.toJson());
   
               timer?.cancel();
               timer = new Timer.periodic(brushInterval, (_) {
                 if (brush.moved) {
  -                _drawLine(brush.prevPos.x, brush.prevPos.y, brush.pos.x,
  -                    brush.pos.y, brush.size, brush.color);
  +                _drawLine(brush.pos.x, brush.pos.y);
                   client.send(Message.drawLine, brush.pos.toJson());
   
                   brush
  -                  ..prevPos.x = brush.pos.x
  -                  ..prevPos.y = brush.pos.y
  +//                  ..prevPos.x = brush.pos.x
  +//                  ..prevPos.y = brush.pos.y
                     ..moved = false;
                 }
               });
  
positive.code:       mainCanvas.context2D.drawImage(nextLayer, 0, 0);
        currentContext.clearRect(0, 0, 640, 480);
      }
    }
  }
  
negative.code:     chatList.children.removeAt(0);
    }
  
    static void _drawPoint(num x, num y) {
      nextCanvasLayer();
  
      drawPoints.add(new Point(x, y));
  
      _strokeDrawPoints();
    }
  
    static void _drawLine(num x, num y) {
      drawPoints.add(new Point(x, y));
  
      _strokeDrawPoints();
    }
  
    // smooth draw path
    static void _strokeDrawPoints() {
      currentContext.clearRect(0, 0, 640, 480);
  
      var p1 = drawPoints.first;
  
      if (drawPoints.length == 1) {
        currentContext
          ..beginPath()
          ..arc(p1.x, p1.y, brush.size / 2, 0, 2 * PI)
          ..closePath()
          ..fillStyle = brush.color
          ..fill();
      } else if (drawPoints.length > 1) {
        var p2 = drawPoints[1];
  
        currentContext
          ..beginPath()
          ..moveTo(p1.x, p1.y);
  
        for (int i = 1; i < drawPoints.length - 1; i++) {
          var midPoint = Point.midPoint(p1, p2);
  
          currentContext.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);
  
          p1 = drawPoints[i];
          p2 = drawPoints[i + 1];
        }
  
        currentContext
          ..lineTo(p1.x, p1.y)
          ..lineWidth = brush.size
          ..strokeStyle = brush.color
          ..lineCap = 'round'
          ..lineJoin = 'round'
          ..stroke();
      }
    }
  
    static void _clearDrawing() {
  