//------------------------------------------------------------------------------
// in Graph.h
struct Smiley : Circle {
    Smiley(Point p, int r) : Circle(p,r) {}
    void draw_lines() const;
};

//------------------------------------------------------------------------------
// in Graph.cpp
void Smiley::draw_lines() const {
    if( color().visibility()) {
        Circle::draw_lines();
        ///smile
        fl_arc(point(0).x+radius()/2, point(0).y+radius()/1.6, 1.3*radius(), radius(), 180, 360);        std::cout << "\npoint(0).x+radius()/2 = " << point(0).x+radius()/2;
        ///left eye
        fl_arc(point(0).x+radius()/1.8, point(0).y+radius()/3, radius()/10, radius()/12,0,360);
        ///right eye
        fl_arc(point(0).x+radius()/.7, point(0).y+radius()/3, radius()/10, radius()/12,0,360);
        std::cout << "\nradius()/2 = " << radius()/2;
    }
}

///Compare with
//------------------------------------------------------------------------------

struct Happy : Shape {
    Happy(Point xy, int r);  //Cstr prototype

    void outline() const;  // just for numbers
    void draw_lines() const;

    //int height() const { return h; }
    //int width () const { return w; }

private:
    Point ctr; //center
    int r; // radius
    //int w; // width
};


//------------------------------------------------------------------------------
void Happy::outline() const {
    cout << "\nctr = (" << ctr.x << ", " << ctr.y << "), r = " << r;
}


//------------------------------------------------------------------------------

void Happy::draw_lines() const {
    fl_arc(ctr.x-r, ctr.y-r, 2*r, 2*r, 0, 360);
    //outline();
    //bottome smile
    double smile_radius = sqrt3*r/2;
    fl_arc(ctr.x-smile_radius,ctr.y-smile_radius, 2*int(smile_radius), 2*int(smile_radius), 210, 330);
    //top smile;
    double a = 3*sqrt(2)*smile_radius/4;
    double b = sqrt3*smile_radius/2;
    fl_arc(ctr.x-a, ctr.y-b, 2*int(a), 2*int(b), 210, 330);
    //left eye
    fl_arc(ctr.x-r/2,ctr.y-r/2,r/5,r/5,0,360);
    //right eye
    fl_arc(ctr.x+2*r/5,ctr.y-r/2,r/5,r/5,0,360);
    //nose
    fl_line(ctr.x,ctr.y-r/2,ctr.x+r/5,ctr.y+r/5);
    fl_line(ctr.x+r/5,ctr.y+r/5,ctr.x-r/5,ctr.y+r/6);
    //fl_point()
}

