+}
+
+void HandleButtonEvent(ButtonEvent *event)
+{
+#if DEBUG_EVENTS_BUTTON
+ Error(ERR_DEBUG, "BUTTON EVENT: button %d %s, x/y %d/%d\n",
+ event->button,
+ event->type == EVENT_BUTTONPRESS ? "pressed" : "released",
+ event->x, event->y);
+#endif
+
+ motion_status = FALSE;
+
+ if (event->type == EVENT_BUTTONPRESS)
+ button_status = event->button;
+ else
+ button_status = MB_RELEASED;
+
+ HandleButton(event->x, event->y, button_status, event->button);
+}
+
+void HandleMotionEvent(MotionEvent *event)
+{
+ if (button_status == MB_RELEASED && game_status != GAME_MODE_EDITOR)
+ return;
+
+ motion_status = TRUE;
+
+#if DEBUG_EVENTS_MOTION
+ Error(ERR_DEBUG, "MOTION EVENT: button %d moved, x/y %d/%d\n",
+ button_status, event->x, event->y);
+#endif
+
+ HandleButton(event->x, event->y, button_status, button_status);
+}
+
+#if defined(TARGET_SDL2)
+
+void HandleWheelEvent(WheelEvent *event)
+{
+ int button_nr;
+
+#if DEBUG_EVENTS_WHEEL
+#if 1
+ Error(ERR_DEBUG, "WHEEL EVENT: mouse == %d, x/y == %d/%d\n",
+ event->which, event->x, event->y);
+#else
+ // (SDL_MOUSEWHEEL_NORMAL/SDL_MOUSEWHEEL_FLIPPED needs SDL 2.0.4 or newer)
+ Error(ERR_DEBUG, "WHEEL EVENT: mouse == %d, x/y == %d/%d, direction == %s\n",
+ event->which, event->x, event->y,
+ (event->direction == SDL_MOUSEWHEEL_NORMAL ? "SDL_MOUSEWHEEL_NORMAL" :
+ "SDL_MOUSEWHEEL_FLIPPED"));
+#endif
+#endif
+
+ button_nr = (event->x < 0 ? MB_WHEEL_LEFT :
+ event->x > 0 ? MB_WHEEL_RIGHT :
+ event->y < 0 ? MB_WHEEL_DOWN :
+ event->y > 0 ? MB_WHEEL_UP : 0);
+
+#if defined(PLATFORM_WIN32) || defined(PLATFORM_MACOSX)
+ // accelerated mouse wheel available on Mac and Windows
+ wheel_steps = (event->x ? ABS(event->x) : ABS(event->y));
+#else
+ // no accelerated mouse wheel available on Unix/Linux
+ wheel_steps = DEFAULT_WHEEL_STEPS;
+#endif
+
+ motion_status = FALSE;
+
+ button_status = button_nr;
+ HandleButton(0, 0, button_status, -button_nr);
+
+ button_status = MB_RELEASED;
+ HandleButton(0, 0, button_status, -button_nr);
+}
+
+void HandleWindowEvent(WindowEvent *event)
+{
+#if DEBUG_EVENTS_WINDOW
+ int subtype = event->event;
+
+ char *event_name =
+ (subtype == SDL_WINDOWEVENT_SHOWN ? "SDL_WINDOWEVENT_SHOWN" :
+ subtype == SDL_WINDOWEVENT_HIDDEN ? "SDL_WINDOWEVENT_HIDDEN" :
+ subtype == SDL_WINDOWEVENT_EXPOSED ? "SDL_WINDOWEVENT_EXPOSED" :
+ subtype == SDL_WINDOWEVENT_MOVED ? "SDL_WINDOWEVENT_MOVED" :
+ subtype == SDL_WINDOWEVENT_SIZE_CHANGED ? "SDL_WINDOWEVENT_SIZE_CHANGED" :
+ subtype == SDL_WINDOWEVENT_RESIZED ? "SDL_WINDOWEVENT_RESIZED" :
+ subtype == SDL_WINDOWEVENT_MINIMIZED ? "SDL_WINDOWEVENT_MINIMIZED" :
+ subtype == SDL_WINDOWEVENT_MAXIMIZED ? "SDL_WINDOWEVENT_MAXIMIZED" :
+ subtype == SDL_WINDOWEVENT_RESTORED ? "SDL_WINDOWEVENT_RESTORED" :
+ subtype == SDL_WINDOWEVENT_ENTER ? "SDL_WINDOWEVENT_ENTER" :
+ subtype == SDL_WINDOWEVENT_LEAVE ? "SDL_WINDOWEVENT_LEAVE" :
+ subtype == SDL_WINDOWEVENT_FOCUS_GAINED ? "SDL_WINDOWEVENT_FOCUS_GAINED" :
+ subtype == SDL_WINDOWEVENT_FOCUS_LOST ? "SDL_WINDOWEVENT_FOCUS_LOST" :
+ subtype == SDL_WINDOWEVENT_CLOSE ? "SDL_WINDOWEVENT_CLOSE" :
+ "(UNKNOWN)");
+
+ Error(ERR_DEBUG, "WINDOW EVENT: '%s', %ld, %ld",
+ event_name, event->data1, event->data2);
+#endif