From e48651b934851480e046ef09c7b00063a97cf635 Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jackpot51@gmail.com> Date: Sun, 30 Dec 2018 20:40:50 -0700 Subject: [PATCH] sdl2: WIP update to new video and events API --- recipes/sdl2/redox.patch | 125 ++++++++------------------------------- 1 file changed, 25 insertions(+), 100 deletions(-) diff --git a/recipes/sdl2/redox.patch b/recipes/sdl2/redox.patch index 9891a943c..a6cb05e41 100644 --- a/recipes/sdl2/redox.patch +++ b/recipes/sdl2/redox.patch @@ -368,8 +368,8 @@ diff -ruwN source/src/thread/pthread/SDL_systhread.c source-new/src/thread/pthre diff -ruwN source/src/video/orbital/SDL_orbitalevents.c source-new/src/video/orbital/SDL_orbitalevents.c --- source/src/video/orbital/SDL_orbitalevents.c 1969-12-31 17:00:00.000000000 -0700 -+++ source-new/src/video/orbital/SDL_orbitalevents.c 2018-12-30 19:51:10.263649275 -0700 -@@ -0,0 +1,197 @@ ++++ source-new/src/video/orbital/SDL_orbitalevents.c 2018-12-30 20:37:39.185277773 -0700 +@@ -0,0 +1,192 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2012 Sam Lantinga @@ -414,42 +414,37 @@ diff -ruwN source/src/video/orbital/SDL_orbitalevents.c source-new/src/video/orb +{ + SDL_Keysym keysym; + ++ SDL_Mouse *mouse = SDL_GetMouse(); ++ + void* event_iter = orb_window_events(this->hidden->window); + OrbEventOption oeo = orb_events_next(event_iter); + + while (oeo.tag != OrbEventOption_None) { + switch (oeo.tag) { + case OrbEventOption_Key: -+ keysym.unicode = oeo.key.character; + keysym.scancode = oeo.key.scancode; + keysym.sym = keymap[oeo.key.scancode]; + keysym.mod = KMOD_NONE; + -+ SDL_PrivateKeyboard(oeo.key.pressed ? SDL_PRESSED : SDL_RELEASED, &keysym); ++ SDL_SendKeyboardKey(oeo.key.pressed ? SDL_PRESSED : SDL_RELEASED, &keysym); + break; + case OrbEventOption_Mouse: -+ SDL_PrivateMouseMotion(0, 0, oeo.mouse.x, oeo.mouse.y); ++ SDL_SendMouseMotion(mouse->focus, mouse->mouseID, SDL_FALSE, oeo.mouse.x, oeo.mouse.y); + break; + case OrbEventOption_Button: + if (oeo.button.left ^ last_button_left) -+ SDL_PrivateMouseButton(oeo.button.left ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_LEFT, 0, 0); ++ SDL_SendMouseButton(mouse->focus, mouse->mouseID, oeo.button.left ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_LEFT, 0, 0); + if (oeo.button.middle ^ last_button_middle) -+ SDL_PrivateMouseButton(oeo.button.middle ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_MIDDLE, 0, 0); ++ SDL_SendMouseButton(mouse->focus, mouse->mouseID, oeo.button.middle ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_MIDDLE, 0, 0); + if (oeo.button.right ^ last_button_right) -+ SDL_PrivateMouseButton(oeo.button.right ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_RIGHT, 0, 0); ++ SDL_SendMouseButton(mouse->focus, mouse->mouseID, oeo.button.right ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_RIGHT, 0, 0); + + last_button_left = oeo.button.left; + last_button_middle = oeo.button.middle; + last_button_right = oeo.button.right; + break; + case OrbEventOption_Scroll: -+ if (oeo.scroll.y > 0) { -+ SDL_PrivateMouseButton(SDL_PRESSED, SDL_BUTTON_WHEELUP, 0, 0); -+ SDL_PrivateMouseButton(SDL_RELEASED, SDL_BUTTON_WHEELUP, 0, 0); -+ } else if (oeo.scroll.y < 0) { -+ SDL_PrivateMouseButton(SDL_PRESSED, SDL_BUTTON_WHEELDOWN, 0, 0); -+ SDL_PrivateMouseButton(SDL_RELEASED, SDL_BUTTON_WHEELDOWN, 0, 0); -+ } ++ SDL_SendMouseWheel(mouse->focus, mouse->mouseID, oeo.scroll.x, oeo.scroll.y, SDL_MOUSEWHEEL_NORMAL); + break; + case OrbEventOption_Quit: + SDL_PrivateQuit(); @@ -672,8 +667,8 @@ diff -ruwN source/src/video/orbital/SDL_orbitalmouse_c.h source-new/src/video/or +/* Functions to be exported */ diff -ruwN source/src/video/orbital/SDL_orbitalvideo.c source-new/src/video/orbital/SDL_orbitalvideo.c --- source/src/video/orbital/SDL_orbitalvideo.c 1969-12-31 17:00:00.000000000 -0700 -+++ source-new/src/video/orbital/SDL_orbitalvideo.c 2018-12-30 19:51:10.267649280 -0700 -@@ -0,0 +1,252 @@ ++++ source-new/src/video/orbital/SDL_orbitalvideo.c 2018-12-30 20:26:21.622297793 -0700 +@@ -0,0 +1,182 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2012 Sam Lantinga @@ -724,21 +719,8 @@ diff -ruwN source/src/video/orbital/SDL_orbitalvideo.c source-new/src/video/orbi +#define ORBITALVID_DRIVER_NAME "orbital" + +/* Initialization/Query functions */ -+static int ORBITAL_VideoInit(_THIS, SDL_PixelFormat *vformat); -+static SDL_Rect **ORBITAL_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags); -+static SDL_Surface *ORBITAL_SetVideoMode(_THIS, SDL_Surface *current, int width, int height, int bpp, Uint32 flags); -+static int ORBITAL_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors); ++static int ORBITAL_VideoInit(_THIS); +static void ORBITAL_VideoQuit(_THIS); -+static void ORBITAL_SetCaption(_THIS, const char *title, const char *icon); -+ -+/* Hardware surface functions */ -+static int ORBITAL_AllocHWSurface(_THIS, SDL_Surface *surface); -+static int ORBITAL_LockHWSurface(_THIS, SDL_Surface *surface); -+static void ORBITAL_UnlockHWSurface(_THIS, SDL_Surface *surface); -+static void ORBITAL_FreeHWSurface(_THIS, SDL_Surface *surface); -+ -+/* etc. */ -+static void ORBITAL_UpdateRects(_THIS, int numrects, SDL_Rect *rects); + +/* ORBITAL driver bootstrap functions */ + @@ -775,26 +757,7 @@ diff -ruwN source/src/video/orbital/SDL_orbitalvideo.c source-new/src/video/orbi + + /* Set the function pointers */ + device->VideoInit = ORBITAL_VideoInit; -+ device->ListModes = ORBITAL_ListModes; -+ device->SetVideoMode = ORBITAL_SetVideoMode; -+ device->CreateYUVOverlay = NULL; -+ device->SetColors = ORBITAL_SetColors; -+ device->UpdateRects = ORBITAL_UpdateRects; + device->VideoQuit = ORBITAL_VideoQuit; -+ device->AllocHWSurface = ORBITAL_AllocHWSurface; -+ device->CheckHWBlit = NULL; -+ device->FillHWRect = NULL; -+ device->SetHWColorKey = NULL; -+ device->SetHWAlpha = NULL; -+ device->LockHWSurface = ORBITAL_LockHWSurface; -+ device->UnlockHWSurface = ORBITAL_UnlockHWSurface; -+ device->FlipHWSurface = NULL; -+ device->FreeHWSurface = ORBITAL_FreeHWSurface; -+ device->SetCaption = ORBITAL_SetCaption; -+ device->SetIcon = NULL; -+ device->IconifyWindow = NULL; -+ device->GrabInput = NULL; -+ device->GetWMInfo = NULL; + device->InitOSKeymap = ORBITAL_InitOSKeymap; + device->PumpEvents = ORBITAL_PumpEvents; + @@ -809,27 +772,27 @@ diff -ruwN source/src/video/orbital/SDL_orbitalvideo.c source-new/src/video/orbi +}; + + -+int ORBITAL_VideoInit(_THIS, SDL_PixelFormat *vformat) ++int ORBITAL_VideoInit(_THIS) +{ + fprintf(stderr, "WARNING: You are using the SDL orbital video driver!\n"); + -+ /* Determine the screen depth (use default 32-bit depth) */ -+ /* we change this during the SDL_SetVideoMode implementation... */ -+ vformat->BitsPerPixel = 32; -+ vformat->BytesPerPixel = 4; -+ + /* We're done! */ + return(0); +} + -+SDL_Rect **ORBITAL_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags) ++/* Note: If we are terminated, this could be called in the middle of ++ another SDL video routine -- notably UpdateRects. ++*/ ++void ORBITAL_VideoQuit(_THIS) +{ -+ if (format->BitsPerPixel != 32) -+ return NULL; -+ -+ return (SDL_Rect **) -1; ++ if (this->hidden->window) { ++ orb_window_destroy(this->hidden->window); ++ this->hidden->window = NULL; ++ this->screen->pixels = NULL; ++ } +} + ++#if 0 +SDL_Surface *ORBITAL_SetVideoMode(_THIS, SDL_Surface *current, + int width, int height, int bpp, Uint32 flags) +{ @@ -880,27 +843,6 @@ diff -ruwN source/src/video/orbital/SDL_orbitalvideo.c source-new/src/video/orbi + orb_window_set_title(this->hidden->window, title); +} + -+/* We don't actually allow hardware surfaces other than the main one */ -+static int ORBITAL_AllocHWSurface(_THIS, SDL_Surface *surface) -+{ -+ return(-1); -+} -+static void ORBITAL_FreeHWSurface(_THIS, SDL_Surface *surface) -+{ -+ return; -+} -+ -+/* We need to wait for vertical retrace on page flipped displays */ -+static int ORBITAL_LockHWSurface(_THIS, SDL_Surface *surface) -+{ -+ return(0); -+} -+ -+static void ORBITAL_UnlockHWSurface(_THIS, SDL_Surface *surface) -+{ -+ return; -+} -+ +static void ORBITAL_UpdateRects(_THIS, int numrects, SDL_Rect *rects) +{ + if (this->hidden->window) { @@ -908,24 +850,7 @@ diff -ruwN source/src/video/orbital/SDL_orbitalvideo.c source-new/src/video/orbi + orb_window_sync(this->hidden->window); + } +} -+ -+int ORBITAL_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors) -+{ -+ /* do nothing of note. */ -+ return(1); -+} -+ -+/* Note: If we are terminated, this could be called in the middle of -+ another SDL video routine -- notably UpdateRects. -+*/ -+void ORBITAL_VideoQuit(_THIS) -+{ -+ if (this->hidden->window) { -+ orb_window_destroy(this->hidden->window); -+ this->hidden->window = NULL; -+ this->screen->pixels = NULL; -+ } -+} ++#endif diff -ruwN source/src/video/orbital/SDL_orbitalvideo.h source-new/src/video/orbital/SDL_orbitalvideo.h --- source/src/video/orbital/SDL_orbitalvideo.h 1969-12-31 17:00:00.000000000 -0700 +++ source-new/src/video/orbital/SDL_orbitalvideo.h 2018-12-30 19:51:10.267649280 -0700 -- GitLab