strokeEllipse(x, y, w, h, fill = false) {
		if (this.getGlobalAlpha() < 1 / 255) {
			// Fast path: don't draw fully transparent
			return;
		}
		const context = this.getContext();

		const hw = w;
		const hh = h;
		const lx = x - hw;
		const rx = x + hw;
		const ty = y - hh;
		const by = y + hh;

		const xmagic = hw * 0.551784;
		const ymagic = hh * 0.551784;
		const xmin = x - xmagic;
		const xmax = x + xmagic;
		const ymin = y - ymagic;
		const ymax = y + ymagic;

		context.beginPath();
		context.moveTo(x, ty);
		context.bezierCurveTo(xmax, ty, rx, ymin, rx, y);
		context.bezierCurveTo(rx, ymax, xmax, by, x, by);
		context.bezierCurveTo(xmin, by, lx, ymax, lx, y);
		context.bezierCurveTo(lx, ymin, xmin, ty, x, ty);
		context[fill === true ? "fill" : "stroke"]();
		context.closePath();
	}
Stroke an ellipse at the specified coordinates with given radius
@param {number} x - ellipse center point x-axis
@param {number} y - ellipse center point y-axis
@param {number} w - horizontal radius of the ellipse
@param {number} h - vertical radius of the ellipse
@param {boolean} [fill=false] - also fill the shape with the current color if true