/*_____________________________________________________
 * objet rectangle
 * par Martin Robinson
 * dépend de l'objet point
 *_____________________________________________________
 * preprocesseur
 */

#include "point.hpp"
#include "rectangle.hpp"

/*_____________________________________________________
 * methode
*/

//constructeur
rectangle::rectangle()
{
    init(0,0, 0,0);
}

rectangle::rectangle(int x1, int y1, int x2, int y2)
{
    init(x1,y1, x2,y2);
}

//destructeur
rectangle::~rectangle()
{
    _a = point();
    _b = point();
}

//mutator
void rectangle::init(int x1, int y1, int x2, int y2)
{
    _a.setX(x1);
    _a.setY(y1);
    _b.setX(x2);
    _b.setY(y2);
    normalizeX();
    normalizeY();
}

//mettre les coordonnée en ordre
void rectangle::normalizeX()
{
    int ax = _a.getX();
    if (ax > _b.getX())
    {
        _a.setX(_b.getX());
        _b.setX(ax);
    }
}

void rectangle::normalizeY()
{
    int ay = _a.getY();
    if (ay > _b.getY())
    {
        _a.setY(_b.getY());
        _b.setY(ay);
    }
}

//getter
int rectangle::getX1()const
{
    return _a.getX();
}

int rectangle::getY1()const
{
    return _a.getY();
}

int rectangle::getX2()const
{
    return _b.getX();
}

int rectangle::getY2()const
{
    return _b.getY();
}

//setter
//pour ces quatre fonction, je veille à ce que les coordonnées soient en ordre croissant
void rectangle::setX1(int x)
{
    _a.setX(x);
    normalizeX();
}

void rectangle::setY1(int y)
{
    _a.setY(y);
    normalizeY();
}

void rectangle::setX2(int x)
{
    _b.setX(x);
    normalizeX();
}

void rectangle::setY2(int y)
{
    _b.setY(y);
    normalizeY();
}

//calculator
//hauteur
int rectangle::width()const
{
    return _b.getX()-_a.getX();
}

//largeur
int rectangle::heigth()const
{
    return _b.getY()-_a.getY();
}

//perimetre
int rectangle::perimeter()const
{
    return 2 * (width()+heigth());
}

//aire
int rectangle::area()const
{
    return width()*heigth();
}



