all repos — mgba @ d2bf16b8723f69224cdeaa20699c61144df66a66

mGBA Game Boy Advance Emulator

src/platform/sdl/sdl-events.h (view raw)

  1/* Copyright (c) 2013-2014 Jeffrey Pfau
  2 *
  3 * This Source Code Form is subject to the terms of the Mozilla Public
  4 * License, v. 2.0. If a copy of the MPL was not distributed with this
  5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  6#ifndef SDL_EVENTS_H
  7#define SDL_EVENTS_H
  8
  9#include <mgba-util/common.h>
 10
 11CXX_GUARD_START
 12
 13#include <mgba/core/interface.h>
 14#include <mgba/core/log.h>
 15#include <mgba-util/circle-buffer.h>
 16#include <mgba-util/vector.h>
 17
 18#include <SDL.h>
 19
 20mLOG_DECLARE_CATEGORY(SDL_EVENTS);
 21
 22#define SDL_BINDING_KEY 0x53444C4BU
 23#define SDL_BINDING_BUTTON 0x53444C42U
 24
 25#define MAX_PLAYERS 4
 26
 27struct Configuration;
 28
 29struct SDL_JoystickCombo {
 30	size_t index;
 31	SDL_Joystick* joystick;
 32#if SDL_VERSION_ATLEAST(2, 0, 0)
 33	SDL_Haptic* haptic;
 34	SDL_JoystickID id;
 35#else
 36	int id;
 37#endif
 38};
 39
 40DECLARE_VECTOR(SDL_JoystickList, struct SDL_JoystickCombo);
 41
 42struct mSDLPlayer;
 43struct mSDLEvents {
 44	struct SDL_JoystickList joysticks;
 45	const char* preferredJoysticks[MAX_PLAYERS];
 46	int playersAttached;
 47	struct mSDLPlayer* players[MAX_PLAYERS];
 48#if SDL_VERSION_ATLEAST(2, 0, 0)
 49	int screensaverSuspendDepth;
 50	bool screensaverSuspendable;
 51#endif
 52};
 53
 54struct mSDLPlayer {
 55	size_t playerId;
 56	struct mInputMap* bindings;
 57	struct SDL_JoystickCombo* joystick;
 58#if SDL_VERSION_ATLEAST(2, 0, 0)
 59	SDL_Window* window;
 60	int fullscreen;
 61	int windowUpdated;
 62
 63	struct mSDLRumble {
 64		struct mRumble d;
 65		struct mSDLPlayer* p;
 66
 67		int level;
 68		float activeLevel;
 69		struct CircleBuffer history;
 70	} rumble;
 71#endif
 72
 73	struct mSDLRotation {
 74		struct mRotationSource d;
 75		struct mSDLPlayer* p;
 76
 77		// Tilt
 78		int axisX;
 79		int axisY;
 80
 81		// Gyro
 82		int gyroX;
 83		int gyroY;
 84		float gyroSensitivity;
 85		struct CircleBuffer zHistory;
 86		int oldX;
 87		int oldY;
 88		float zDelta;
 89	} rotation;
 90};
 91
 92bool mSDLInitEvents(struct mSDLEvents*);
 93void mSDLDeinitEvents(struct mSDLEvents*);
 94
 95bool mSDLAttachPlayer(struct mSDLEvents*, struct mSDLPlayer*);
 96void mSDLDetachPlayer(struct mSDLEvents*, struct mSDLPlayer*);
 97void mSDLEventsLoadConfig(struct mSDLEvents*, const struct Configuration*);
 98void mSDLPlayerChangeJoystick(struct mSDLEvents*, struct mSDLPlayer*, size_t index);
 99void mSDLUpdateJoysticks(struct mSDLEvents* events, const struct Configuration*);
100
101void mSDLPlayerLoadConfig(struct mSDLPlayer*, const struct Configuration*);
102void mSDLPlayerSaveConfig(const struct mSDLPlayer*, struct Configuration*);
103
104void mSDLInitBindingsGBA(struct mInputMap* inputMap);
105
106struct mCoreThread;
107void mSDLHandleEvent(struct mCoreThread* context, struct mSDLPlayer* sdlContext, const union SDL_Event* event);
108
109#if SDL_VERSION_ATLEAST(2, 0, 0)
110void mSDLSuspendScreensaver(struct mSDLEvents*);
111void mSDLResumeScreensaver(struct mSDLEvents*);
112void mSDLSetScreensaverSuspendable(struct mSDLEvents*, bool suspendable);
113#endif
114
115CXX_GUARD_END
116
117#endif