/*=============================================================================
Exemple SDL
===============================================================================
Preprocesseur
=============================================================================*/
#include "sdl/SDL.h"
/*=============================================================================
programme principal
=============================================================================*/
int main(int argc, char* argv[])
{
    //===========================================================Initialisation
    SDL_Surface *screen;            //la window elle même
    SDL_Event event;                //clavier souris
    Uint32 time;                    //le temps

    if (SDL_Init(SDL_INIT_EVERYTHING) < 0 ) return 1;
    if (!(screen = SDL_SetVideoMode(500, 400, 32, SDL_SWSURFACE)))
    {
        SDL_Quit();                 //démarrage sans bug
        return 1;
    }

    //voici comment les couleurs sont déclarés
    //Uint32 à la place de Int car même en 64bits les couleurs doivent rester 32bits
    Uint32 black = SDL_MapRGB(screen->format, 0x00, 0x00, 0x00);


    SDL_Surface* loadedImage = SDL_LoadBMP( "HighDefinitionImage.bmp" );   //chargement d'une image bmp
    SDL_Surface* optimizedImage = SDL_DisplayFormat( loadedImage );        //etape facultative, si l'image est 8bits et la surface 32bits, ça ralentis
    SDL_FreeSurface( loadedImage );                                        //image temporaire n'est plus requis
    SDL_Rect position;                                                     //coordonné X Y.....en option w et h
    //=========================================================boucle principal
    int quit = 0;
    while(!quit)                        //tanque pas fini
    {
        //la synchronization FPS
        time = SDL_GetTicks();          //compteur en milliseconde
        SDL_Delay( 15 );                //attendre 15 milliseconde
        //code video
        SDL_FillRect(screen, NULL, black);                          //clear screen
        SDL_BlitSurface( optimizedImage, NULL, screen, &position ); //copie la premiere image dans la deuxieme(screen) a la "positon" donnée
        SDL_Flip(screen);                                           //toute les modifications n'apparaissent pas tan que cette ligne n'est pas
                                                                    // executer, ça rend l'animation fluide, DOUBLE BUFFERING
        while(SDL_PollEvent(&event))    //toute les evenements s'empile dans une liste , à chaque frame il faut la vidé
         {
              switch (event.type)       //le code est facile à comprendre
              {
                  case SDL_QUIT:
                        quit = 1;
                        break;
                  case SDL_KEYDOWN:
                       quit = 1;
                       break;
                  case SDL_MOUSEMOTION:
                      position.x = event.motion.x;
                      position.y = event.motion.y;
                      break;
              }
         }
    }
    //=========================================================Fin de programme
    SDL_Quit();
    return 0;
}