4#ifdef SDL3PP_MAIN_HANDLED
5#define SDL_MAIN_HANDLED
8#ifdef SDL3PP_MAIN_USE_CALLBACKS
9#define SDL_MAIN_USE_CALLBACKS
12#ifdef SDL3PP_MAIN_USE_CLASS_CALLBACKS
13#define SDL_MAIN_USE_CALLBACKS
16#include <SDL3/SDL_main.h>
70#define SDL3PP_MAIN_HANDLED SDL_MAIN_HANDLED
92#define SDL3PP_MAIN_USE_CALLBACKS SDL_MAIN_USE_CALLBACKS
109#define SDL3PP_MAIN_USE_CLASS_CALLBACKS 1
176 return SDL_RunApp(argc, argv, mainFunction, reserved);
211 return SDL_EnterAppMainCallbacks(
212 argc, argv, appinit, appiter, appevent, appquit);
215#if defined(SDL_PLATFORM_WINDOWS)
245 return SDL_RegisterApp(name, style, hInst);
409#ifdef SDL3PP_MAIN_USE_CLASS_CALLBACKS
412extern "C" SDLMAIN_DECLSPEC
SDL::AppResult SDL_AppInit(
void** appstate,
422 }
catch (std::exception& e) {
433extern "C" SDLMAIN_DECLSPEC
SDL::AppResult SDL_AppIterate(
void* appstate)
437 }
catch (std::exception& e) {
448extern "C" SDLMAIN_DECLSPEC
SDL::AppResult SDL_AppEvent(
void* appstate,
453 }
catch (std::exception& e) {
464extern "C" SDLMAIN_DECLSPEC
void SDL_AppQuit(
void* appstate,
472 }
catch (std::exception& e) {
477 "Critical error during app exit");
485#define SDL3PP_DEFINE_CALLBACKS(CLASS) \
486 extern "C" SDLMAIN_DECLSPEC SDL::AppInterface* SDLCALL SDL_AppCreate( \
489 return new CLASS(); \
500#define SDL3PP_DEFINE_CLASS_CALLBACKS( \
501 CLASS, INIT_FLAGS, APPNAME, APPVERSION, APPIDENTIFIER) \
502 extern "C" SDLMAIN_DECLSPEC SDL::AppInterface* SDLCALL SDL_AppCreate( \
505 SDL::SetAppMetadata(APPNAME, APPVERSION, APPIDENTIFIER); \
506 SDL::Init(INIT_FLAGS); \
507 return new CLASS(); \
516#define SDL3PP_DEFINE_CALLBACKS(CLASS) \
517 static_assert(SDL::HasIterateFunction<CLASS>, "Main class not compatible"); \
518 inline SDL::AppResult SDL_AppInit(void** appstate, int argc, char* argv[]) \
520 return SDL::InitClass(reinterpret_cast<CLASS**>(appstate), \
521 SDL::AppArgs{argv, size_t(argc)}); \
523 inline SDL::AppResult SDL_AppIterate(void* appstate) \
525 return SDL::IterateClass(static_cast<CLASS*>(appstate)); \
527 inline SDL::AppResult SDL_AppEvent(void* appstate, SDL::Event* event) \
529 return SDL::EventClass(static_cast<CLASS*>(appstate), *event); \
531 inline void SDL_AppQuit(void* appstate, SDL::AppResult result) \
533 SDL::QuitClass(static_cast<CLASS*>(appstate), result); \
Helpers to use C++ strings parameters.
Definition SDL3pp_strings.h:43
SDL_Event Event
The structure for all events in SDL.
Definition SDL3pp_events.h:844
AppResult(SDLCALL *)(void **appstate, int argc, char *argv[]) AppInit_func
Function pointer typedef for SDL_AppInit.
Definition SDL3pp_init.h:150
SDL_AppResult AppResult
Return values for optional main callbacks.
Definition SDL3pp_init.h:115
void(SDLCALL *)(void *appstate, AppResult result) AppQuit_func
Function pointer typedef for SDL_AppQuit.
Definition SDL3pp_init.h:197
constexpr AppResult APP_FAILURE
Value that requests termination with error from the main callbacks.
Definition SDL3pp_init.h:124
constexpr AppResult APP_CONTINUE
Value that requests that the app continue from the main callbacks.
Definition SDL3pp_init.h:118
AppResult(SDLCALL *)(void *appstate, Event *event) AppEvent_func
Function pointer typedef for SDL_AppEvent.
Definition SDL3pp_init.h:183
AppResult(SDLCALL *)(void *appstate) AppIterate_func
Function pointer typedef for SDL_AppIterate.
Definition SDL3pp_init.h:167
#define SDL3PP_APPCLASS_LOG_PRIORITY
The default log priority for app class.
Definition SDL3pp_init.h:608
constexpr AppResult APP_SUCCESS
Value that requests termination with success from the main callbacks.
Definition SDL3pp_init.h:121
constexpr LogCategory LOG_CATEGORY_APPLICATION
APPLICATION.
Definition SDL3pp_log.h:438
virtual SDL::AppResult Iterate()
Called to iterate the app.
Definition SDL3pp_main.h:328
int RunApp(int argc, char *argv[], main_func mainFunction, void *reserved)
Initializes and launches an SDL application, by doing platform-specific initialization before calling...
Definition SDL3pp_main.h:171
void SetMainReady()
Circumvent failure of Init() when not using SDL_main() as an entry point.
Definition SDL3pp_main.h:139
int EnterAppMainCallbacks(int argc, char *argv[], AppInit_func appinit, AppIterate_func appiter, AppEvent_func appevent, AppQuit_func appquit)
An entry point for SDL's use in SDL3PP_MAIN_USE_CALLBACKS.
Definition SDL3pp_main.h:204
void UnregisterApp()
Deregister the win32 window class from an RegisterApp call.
Definition SDL3pp_main.h:265
virtual SDL::AppResult Init()
Called to initialize the app.
Definition SDL3pp_main.h:316
virtual SDL::AppResult Event(const SDL::Event &ev)
Called to handle an event.
Definition SDL3pp_main.h:340
int(SDLCALL *)(int argc, char *argv[]) main_func
The prototype for the application's main() function.
Definition SDL3pp_main.h:123
virtual void quit(SDL::AppResult result)
Called to quit the app.
Definition SDL3pp_main.h:352
void GDKSuspendComplete()
Callback from the application to let the suspend continue.
Definition SDL3pp_main.h:293
SDLMAIN_DECLSPEC SDL::AppInterface *SDLCALL SDL_AppCreate(int argc, char *argv[])
Prototype for the application's main class creation function.
bool RegisterApp(StringParam name, Uint32 style, void *hInst)
Register a win32 window class for SDL's use.
Definition SDL3pp_main.h:243
::Uint32 Uint32
An unsigned 32-bit integer type.
Definition SDL3pp_stdinc.h:296
Main include header for the SDL3pp library.
Base class for SDL3PP_MAIN_USE_CLASS_CALLBACKS main callback classes.
Definition SDL3pp_main.h:306