#include "SDL_internal.h"
#ifdef SDL_VIDEO_DRIVER_RISCOS
#include "../SDL_sysvideo.h"
#include "../SDL_pixels_c.h"
#include "../../events/SDL_events_c.h"
#include "../../events/SDL_keyboard_c.h"
#include "../../events/SDL_mouse_c.h"
#include "SDL_riscosvideo.h"
#include "SDL_riscosevents_c.h"
#include "SDL_riscosframebuffer_c.h"
#include "SDL_riscosmouse.h"
#include "SDL_riscosmodes.h"
#include "SDL_riscoswindow.h"
#include "SDL_riscosmessagebox.h"
#define RISCOSVID_DRIVER_NAME "riscos"
static bool RISCOS_VideoInit(SDL_VideoDevice *_this);
static void RISCOS_VideoQuit(SDL_VideoDevice *_this);
static void RISCOS_DeleteDevice(SDL_VideoDevice *device)
{
SDL_free(device->internal);
SDL_free(device);
}
static SDL_VideoDevice *RISCOS_CreateDevice(void)
{
SDL_VideoDevice *device;
SDL_VideoData *data;
device = (SDL_VideoDevice *)SDL_calloc(1, sizeof(SDL_VideoDevice));
if (!device) {
return NULL;
}
data = (SDL_VideoData *)SDL_calloc(1, sizeof(SDL_VideoData));
if (!data) {
SDL_free(device);
return NULL;
}
device->internal = data;
device->VideoInit = RISCOS_VideoInit;
device->VideoQuit = RISCOS_VideoQuit;
device->PumpEvents = RISCOS_PumpEvents;
device->GetDisplayModes = RISCOS_GetDisplayModes;
device->SetDisplayMode = RISCOS_SetDisplayMode;
device->CreateSDLWindow = RISCOS_CreateWindow;
device->DestroyWindow = RISCOS_DestroyWindow;
device->CreateWindowFramebuffer = RISCOS_CreateWindowFramebuffer;
device->UpdateWindowFramebuffer = RISCOS_UpdateWindowFramebuffer;
device->DestroyWindowFramebuffer = RISCOS_DestroyWindowFramebuffer;
device->free = RISCOS_DeleteDevice;
device->device_caps = VIDEO_DEVICE_CAPS_FULLSCREEN_ONLY;
return device;
}
VideoBootStrap RISCOS_bootstrap = {
RISCOSVID_DRIVER_NAME, "SDL RISC OS video driver",
RISCOS_CreateDevice,
RISCOS_ShowMessageBox,
false
};
static bool RISCOS_VideoInit(SDL_VideoDevice *_this)
{
if (!RISCOS_InitEvents(_this)) {
return false;
}
if (!RISCOS_InitMouse(_this)) {
return false;
}
SDL_AddKeyboard(SDL_DEFAULT_KEYBOARD_ID, NULL);
SDL_AddMouse(SDL_DEFAULT_MOUSE_ID, NULL);
if (!RISCOS_InitModes(_this)) {
return false;
}
return true;
}
static void RISCOS_VideoQuit(SDL_VideoDevice *_this)
{
RISCOS_QuitEvents(_this);
}
#endif