stroke(shape, fill) {
		switch (shape.type) {
			// RoundRect
			case "RoundRect":
				this.strokeRoundRect(
					shape.left,
					shape.top,
					shape.width,
					shape.height,
					shape.radius,
					fill,
				);
				break;

			// Rect or Bounds
			case "Rectangle":
			case "Bounds":
				this.strokeRect(shape.left, shape.top, shape.width, shape.height, fill);
				break;

			// Polygon or Line
			case "Polygon":
			case "Line":
				this.strokePolygon(shape, fill);
				break;

			case "Ellipse":
				this.strokeEllipse(
					shape.pos.x,
					shape.pos.y,
					shape.radiusV.x,
					shape.radiusV.y,
					fill,
				);
				break;

			// Point
			case "Point":
				this.strokePoint(shape.x, shape.y);
				break;

			default:
				throw new Error("Invalid geometry for fill/stroke");
		}
	}
stroke the given shape
@param {Rect|RoundRect|Polygon|Line|Ellipse|Bounds} shape - a shape object to stroke
@param {boolean} [fill=false] - fill the shape with the current color if true