//GH: ADDED ------------------------------------------------------------------------------
Box::Box(Point xxyy, int ww, int hh): w(ww), h(hh), xy(xxyy) {
    if(w>h)
        longer_side_tenth = (xy.x + w) * 0.10;
    if(h>w)
        longer_side_tenth = (xy.x + h) * 0.10;
    if (h<=0 || w<=0) error("Bad rectangle: non-positive side");
    Get_segments();
}

//------------------------------------------------------------------------------
void Box::Get_segments() {
    Top_segment ();
    Bottom_segment ();
    Left_side_segment ();
    Right_side_segment();
}
//------------------------------------------------------------------------------
void Box::draw_lines() const {
//top segment
    fl_line(
        top_seg[0].x,
        top_seg[0].y,
        top_seg[1].x,
        top_seg[1].y);
//bottom segment
    fl_line(
        bottom_seg[0].x,
        bottom_seg[0].y,
        bottom_seg[1].x,
        bottom_seg[1].y);

//left segment
    fl_line(
        left_seg[0].x,
        left_seg[0].y,
        left_seg[1].x,
        left_seg[1].y);

//right segmnet
    fl_line(
        right_seg[0].x,
        right_seg[0].y,
        right_seg[1].x,
        right_seg[1].y);

//top left arc
    fl_arc(
        xy.x,
        xy.y,
        longer_side_tenth,
        longer_side_tenth,
        90,180);

//top right arc
    fl_arc(
        (xy.x + w)-longer_side_tenth,
        xy.y,
        longer_side_tenth,
        longer_side_tenth,
        0,90);

//bottom left arc
    fl_arc(
        xy.x,
        (xy.y + h) - longer_side_tenth,
        longer_side_tenth,
        longer_side_tenth,
        180,270);

//bottom right arc
    fl_arc(
        (xy.x + w) - longer_side_tenth,
        (xy.y + h) - longer_side_tenth,
        longer_side_tenth,
        longer_side_tenth,
        270,360);

}
//------------------------------------------------------------------------------
void Box::Top_segment() {

    double top_seg_begin_w; //where the line segment will begin after deducting 10% of w;
    double top_seg_end_w; //where the line segment will end after deducting 10% of w;

    top_seg_begin_w = xy.x + longer_side_tenth/2;
    top_seg_end_w = (xy.x + w) - longer_side_tenth/2;

    double top_seg_y = xy.y;

    top_seg.push_back(Point(top_seg_begin_w,top_seg_y));
    top_seg.push_back(Point(top_seg_end_w,top_seg_y));

}

//------------------------------------------------------------------------------
void Box::Bottom_segment() {
    double bottom_seg_begin_w;
    double bottom_seg_end_w;

    bottom_seg_begin_w = xy.x + longer_side_tenth/2;
    bottom_seg_end_w = (xy.x + w) - longer_side_tenth/2;

    double y_bottom = xy.y + h;

    bottom_seg.push_back(Point(bottom_seg_begin_w,y_bottom));
    bottom_seg.push_back(Point(bottom_seg_end_w,y_bottom));
}

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void Box::Left_side_segment() {
    double left_seg_begin_h;
    double left_seg_end_h;

    left_seg_begin_h = xy.y + longer_side_tenth/2;

    left_seg_end_h = (xy.y + h) - longer_side_tenth/2;

    double x_left = xy.x;

    left_seg.push_back(Point(x_left, left_seg_begin_h));
    left_seg.push_back(Point(x_left, left_seg_end_h));

}
//------------------------------------------------------------------------------
void Box::Right_side_segment() {
    double right_seg_begin_h;
    double right_seg_end_h;

    right_seg_begin_h = xy.y + longer_side_tenth/2;
    right_seg_end_h = (xy.y + h) - longer_side_tenth/2;

    double x_right = xy.x + w;

    right_seg.push_back(Point(x_right, right_seg_begin_h));
    right_seg.push_back(Point(x_right, right_seg_end_h));
}