private void drawOval(int rx1, int ry1, int w, int h, int c, boolean fill)
    {
        if (fill)
        {
            Ellipse2D e = new Ellipse2D.Double(rx1, ry1, w, h);
            for (int x = rx1; x <= rx1 + w; x++)
                for (int y = ry1; y <= ry1 + h; y++)
                    if (e.contains(x, y))
                        drawPoint(x, y, c);
        }
        else
        {
            float yr = ((float) h) / 2, xr = ((float) w) / 2;
            double tp = 0.01; // t percison
            for (double t = 0; t < Math.PI * 2; t += tp)
            {
                drawPoint((int) Math.round(rx1 + xr + (xr * Math.cos(t))),
                    (int) Math.round(ry1 + yr + (yr * Math.sin(t))), c);
            }
        }
    }