All pastes #1411251 Raw Edit

Something

public c v1 · immutable
#1411251 ·published 2009-05-03 15:33 UTC
rendered paste body
/*This source code copyrighted by Lazy Foo' Productions (2004-2009) and may notbe redestributed without written permission.*///The headers#include "SDL/SDL.h"#include "SDL/SDL_image.h"#include "SDL/SDL_ttf.h"#include <string>//Screen attributesconst int SCREEN_WIDTH = 640;const int SCREEN_HEIGHT = 480;const int SCREEN_BPP = 32;//The surfacesSDL_Surface *background = NULL;SDL_Surface *message = NULL;SDL_Surface *screen = NULL;//The event structureSDL_Event event;//The font that's going to be usedTTF_Font *font = NULL;//The color of the fontSDL_Color textColor = { 255, 255, 255 };SDL_Surface *load_image( std::string filename ){    //The image that's loaded    SDL_Surface* loadedImage = NULL;    //The optimized surface that will be used    SDL_Surface* optimizedImage = NULL;    //Load the image    loadedImage = IMG_Load( filename.c_str() );    //If the image loaded    if( loadedImage != NULL )    {        //Create an optimized surface        optimizedImage = SDL_DisplayFormat( loadedImage );        //Free the old surface        SDL_FreeSurface( loadedImage );        //If the surface was optimized        if( optimizedImage != NULL )        {            //Color key surface            SDL_SetColorKey( optimizedImage, SDL_SRCCOLORKEY, SDL_MapRGB( optimizedImage->format, 0, 0xFF, 0xFF ) );        }    }    //Return the optimized surface    return optimizedImage;}void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = NULL ){    //Holds offsets    SDL_Rect offset;    //Get offsets    offset.x = x;    offset.y = y;    //Blit    SDL_BlitSurface( source, clip, destination, &offset );}bool init(){    //Initialize all SDL subsystems    if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )    {        return false;    }    //Set up the screen    screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );    //If there was an error in setting up the screen    if( screen == NULL )    {        return false;    }    //Initialize SDL_ttf    if( TTF_Init() == -1 )    {        return false;    }    //Set the window caption    SDL_WM_SetCaption( "TTF Test", NULL );    //If everything initialized fine    return true;}bool load_files(){    //Load the background image    background = load_image( "background.png" );    //Open the font    font = TTF_OpenFont( "lazy.ttf", 28 );    //If there was a problem in loading the background    if( background == NULL )    {        return false;    }    //If there was an error in loading the font    if( font == NULL )    {        return false;    }    //If everything loaded fine    return true;}void clean_up(){    //Free the surfaces    SDL_FreeSurface( background );    SDL_FreeSurface( message );    //Close the font that was used    TTF_CloseFont( font );    //Quit SDL_ttf    TTF_Quit();    //Quit SDL    SDL_Quit();}int main( int argc, char* args[] ){    //Quit flag    bool quit = false;    //Initialize    if( init() == false )    {        return 1;    }    //Load the files    if( load_files() == false )    {        return 1;    }    //Render the text    message = TTF_RenderText_Solid( font, "The quick brown fox jumps over the lazy hound", textColor );    //If there was an error in rendering the text    if( message == NULL )    {        return 1;    }                Uint32 rmask, gmask, bmask, amask;                #if SDL_BYTEORDER == SDL_BIG_ENDIAN                   rmask = 0xff000000;                   gmask = 0x00ff0000;                   bmask = 0x0000ff00;                   amask = 0x000000ff;               #else                   rmask = 0x000000ff;                   gmask = 0x0000ff00;                   bmask = 0x00ff0000;                   amask = 0xff000000;               #endif    //Apply the images to the screen    SDL_Surface* tmpS =  SDL_CreateRGBSurface(SDL_HWSURFACE, 256, 256, 32, rmask, gmask, bmask, amask );    SDL_Surface* tmp =  SDL_CreateRGBSurface(SDL_HWSURFACE, 512, 480, 32, rmask, gmask, bmask, amask );    apply_surface( 0, 0, background, screen );    apply_surface( 0, 10, message, tmpS );    apply_surface( 0, 10, tmpS, tmp );    apply_surface( 0, 200, tmp, screen );    //Update the screen    if( SDL_Flip( screen ) == -1 )    {        return 1;    }    //While the user hasn't quit    while( quit == false )    {        //While there's events to handle        while( SDL_PollEvent( &event ) )        {            //If the user has Xed out the window            if( event.type == SDL_QUIT )            {                //Quit the program                quit = true;            }        }    }    //Free surfaces and font then quit SDL_ttf and SDL    clean_up();    return 0;}