#include #include #include #include #define width 320 #define height 240 int main() { SDL_Rect rect = {0, 0, width, height}; SDL_Rect firstRect = {10, 10, 50, 100}; SDL_Rect secondRect = {30, 50, 100, 100}; SDL_Rect firstRectForFill = {240 + 10, 10, 50, 100}; SDL_Rect secondRectForFill = {240 + 30, 50, 100, 100}; SDL_Rect rectForTest = {0, 0, 0, 0}; SDL_Rect lastRect = { 100, 150, 120, 40}; SDL_Init(SDL_INIT_VIDEO); SDL_Surface *dst = SDL_SetVideoMode(width, height, 32, SDL_HWSURFACE); SDL_Surface *src = SDL_CreateRGBSurface(0, width, height, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000); /* Fill dst with yellow color */ SDL_FillRect(src, &rect, SDL_MapRGB(src->format, 255, 255, 0)); SDL_FillRect(dst, &rect, SDL_MapRGB(dst->format, 0, 0, 0)); SDL_SetClipRect(dst, NULL); SDL_BlitSurface(src, &rect, dst, &rect); /* Draw red on dst */ SDL_FillRect(src, &rect, SDL_MapRGB(src->format, 255, 0, 0)); SDL_SetClipRect(dst, &firstRect); SDL_BlitSurface(src, &rect, dst, &rect); assert(rect.x = firstRect.x); assert(rect.y = firstRect.y); assert(rect.w = firstRect.w); assert(rect.h = firstRect.h); /* Draw green rect on red rect */ SDL_FillRect(src, &rect, SDL_MapRGB(src->format, 0, 255, 0)); SDL_SetClipRect(dst, &secondRect); SDL_BlitSurface(src, &rect, dst, &rect); assert(rect.x = secondRect.x); assert(rect.y = secondRect.y); assert(rect.w = firstRect.x + firstRect.w); assert(rect.h = firstRect.h + firstRect.h); /* Same with fill rect */ rect.x = 0; rect.y = 0; rect.w = width; rect.h = height; SDL_SetClipRect(dst, &firstRectForFill); SDL_FillRect(dst, &rect, SDL_MapRGB(dst->format, 0, 0, 255)); assert(rect.x = firstRectForFill.x); assert(rect.y = firstRectForFill.y); assert(rect.w = firstRectForFill.w); assert(rect.h = firstRectForFill.h); SDL_SetClipRect(dst, &secondRectForFill); SDL_FillRect(dst, &rect, SDL_MapRGBA(dst->format, 255, 0, 255, 255)); assert(rect.x = secondRectForFill.x); assert(rect.y = secondRectForFill.y); assert(rect.w = firstRectForFill.x + firstRectForFill.w); assert(rect.h = firstRectForFill.h + firstRectForFill.h); SDL_GetClipRect(dst, &rectForTest); assert(rectForTest.x == 270); assert(rectForTest.y == 50); assert(rectForTest.w == 50); assert(rectForTest.h == 100); SDL_SetClipRect(dst, 0); SDL_FillRect(dst, &lastRect, SDL_MapRGBA(dst->format, 255, 0, 0, 255)); SDL_UpdateRect(dst, 0, 0, width, height); printf("There should be yellow background\n"); printf("One the left side there should be red rect with green rect inside\n"); printf("One the right side there should be blue rect with pink rect inside\n"); SDL_Quit(); return 0; }