#include <stdio.h>

#include "Couleur.h"

Couleur *Couleur::blanc = new Couleur(1.0F,1.0F,1.0F,1.0F);
Couleur *Couleur::jaune = new Couleur(1.0F,1.0F,0.0F,1.0F);
Couleur *Couleur::cyan = new Couleur(0.0F,1.0F,1.0F,1.0F);
Couleur *Couleur::magenta = new Couleur(1.0F,0.0F,1.0F,1.0F);
Couleur *Couleur::rouge = new Couleur(1.0F,0.0F,0.0F,1.0F);
Couleur *Couleur::vert = new Couleur(0.0F,1.0F,0.0F,1.0F);
Couleur *Couleur::bleu = new Couleur(0.0F,0.0F,1.0F,1.0F);
Couleur *Couleur::noir = new Couleur(0.0F,0.0F,0.0F,1.0F);
Couleur *Couleur::grisTresFonce = new Couleur(0.1F,0.1F,0.1F,1.0F);
Couleur *Couleur::grisFonce = new Couleur(0.25F,0.25F,0.25F,1.0F);
Couleur *Couleur::grisMoyen = new Couleur(0.5F,0.5F,0.5F,1.0F);
Couleur *Couleur::grisClair = new Couleur(0.75F,0.75F,0.75F,1.0F);
Couleur *Couleur::jauneClair = new Couleur(0.75F,0.75F,0.0F,1.0F);
Couleur *Couleur::jauneFonce = new Couleur(0.5F,0.5F,0.0F,1.0F);
Couleur *Couleur::cyanFonce = new Couleur(0.0F,0.5F,0.5F,1.0F);
Couleur *Couleur::magentaFonce = new Couleur(0.5F,0.0F,0.5F,1.0F);
Couleur *Couleur::rougeFonce = new Couleur(0.5F,0.0F,0.0F,1.0F);
Couleur *Couleur::vertFonce = new Couleur(0.0F,0.5F,0.0F,1.0F);
Couleur *Couleur::bleuFonce = new Couleur(0.0F,0.0F,0.5F,1.0F);
Couleur *Couleur::brun = new Couleur(0.8F,0.6F,0.4F,1.0F);
Couleur *Couleur::rose = new Couleur(1.0F,0.65F,0.65F,1.0F);
Couleur *Couleur::roseFonce = new Couleur(0.6F,0.25F,0.25F,1.0F);
Couleur *Couleur::bleuCiel = new Couleur(0.5F,0.5F,1.0F,1.0F);
Couleur *Couleur::bleuCielFonce = new Couleur(0.25F,0.25F,0.5F,1.0F);

Couleur::Couleur(void) {
  r = v = b = 0.0F;
  a = 1.0F;
}

Couleur::Couleur(float srouge,float svert,float sbleu) {
  r = srouge;
  v = svert;
  b = sbleu;
  a = 1.0F;
}

Couleur::Couleur(float srouge,float svert,float sbleu,float salpha) {
  r = srouge;
  v = svert;
  b = sbleu;
  a = salpha;
}

Couleur::Couleur(Couleur *c) {
  r = c->r;
  v = c->v;
  b = c->b;
  a = c->a;
}

Couleur::~Couleur(void) {
  r = v = b = 0.0F;
}

void Couleur::set(Couleur *c) {
  r = c->r;
  v = c->v;
  b = c->b;
  a = c->a;
}

