             return
         }
         points.append(point)
-        drawCruve(context: context)
+        drawPoints(context: context)
         end = true
     }
 
-    private func drawCruve(context: CGContext) {
+    private func drawPoints(context: CGContext) {
         // TODO: also handle 3 points, make it more responsive
         guard points.count >= 4 else {
             return

        ).0

        let widths = calculateCurveWidths(startPoint: points[1], endPoint: points[2])
        // TODO: implement custom Bezier drawing method that supports width changing over time
        context.setLineWidth(widths.1)
        
        context.move(to: points[1].position)
        context.addCurve(to: points[2].position, control1: c2, control2: c3)
        context.strokePath()
        context.restoreGState()

        // remove first point, keep only 3 in points, so that when the next point comes in, there
        // will be 4 to draw
        points.removeFirst()
    }

    private func calculateCurveWidths(startPoint: Point, endPoint: Point) -> (CGFloat, CGFloat) {


    func add(context: CGContext, point: Point) {
        points.append(point)
        drawPoints(context: context)
    }

    func end(context: CGContext, point: Point) {
