Commit 0e0ad58e authored by Eli Gottlieb's avatar Eli Gottlieb

Added Andreas's VS2010 patch for testshape.

parent d5e0ecb0
#include <stdlib.h> #include <stdlib.h>
#include <math.h> #include <math.h>
#include <SDL_events.h> #include <stdio.h>
#include <SDL_rect.h> #include "SDL.h"
#include <SDL_pixels.h> #include "SDL_shape.h"
#include <SDL_video.h>
#include <SDL_shape.h>
#include <SDL_keysym.h>
#include <SDL_timer.h>
#define SHAPED_WINDOW_X 150 #define SHAPED_WINDOW_X 150
#define SHAPED_WINDOW_Y 150 #define SHAPED_WINDOW_Y 150
...@@ -44,7 +40,23 @@ Uint32 time_left() { ...@@ -44,7 +40,23 @@ Uint32 time_left() {
} }
int main(int argc,char** argv) { int main(int argc,char** argv) {
if(argc < 2) { Uint8 num_pictures;
LoadedPicture* pictures;
int i, j;
SDL_PixelFormat* format;
Uint32 format_enum;
SDL_Window *window;
SDL_Color black = {0,0,0,0xff};
SDL_Event event;
int event_pending = 0;
int should_exit = 0;
unsigned int current_picture;
int button_down;
Uint32 pixelFormat;
int access;
SDL_Rect texture_dimensions;;
if(argc < 2) {
printf("SDL_Shape requires at least one bitmap file as argument.\n"); printf("SDL_Shape requires at least one bitmap file as argument.\n");
exit(-1); exit(-1);
} }
...@@ -54,15 +66,14 @@ int main(int argc,char** argv) { ...@@ -54,15 +66,14 @@ int main(int argc,char** argv) {
exit(-2); exit(-2);
} }
Uint8 num_pictures = argc - 1; num_pictures = argc - 1;
LoadedPicture* pictures = malloc(sizeof(LoadedPicture)*num_pictures); pictures = (LoadedPicture *)malloc(sizeof(LoadedPicture)*num_pictures);
int i = 0;
for(i=0;i<num_pictures;i++) for(i=0;i<num_pictures;i++)
pictures[i].surface = NULL; pictures[i].surface = NULL;
for(i=0;i<num_pictures;i++) { for(i=0;i<num_pictures;i++) {
pictures[i].surface = SDL_LoadBMP(argv[i+1]); pictures[i].surface = SDL_LoadBMP(argv[i+1]);
if(pictures[i].surface == NULL) { if(pictures[i].surface == NULL) {
int j = 0; j = 0;
for(j=0;j<num_pictures;j++) for(j=0;j<num_pictures;j++)
if(pictures[j].surface != NULL) if(pictures[j].surface != NULL)
SDL_FreeSurface(pictures[j].surface); SDL_FreeSurface(pictures[j].surface);
...@@ -71,20 +82,20 @@ int main(int argc,char** argv) { ...@@ -71,20 +82,20 @@ int main(int argc,char** argv) {
printf("Could not load surface from named bitmap file.\n"); printf("Could not load surface from named bitmap file.\n");
exit(-3); exit(-3);
} }
SDL_PixelFormat* format = pictures[i].surface->format;
Uint32 format_enum = SDL_MasksToPixelFormatEnum (format->BitsPerPixel,format->Rmask,format->Gmask, format->Bmask,format->Amask); format = pictures[i].surface->format;
format_enum = SDL_MasksToPixelFormatEnum (format->BitsPerPixel,format->Rmask,format->Gmask, format->Bmask,format->Amask);
if(SDL_ISPIXELFORMAT_ALPHA(format_enum)) { if(SDL_ISPIXELFORMAT_ALPHA(format_enum)) {
pictures[i].mode.mode = ShapeModeBinarizeAlpha; pictures[i].mode.mode = ShapeModeBinarizeAlpha;
pictures[i].mode.parameters.binarizationCutoff = 1; pictures[i].mode.parameters.binarizationCutoff = 1;
} }
else { else {
pictures[i].mode.mode = ShapeModeColorKey; pictures[i].mode.mode = ShapeModeColorKey;
SDL_Color black = {0,0,0,0xff};
pictures[i].mode.parameters.colorKey = black; pictures[i].mode.parameters.colorKey = black;
} }
} }
SDL_Window *window = SDL_CreateShapedWindow("SDL_Shape test",SHAPED_WINDOW_X,SHAPED_WINDOW_Y,SHAPED_WINDOW_DIMENSION,SHAPED_WINDOW_DIMENSION,SDL_WINDOW_RESIZABLE | SDL_WINDOW_SHOWN); window = SDL_CreateShapedWindow("SDL_Shape test",SHAPED_WINDOW_X,SHAPED_WINDOW_Y,SHAPED_WINDOW_DIMENSION,SHAPED_WINDOW_DIMENSION,SDL_WINDOW_RESIZABLE | SDL_WINDOW_SHOWN);
if(window == NULL) { if(window == NULL) {
for(i=0;i<num_pictures;i++) for(i=0;i<num_pictures;i++)
SDL_FreeSurface(pictures[i].surface); SDL_FreeSurface(pictures[i].surface);
...@@ -108,7 +119,7 @@ int main(int argc,char** argv) { ...@@ -108,7 +119,7 @@ int main(int argc,char** argv) {
for(i=0;i<num_pictures;i++) { for(i=0;i<num_pictures;i++) {
pictures[i].texture = SDL_CreateTextureFromSurface(0,pictures[i].surface); pictures[i].texture = SDL_CreateTextureFromSurface(0,pictures[i].surface);
if(pictures[i].texture == NULL) { if(pictures[i].texture == NULL) {
int j = 0; j = 0;
for(j=0;j<num_pictures;i++) for(j=0;j<num_pictures;i++)
if(pictures[i].texture != NULL) if(pictures[i].texture != NULL)
SDL_DestroyTexture(pictures[i].texture); SDL_DestroyTexture(pictures[i].texture);
...@@ -123,17 +134,19 @@ int main(int argc,char** argv) { ...@@ -123,17 +134,19 @@ int main(int argc,char** argv) {
} }
} }
SDL_Event event; event_pending = 0;
int event_pending = 0,should_exit = 0; should_exit = 0;
event_pending = SDL_PollEvent(&event); event_pending = SDL_PollEvent(&event);
unsigned int current_picture = 0; current_picture = 0;
SDL_WindowShapeMode mode = {ShapeModeDefault,1}; button_down = 0;
int button_down = 0; format = 0,access = 0;
Uint32 format = 0,access = 0; texture_dimensions.h = 0;
SDL_Rect texture_dimensions = {0,0,0,0}; texture_dimensions.w = 0;
SDL_QueryTexture(pictures[current_picture].texture,&format,&access,&texture_dimensions.w,&texture_dimensions.h); texture_dimensions.x = 0;
texture_dimensions.y = 0;
SDL_QueryTexture(pictures[current_picture].texture,(Uint32 *)&pixelFormat,(int *)&access,&texture_dimensions.w,&texture_dimensions.h);
SDL_SetWindowSize(window,texture_dimensions.w,texture_dimensions.h); SDL_SetWindowSize(window,texture_dimensions.w,texture_dimensions.h);
SDL_SetWindowShape(window,pictures[current_picture].surface,&mode); SDL_SetWindowShape(window,pictures[current_picture].surface,&pictures[current_picture].mode);
next_time = SDL_GetTicks() + TICK_INTERVAL; next_time = SDL_GetTicks() + TICK_INTERVAL;
while(should_exit == 0) { while(should_exit == 0) {
event_pending = SDL_PollEvent(&event); event_pending = SDL_PollEvent(&event);
...@@ -148,9 +161,9 @@ int main(int argc,char** argv) { ...@@ -148,9 +161,9 @@ int main(int argc,char** argv) {
current_picture += 1; current_picture += 1;
if(current_picture >= num_pictures) if(current_picture >= num_pictures)
current_picture = 0; current_picture = 0;
SDL_QueryTexture(pictures[current_picture].texture,&format,&access,&texture_dimensions.w,&texture_dimensions.h); SDL_QueryTexture(pictures[current_picture].texture,(Uint32 *)&pixelFormat,(int *)&access,&texture_dimensions.w,&texture_dimensions.h);
SDL_SetWindowSize(window,texture_dimensions.w,texture_dimensions.h); SDL_SetWindowSize(window,texture_dimensions.w,texture_dimensions.h);
SDL_SetWindowShape(window,pictures[current_picture].surface,&mode); SDL_SetWindowShape(window,pictures[current_picture].surface,&pictures[current_picture].mode);
} }
if(event.type == SDL_QUIT) if(event.type == SDL_QUIT)
should_exit = 1; should_exit = 1;
...@@ -172,4 +185,6 @@ int main(int argc,char** argv) { ...@@ -172,4 +185,6 @@ int main(int argc,char** argv) {
free(pictures); free(pictures);
//Call SDL_VideoQuit() before quitting. //Call SDL_VideoQuit() before quitting.
SDL_VideoQuit(); SDL_VideoQuit();
return 0;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment