+ private fun poll_event: nullable SDLInputEvent import SDLKeyEvent, SDLMouseButtonEvent, SDLMouseMotionEvent, SDLQuitEvent, NativeString.to_s, SDLMouseButtonEvent.as(nullable SDLInputEvent), SDLMouseMotionEvent.as(nullable SDLInputEvent), SDLKeyEvent.as(nullable SDLInputEvent), SDLQuitEvent.as(nullable SDLInputEvent) `{
+ SDL_Event event;
+
+ SDL_PumpEvents();
+
+ if (SDL_PollEvent(&event))
+ {
+ switch (event.type) {
+ case SDL_KEYDOWN:
+ case SDL_KEYUP:
+ #ifdef DEBUG
+ printf("The \"%s\" key was pressed!\n",
+ SDL_GetKeyName(event.key.keysym.sym));
+ #endif
+
+ return SDLKeyEvent_as_nullable_SDLInputEvent(
+ new_SDLKeyEvent(NativeString_to_s(
+ SDL_GetKeyName(event.key.keysym.sym)),
+ event.type==SDL_KEYDOWN));
+
+ case SDL_MOUSEMOTION:
+ #ifdef DEBUG
+ printf("Mouse moved by %d,%d to (%d,%d)\n",
+ event.motion.xrel, event.motion.yrel,
+ event.motion.x, event.motion.y);
+ #endif
+
+ return SDLMouseMotionEvent_as_nullable_SDLInputEvent(
+ new_SDLMouseMotionEvent(event.motion.x, event.motion.y,
+ event.motion.xrel, event.motion.yrel, SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(1)));
+
+ case SDL_MOUSEBUTTONDOWN:
+ case SDL_MOUSEBUTTONUP:
+ #ifdef DEBUG
+ printf("Mouse button \"%d\" pressed at (%d,%d)\n",
+ event.button.button, event.button.x, event.button.y);
+ #endif
+ return SDLMouseButtonEvent_as_nullable_SDLInputEvent(
+ new_SDLMouseButtonEvent(event.button.x, event.button.y,
+ event.button.button, event.type == SDL_MOUSEBUTTONDOWN));
+
+ case SDL_QUIT:
+ #ifdef DEBUG
+ printf("Quit event\n");
+ #endif
+ return SDLQuitEvent_as_nullable_SDLInputEvent(new_SDLQuitEvent());
+ }
+ }
+
+ return null_SDLInputEvent();
+ `}
+
+ # Set the position of the cursor to x,y
+ fun warp_mouse(x,y: Int) `{ SDL_WarpMouse(x, y); `}
+
+ # Show or hide the cursor
+ fun show_cursor(show: Bool) `{ SDL_ShowCursor(show); `}
+end
+
+# Basic Drawing figures
+extern class SDLDrawable `{SDL_Surface*`}
+ super Drawable
+
+ redef type I: SDLImage
+
+ redef fun blit(img, x, y) do native_blit(img, x.to_i, y.to_i)
+ fun native_blit(img: I, x, y: Int) `{
+ SDL_Rect dst;
+ dst.x = x;
+ dst.y = y;
+ dst.w = 0;
+ dst.h = 0;
+
+ SDL_BlitSurface(img, NULL, recv, &dst);
+ `}
+
+ redef fun blit_centered(img, x, y)