///
/// \file Couleur.h
/// Implante une structure de stockage d'une couleur RVBA.
/// 
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///

#ifndef ____COULEUR____
#define ____COULEUR____

///
/// \class Couleur
/// Implante une structure de stockage d'une couleur RVBA.
/// 
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///

class Couleur {

  public :
    float r;      ///< Composante rouge.
    float v;      ///< Composante verte.
    float b;      ///< Composante bleue.
    float a;      ///< Composante alpha.

  public :

///
/// Constructeur basique.
///
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    Couleur(void);

///
/// Constructeur avec parametres.
///
/// @param rouge La composante rouge.
/// @param vert La composante verte.
/// @param bleu La composante bleue.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    Couleur(float rouge,float vert,float bleu);

///
/// Constructeur avec parametres.
///
/// @param rouge La composante rouge.
/// @param vert La composante verte.
/// @param bleu La composante bleue.
/// @param alpha La composante alpha.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    Couleur(float rouge,float vert,float bleu,float alpha);

///
/// Constructeur par clonage.
///
/// @param c La Couleur a copier.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    Couleur(Couleur *c);

///
/// Destructeur.
///
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    ~Couleur();

/// Finalisation de la bibliotheque.
///
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    static void finalize(void);

/// Copie d'une Couleur dans this.
///
/// @param c La Couleur a copier.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    void set(Couleur *c);
    
  public :

/// Blanc (1.0,1.0,1.0,1.0).
    static Couleur *blanc;
/// Jaune (1.0,1.0,0.0,1.0).
    static Couleur *jaune;
/// Cyan (0.0,1.0,1.0,1.0).
    static Couleur *cyan;
/// Magenta (1.0,0.0,1.0,1.0).
    static Couleur *magenta;
/// Rouge (1.0,0.0,0.0,1.0).
    static Couleur *rouge;
/// Vert (0.0,1.0,0.0,1.0).
    static Couleur *vert;
/// Bleu (0.0,0.0,1.0,1.0).
    static Couleur *bleu;
/// Noir (0.0,0.0,0.0,1.0).
    static Couleur *noir;
/// Gris tres fonce (0.1,0.1,0.1,1.0).
    static Couleur *grisTresFonce;
/// Gris fonce (0.25,0.25,0.25,1.0).
    static Couleur *grisFonce;
/// Gris moyen (0.5,0.5,0.5,1.0).
    static Couleur *grisMoyen;
/// Gris clair (0.75,0.75,0.75,1.0).
    static Couleur *grisClair;
/// Jaune clair (0.75,0.75,0.0,1.0).
    static Couleur *jauneClair;
/// Jaune fonce (0.5,0.5,0.0,1.0).
    static Couleur *jauneFonce;
/// Cyan fonce (0.0,0.5,0.5,1.0).
    static Couleur *cyanFonce;
/// Magenta fonce (0.5,0.0,0.5,1.0).
    static Couleur *magentaFonce;
/// Rouge fonce (0.5,0.0,0.0,1.0).
    static Couleur *rougeFonce;
/// Vert fonce (0.0,0.5,0.0,1.0).
    static Couleur *vertFonce;
/// Bleu fonce (0.0,0.0,0.5,1.0).
    static Couleur *bleuFonce;
/// Brun (0.8,0.6,0.4,1.0).
    static Couleur *brun;
/// Rose (1.0,0.65,0.65,1.0).
    static Couleur *rose;
/// Rose fonce (0.6,0.25,0.25,1.0).
    static Couleur *roseFonce;
/// Bleu ciel (0.5,0.5,1.0,1.0).
    static Couleur *bleuCiel;
/// Bleu ciel fonce (0.25,0.25,0.5,1.0).
    static Couleur *bleuCielFonce;
    Couleur *couleurBleuCiel(float alpha);
    Couleur *couleurBleuCielFonce(float alpha);
    Couleur *couleurRose(float alpha);
    Couleur *couleurRoseFonce(float alpha);
    Couleur *couleurGris(float niveau,float alpha);
    Couleur *couleurGrisFonce(float alpha);
    Couleur *couleurGrisTresFonce(float alpha);
    Couleur *couleurGrisMoyen(float alpha);
    Couleur *couleurGrisClair(float alpha);
    Couleur *couleurBlanc(float alpha);
    Couleur *couleurJaune(float alpha);
    Couleur *couleurCyan(float alpha);
    Couleur *couleurMagenta(float alpha);
    Couleur *couleurNoir(float alpha);
    Couleur *couleurVert(float alpha);
    Couleur *couleurRouge(float alpha);
    Couleur *couleurBleu(float alpha);
    Couleur *couleurJauneClair(float alpha);
    Couleur *couleurJauneFonce(float alpha);
    Couleur *couleurCyanFonce(float alpha);
    Couleur *couleurMagentaFonce(float alpha);
    Couleur *couleurVertFonce(float alpha);
    Couleur *couleurRougeFonce(float alpha);
    Couleur *couleurBleuFonce(float alpha);
 } ;

#endif