Couleur *Couleur::couleurBleuCiel(float alpha) {
  static Couleur coul;
  coul.r = bleuCiel->r;
  coul.v = bleuCiel->v;
  coul.b = bleuCiel->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurBleuCielFonce(float alpha) {
  static Couleur coul;
  coul.r = bleuCielFonce->r;
  coul.v = bleuCielFonce->v;
  coul.b = bleuCielFonce->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurRose(float alpha) {
  static Couleur coul;
  coul.r = rose->r;
  coul.v = rose->v;
  coul.b = rose->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurRoseFonce(float alpha) {
  static Couleur coul;
  coul.r = roseFonce->r;
  coul.v = roseFonce->v;
  coul.b = roseFonce->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurGris(float niveau,float alpha) {
  static Couleur coul;
  coul.r = niveau;
  coul.v = niveau;
  coul.b = niveau;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurGrisFonce(float alpha) {
  static Couleur coul;
  coul.r = grisFonce->r;
  coul.v = grisFonce->v;
  coul.b = grisFonce->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurGrisTresFonce(float alpha) {
  static Couleur coul;
  coul.r = grisTresFonce->r;
  coul.v = grisTresFonce->v;
  coul.b = grisTresFonce->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurGrisMoyen(float alpha) {
  static Couleur coul;
  coul.r = grisMoyen->r;
  coul.v = grisMoyen->v;
  coul.b = grisMoyen->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurGrisClair(float alpha) {
  static Couleur coul;
  coul.r = grisClair->r;
  coul.v = grisClair->v;
  coul.b = grisClair->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurBlanc(float alpha) {
  static Couleur coul;
  coul.r = blanc->r;
  coul.v = blanc->v;
  coul.b = blanc->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurJaune(float alpha) {
  static Couleur coul;
  coul.r = jaune->r;
  coul.v = jaune->v;
  coul.b = jaune->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurCyan(float alpha) {
  static Couleur coul;
  coul.r = cyan->r;
  coul.v = cyan->v;
  coul.b = cyan->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurMagenta(float alpha) {
  static Couleur coul;
  coul.r = magenta->r;
  coul.v = magenta->v;
  coul.b = magenta->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurNoir(float alpha) {
  static Couleur coul;
  coul.r = noir->r;
  coul.v = noir->v;
  coul.b = noir->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurVert(float alpha) {
  static Couleur coul;
  coul.r = vert->r;
  coul.v = vert->v;
  coul.b = vert->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurRouge(float alpha) {
  static Couleur coul;
  coul.r = rouge->r;
  coul.v = rouge->v;
  coul.b = rouge->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurBleu(float alpha) {
  static Couleur coul;
  coul.r = bleu->r;
  coul.v = bleu->v;
  coul.b = bleu->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurJauneClair(float alpha) {
  static Couleur coul;
  coul.r = jauneClair->r;
  coul.v = jauneClair->v;
  coul.b = jauneClair->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurJauneFonce(float alpha) {
  static Couleur coul;
  coul.r = jauneFonce->r;
  coul.v = jauneFonce->v;
  coul.b = jauneFonce->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurCyanFonce(float alpha) {
  static Couleur coul;
  coul.r = cyanFonce->r;
  coul.v = cyanFonce->v;
  coul.b = cyanFonce->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurMagentaFonce(float alpha) {
  static Couleur coul;
  coul.r = magentaFonce->r;
  coul.v = magentaFonce->v;
  coul.b = magentaFonce->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurVertFonce(float alpha) {
  static Couleur coul;
  coul.r = vertFonce->r;
  coul.v = vertFonce->v;
  coul.b = vertFonce->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurRougeFonce(float alpha) {
  static Couleur coul;
  coul.r = rougeFonce->r;
  coul.v = rougeFonce->v;
  coul.b = rougeFonce->b;
  coul.a = alpha;
  return(&coul);
}

Couleur *Couleur::couleurBleuFonce(float alpha) {
  static Couleur coul;
  coul.r = bleuFonce->r;
  coul.v = bleuFonce->v;
  coul.b = bleuFonce->b;
  coul.a = alpha;
  return(&coul);
}

void Couleur::finalize(void) {
  if ( !blanc )
    return;
  delete(blanc);
  blanc = NULL;
  delete(rouge);
  delete(vert);
  delete(bleu);
  delete(cyan);
  delete(magenta);
  delete(jaune);
  delete(noir);
  delete(grisTresFonce);
  delete(grisFonce);
  delete(grisMoyen);
  delete(grisClair);
  delete(jauneClair);
  delete(jauneFonce);
  delete(cyanFonce);
  delete(magentaFonce);
  delete(rougeFonce);
  delete(vertFonce);
  delete(bleuFonce);
  delete(brun);
  delete(rose);
  delete(roseFonce);
  delete(bleuCiel);
  delete(bleuCielFonce);
}
