/* Example of alpha blending with SDL. */

#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
	SDL_Surface *screen;
	SDL_Surface *background;
	SDL_Surface *image_with_alpha;
	SDL_Surface *image_without_alpha;
	SDL_Rect src, dest;

	/* init sdl and check for erro */
	if (SDL_Init(SDL_INIT_VIDEO) != 0) {
		printf("Unable to init SDL: %s\n", SDL_GetError());
		return 1;
	}

	atexit(SDL_Quit);

	screen = SDL_SetVideoMode(800, 600, 16, 0);
	if (screen == NULL) {
		printf("Unable to set video mode: %s\n", SDL_GetError());
		return 1;
	}

	/* Load image file */
	image_with_alpha = IMG_Load("with-alpha.png");
	if (image_with_alpha == NULL) {
			printf("Unable to load image. \n");
			return 1;
	}
	
	image_without_alpha = IMG_Load("without-alpha.png");
	if (image_without_alpha == NULL) {
		printf("Unable to load image\n");
			return 1;
	}

	background = IMG_Load("background.png");
	if (background == NULL) {
		printf("Unable to load background.png.\n");
		return 1;
	}

	/* Draw background. */

	src.x = 0;
	src.y = 0;
	src.w = background->w;
	src.h = background->h;
	dest.x = 0;
	dest.y = 0;
	dest.w = background->w;
	dest.h = background->h;
	SDL_BlitSurface(background, &src, screen, &dest);

	/* draw first image with alpha */

	SDL_SetAlpha(image_with_alpha, SDL_SRCALPHA, 0);
	src.w = image_with_alpha->w;
	src.h = image_with_alpha->h;
	dest.w = src.w;
	dest.h = src.h;
	dest.x = 40;
	dest.y = 50;
	SDL_BlitSurface(image_with_alpha, &src, screen, &dest);

	/* Draw second image without alpha. Set to 50% transparence for entire surface.
	 */
	SDL_SetAlpha(image_without_alpha, SDL_SRCALPHA, 128);
	src.w = image_without_alpha->w;
	src.h = image_without_alpha->h;
	dest.w = src.w;
	dest.h = src.h;
	dest.x = 180;
	dest.y = 50;
	SDL_BlitSurface(image_without_alpha, &src, screen, &dest);

	/* Ask SDL to update entire screen */
	SDL_UpdateRect(screen, 0, 0, 0, 0);

	SDL_Delay(10000);

	/* Free memory */
	SDL_FreeSurface(background);
	SDL_FreeSurface(image_with_alpha);
	SDL_FreeSurface(image_without_alpha);

	return 0;
}