Extracting parts of the formatting method into configuration and an options helper...
[cslatevm.git] / src / plugins / old / sdl-windows.c
blob3c15b77d63512c92b5af0c151201eed9e799a2c5
1 // SDL interface that is compatible with Windows.slate
3 #include <SDL.h>
4 typedef SDL_Surface Window;
5 #include "slate-windows.h"
7 #ifdef WIN32
8 # define EXPORT __declspec(dllexport)
9 #else
10 # define EXPORT
11 #endif
13 SDL_Surface *surface; // Ick! SDL only supports 1 window
14 SDL_Event event;
15 slate_int_t eventValid = 0;
17 EXPORT void init()
19 SDL_Init(SDL_INIT_VIDEO);
20 printf("enable unicode!!!!!!\n");
21 SDL_EnableUNICODE(1);
24 EXPORT void shutdown()
26 SDL_Quit();
29 EXPORT SDL_Surface *createWindow(slate_int_t width, slate_int_t height)
31 return surface = SDL_SetVideoMode(width, height, 32, SDL_HWSURFACE | SDL_RESIZABLE);
34 EXPORT slate_int_t haveEvent()
36 if(eventValid)
37 return 1;
38 else if(SDL_PollEvent(&event))
40 eventValid = 1;
41 return 1;
43 else
44 return 0;
47 // Returns 1 if there is a message. Returns 0 if error
48 EXPORT slate_int_t waitForEvent()
50 if(haveEvent())
51 return 1;
52 else if(SDL_WaitEvent(&event))
54 eventValid = 1;
55 return 1;
57 else
58 return 0;
61 EXPORT void popEvent()
63 eventValid = 0;
66 EXPORT slate_int_t getEventType()
68 switch(event.type)
70 case SDL_KEYDOWN:
71 return keyDownMessageType;
73 case SDL_KEYUP:
74 return keyUpMessageType;
76 case SDL_MOUSEMOTION:
77 return mouseMoveMessageType;
79 case SDL_MOUSEBUTTONDOWN:
80 switch(event.button.button)
82 case SDL_BUTTON_LEFT:
83 return leftDownMessageType;
84 case SDL_BUTTON_MIDDLE:
85 return middleDownMessageType;
86 case SDL_BUTTON_RIGHT:
87 return rightDownMessageType;
88 default:
89 return 0;
92 case SDL_MOUSEBUTTONUP:
93 switch(event.button.button)
95 case SDL_BUTTON_LEFT:
96 return leftUpMessageType;
97 case SDL_BUTTON_MIDDLE:
98 return middleUpMessageType;
99 case SDL_BUTTON_RIGHT:
100 return rightUpMessageType;
101 default:
102 return 0;
105 case SDL_QUIT:
106 return closeWindowMessageType;
108 case SDL_VIDEORESIZE:
109 return positionWindowMessageType;
111 case SDL_VIDEOEXPOSE:
112 return repaintWindowMessageType;
114 default:
115 return 0;
116 } // switch(event.type)
119 EXPORT SDL_Surface *getEventWindow()
121 return surface; // Ick! SDL only supports 1 window
124 EXPORT slate_int_t getEventMouseMotionX()
126 return event.motion.x;
129 EXPORT slate_int_t getEventMouseMotionY()
131 return event.motion.y;
134 EXPORT slate_int_t getEventMouseButtonX()
136 return event.button.x;
139 EXPORT slate_int_t getEventMouseButtonY()
141 return event.button.y;
144 EXPORT slate_int_t getKeyboardKey()
146 return event.key.keysym.unicode; /*unicode must be enabled for this to work*/
149 EXPORT slate_int_t getKeyboardMod()
151 return event.key.keysym.mod;
155 EXPORT void blit(
156 SDL_Surface *dest, slate_int_t destX, slate_int_t destY, slate_int_t destWidth, slate_int_t destHeight,
157 void *src, slate_int_t srcX, slate_int_t srcY, slate_int_t srcWidth, slate_int_t srcHeight, slate_int_t srcStride)
159 SDL_Rect destRect = {destX, destY, destWidth, destHeight};
160 SDL_Rect srcRect = {srcX, srcY, srcWidth, srcHeight};
161 SDL_Surface *srcSurf = SDL_CreateRGBSurfaceFrom(
162 src, srcWidth, srcHeight, 32, srcStride, 0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000);
163 if(!srcSurf)
164 return;
166 SDL_SetAlpha(dest, 0, 0);
167 SDL_SetAlpha(srcSurf, 0, 0);
168 SDL_BlitSurface(srcSurf, &srcRect, dest, &destRect);
169 SDL_UpdateRect(dest, destX, destY, destWidth, destHeight);
170 SDL_FreeSurface(srcSurf);