private void drawCircle(int xc, int yc, int r, Graphics g) {
        /*
         * Declare and initialise local variables.
         * The origin is base on positive y-axis at (0,r)
         * 
         * int x and y - Circle coordinates use 
         *               to draw the pixels of circle's 8 arcs.
         * int p - A computed variable responsible for determining 
         *              which pixels to draw.
         */
        int x, y, p;

        x = 0;
        y = r;

        // Initialises first points of the 8 arcs.
        this.drawCircleArcs(g, x, y, xc, yc);

        // Initialise the value of P, base on the Bresenham's algorithm.      
        p = 3 - 2 * r;

        while (x <= y) {
            // Increments x at each iteration regardless the value of p.
            x++;

            // If the value of P is negative then choose (x, y)
            //      as the next pixel to draw
            // Then calculate the next value of p
            if (p < 0) {
                p += (4 * x) + 6;
            } // Else choose the pixel (x, y-1) to draw
            // Then calculate the next value of p
            else {
                y--;
                p += (4 * (x - y)) + 10;
            }

            // Draws the 8 pixels for each octant of the circle through symmetry;
            //      by calling the drawTheCircle method which takes
            //      circle parameters as method arguments.
            if (super.getThick() == 1) {
                this.drawCircleArcs(g, x, y, xc, yc);
            } else {
                this.drawCircleArcsFootprint(g, x, y, xc, yc);
            }

        }
    }