From d80128bbd2f2198181017f07f7a5f859b417750e Mon Sep 17 00:00:00 2001
From: Tibor Nagy <xnagytibor@gmail.com>
Date: Thu, 26 Apr 2018 02:33:45 +0200
Subject: [PATCH] Use liborbital in SDL

---
 recipes/sdl/01_orbital.patch | 541 ++++++++++++++---------------------
 recipes/sdl/recipe.sh        |   4 +
 2 files changed, 214 insertions(+), 331 deletions(-)

diff --git a/recipes/sdl/01_orbital.patch b/recipes/sdl/01_orbital.patch
index 0ec45c042..c7365591a 100644
--- a/recipes/sdl/01_orbital.patch
+++ b/recipes/sdl/01_orbital.patch
@@ -1,6 +1,6 @@
-diff -rupN source/build-scripts/config.sub source-redox/build-scripts/config.sub
---- source/build-scripts/config.sub	2012-01-18 23:30:05.000000000 -0700
-+++ source-redox/build-scripts/config.sub	2018-02-27 20:42:46.287901516 -0700
+diff -rupNw source-original/build-scripts/config.sub source/build-scripts/config.sub
+--- source-original/build-scripts/config.sub	2012-01-19 07:30:05.000000000 +0100
++++ source/build-scripts/config.sub	2018-04-23 17:03:35.533588029 +0200
 @@ -1276,7 +1276,7 @@ case $os in
  	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
  	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
@@ -10,9 +10,9 @@ diff -rupN source/build-scripts/config.sub source-redox/build-scripts/config.sub
  	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
  	      | -aos* | -aros* \
  	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-diff -rupN source/configure.in source-redox/configure.in
---- source/configure.in	2012-01-18 23:30:05.000000000 -0700
-+++ source-redox/configure.in	2018-02-27 20:42:46.311902357 -0700
+diff -rupNw source-original/configure.in source/configure.in
+--- source-original/configure.in	2012-01-19 07:30:05.000000000 +0100
++++ source/configure.in	2018-04-23 17:03:35.533588029 +0200
 @@ -1646,6 +1646,19 @@ AC_HELP_STRING([--enable-video-dummy], [
      fi
  }
@@ -54,9 +54,9 @@ diff -rupN source/configure.in source-redox/configure.in
          CheckDiskAudio
          CheckDummyAudio
          CheckDLOPEN
-diff -rupN source/include/SDL_config.h.in source-redox/include/SDL_config.h.in
---- source/include/SDL_config.h.in	2012-01-18 23:30:05.000000000 -0700
-+++ source-redox/include/SDL_config.h.in	2018-02-27 20:42:46.311902357 -0700
+diff -rupNw source-original/include/SDL_config.h.in source/include/SDL_config.h.in
+--- source-original/include/SDL_config.h.in	2012-01-19 07:30:05.000000000 +0100
++++ source/include/SDL_config.h.in	2018-04-23 17:03:35.533588029 +0200
 @@ -268,6 +268,7 @@
  #undef SDL_VIDEO_DRIVER_GGI
  #undef SDL_VIDEO_DRIVER_IPOD
@@ -65,10 +65,10 @@ diff -rupN source/include/SDL_config.h.in source-redox/include/SDL_config.h.in
  #undef SDL_VIDEO_DRIVER_OS2FS
  #undef SDL_VIDEO_DRIVER_PHOTON
  #undef SDL_VIDEO_DRIVER_PICOGUI
-diff -rupN source/src/video/orbital/SDL_orbitalevents.c source-redox/src/video/orbital/SDL_orbitalevents.c
---- source/src/video/orbital/SDL_orbitalevents.c	1969-12-31 17:00:00.000000000 -0700
-+++ source-redox/src/video/orbital/SDL_orbitalevents.c	2018-02-27 20:42:46.335903198 -0700
-@@ -0,0 +1,190 @@
+diff -rupNw source-original/src/video/orbital/SDL_orbitalevents.c source/src/video/orbital/SDL_orbitalevents.c
+--- source-original/src/video/orbital/SDL_orbitalevents.c	1970-01-01 01:00:00.000000000 +0100
++++ source/src/video/orbital/SDL_orbitalevents.c	2018-04-25 01:53:33.077960454 +0200
+@@ -0,0 +1,198 @@
 +/*
 +    SDL - Simple DirectMedia Layer
 +    Copyright (C) 1997-2012 Sam Lantinga
@@ -96,79 +96,87 @@ diff -rupN source/src/video/orbital/SDL_orbitalevents.c source-redox/src/video/o
 +#include "../../events/SDL_sysevents.h"
 +#include "../../events/SDL_events_c.h"
 +
++#include <orbital.h>
 +#include "SDL_orbitalvideo.h"
 +#include "SDL_orbitalevents_c.h"
-+#include "SDL_orbitalscancode.h"
 +
 +#include <unistd.h>
 +
 +static SDLKey keymap[128];
 +
-+#define EVENT_NONE 0
-+#define EVENT_KEY 1
-+#define EVENT_MOUSE 2
-+#define EVENT_BUTTON 3
-+#define EVENT_SCROLL 4
-+#define EVENT_QUIT 5
-+#define EVENT_FOCUS 6
-+#define EVENT_MOVE 7
-+#define EVENT_RESIZE 8
-+#define EVENT_SCREEN 9
-+
-+struct Event {
-+    int64_t code;
-+    int64_t a;
-+    int64_t b;
-+} __attribute__((packed));
-+
 +/* Static variables so only changes are reported */
-+static int64_t last_buttons = 0;
++static bool last_button_left = false;
++static bool last_button_middle = false;
++static bool last_button_right = false;
 +
++// TODO: Find out why NetSurf recieves NULL chars when the keysym.unicode field is used
 +void ORBITAL_PumpEvents(_THIS)
 +{
-+    struct Event event;
-+    while(read(this->hidden->fd, &event, sizeof(event)) > 0){
-+        if ( event.code == EVENT_KEY ) {
-+            SDL_keysym keysym;
-+
-+            // TODO: Find out why NetSurf recieves NULL chars when the Unicode field is used
-+        	//keysym.unicode = event.a;
-+        	keysym.scancode = event.b & 0xFF;
-+        	keysym.sym = keymap[event.b & 0xFF];
-+        	keysym.mod = KMOD_NONE;
-+            if ( (event.b >> 8) & 0x01 > 0 ) {
-+                SDL_PrivateKeyboard(SDL_PRESSED, &keysym);
-+            } else {
-+                SDL_PrivateKeyboard(SDL_RELEASED, &keysym);
-+            }
-+        } else if ( event.code == EVENT_MOUSE ) {
-+            SDL_PrivateMouseMotion(0, 0, event.a, event.b);
-+            //SDL_PrivateMouseButton(Uint8 state, Uint8 button, Sint16 x, Sint16 y);
-+        } else if ( event.code == EVENT_BUTTON ) {
-+            int64_t changed = event.a ^ last_buttons;
-+
-+            if ( changed & 0x01 )
-+                SDL_PrivateMouseButton((event.a & 0x01) ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_LEFT, 0, 0);
-+            if ( changed & 0x02 )
-+                SDL_PrivateMouseButton((event.a & 0x02) ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_MIDDLE, 0, 0);
-+            if ( changed & 0x04 )
-+                SDL_PrivateMouseButton((event.a & 0x04) ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_RIGHT, 0, 0);
-+
-+            last_buttons = event.a;
-+        } else if ( event.code == EVENT_SCROLL ) {
-+            if ( event.b > 0 ) {
-+                SDL_PrivateMouseButton(SDL_PRESSED, SDL_BUTTON_WHEELUP, 0, 0);
-+                SDL_PrivateMouseButton(SDL_RELEASED, SDL_BUTTON_WHEELUP, 0, 0);
-+            } else if ( event.b < 0 ) {
-+                SDL_PrivateMouseButton(SDL_PRESSED, SDL_BUTTON_WHEELDOWN, 0, 0);
-+                SDL_PrivateMouseButton(SDL_RELEASED, SDL_BUTTON_WHEELDOWN, 0, 0);
-+            }
-+        } else if ( event.code == EVENT_RESIZE ) {
-+            SDL_PrivateResize(event.a, event.b);
-+        } else if ( event.code == EVENT_QUIT ) {
-+            SDL_PrivateQuit();
++    SDL_keysym keysym;
++
++    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);
++                break;
++            case OrbEventOption_Mouse:
++                SDL_PrivateMouseMotion(0, 0, 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);
++                if (oeo.button.middle ^ last_button_middle)
++                    SDL_PrivateMouseButton(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);
++
++                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);
++                }
++                break;
++            case OrbEventOption_Quit:
++                SDL_PrivateQuit();
++                break;
++            case OrbEventOption_Focus:
++                SDL_PrivateAppActive(oeo.focus.focused, SDL_APPMOUSEFOCUS);
++                break;
++            case OrbEventOption_Move:
++                // oeo.move.x, oeo.move.y
++                break;
++            case OrbEventOption_Resize:
++                SDL_PrivateResize(oeo.resize.width, oeo.resize.height);
++                break;
++            case OrbEventOption_Screen:
++                // oeo.screen.width, oeo.screen.height
++                break;
++            case OrbEventOption_Unknown:
++                // oeo.unknown.code, oeo.unknown.a, oeo.unknown.b
++                break;
++            default:
++                break;
 +        }
++
++        oeo = orb_events_next(event_iter);
 +    }
++
++    orb_events_destroy(event_iter);
 +}
 +
 +void ORBITAL_InitOSKeymap(_THIS)
@@ -177,91 +185,91 @@ diff -rupN source/src/video/orbital/SDL_orbitalevents.c source-redox/src/video/o
 +    for ( i = 0; i < SDL_arraysize(keymap); ++i )
 +        keymap[i] = SDLK_UNKNOWN;
 +
-+    keymap[SCANCODE_ESCAPE] = SDLK_ESCAPE;
-+    keymap[SCANCODE_1] = SDLK_1;
-+    keymap[SCANCODE_2] = SDLK_2;
-+    keymap[SCANCODE_3] = SDLK_3;
-+    keymap[SCANCODE_4] = SDLK_4;
-+    keymap[SCANCODE_5] = SDLK_5;
-+    keymap[SCANCODE_6] = SDLK_6;
-+    keymap[SCANCODE_7] = SDLK_7;
-+    keymap[SCANCODE_8] = SDLK_8;
-+    keymap[SCANCODE_9] = SDLK_9;
-+    keymap[SCANCODE_0] = SDLK_0;
-+    keymap[SCANCODE_MINUS] = SDLK_MINUS;
-+    keymap[SCANCODE_EQUAL] = SDLK_EQUALS;
-+    keymap[SCANCODE_BACKSPACE] = SDLK_BACKSPACE;
-+    keymap[SCANCODE_TAB] = SDLK_TAB;
-+    keymap[SCANCODE_Q] = SDLK_q;
-+    keymap[SCANCODE_W] = SDLK_w;
-+    keymap[SCANCODE_E] = SDLK_e;
-+    keymap[SCANCODE_R] = SDLK_r;
-+    keymap[SCANCODE_T] = SDLK_t;
-+    keymap[SCANCODE_Y] = SDLK_y;
-+    keymap[SCANCODE_U] = SDLK_u;
-+    keymap[SCANCODE_I] = SDLK_i;
-+    keymap[SCANCODE_O] = SDLK_o;
-+    keymap[SCANCODE_P] = SDLK_p;
-+    keymap[SCANCODE_BRACKET_LEFT] = SDLK_LEFTBRACKET;
-+    keymap[SCANCODE_BRACKET_RIGHT] = SDLK_RIGHTBRACKET;
-+    keymap[SCANCODE_ENTER] = SDLK_RETURN;
-+    keymap[SCANCODE_LEFTCONTROL] = SDLK_LCTRL;
-+    keymap[SCANCODE_A] = SDLK_a;
-+    keymap[SCANCODE_S] = SDLK_s;
-+    keymap[SCANCODE_D] = SDLK_d;
-+    keymap[SCANCODE_F] = SDLK_f;
-+    keymap[SCANCODE_G] = SDLK_g;
-+    keymap[SCANCODE_H] = SDLK_h;
-+    keymap[SCANCODE_J] = SDLK_j;
-+    keymap[SCANCODE_K] = SDLK_k;
-+    keymap[SCANCODE_L] = SDLK_l;
-+    keymap[SCANCODE_SEMICOLON] = SDLK_SEMICOLON;
-+    keymap[SCANCODE_APOSTROPHE] = SDLK_QUOTE;
-+    keymap[SCANCODE_TICK] = SDLK_BACKQUOTE;
-+    keymap[SCANCODE_LEFTSHIFT] = SDLK_LSHIFT;
-+    keymap[SCANCODE_RIGHTSHIFT] = SDLK_RSHIFT;
-+    keymap[SCANCODE_BACKSLASH] = SDLK_BACKSLASH;
-+    keymap[SCANCODE_Z] = SDLK_z;
-+    keymap[SCANCODE_X] = SDLK_x;
-+    keymap[SCANCODE_C] = SDLK_c;
-+    keymap[SCANCODE_V] = SDLK_v;
-+    keymap[SCANCODE_B] = SDLK_b;
-+    keymap[SCANCODE_N] = SDLK_n;
-+    keymap[SCANCODE_M] = SDLK_m;
-+    keymap[SCANCODE_COMMA] = SDLK_COMMA;
-+    keymap[SCANCODE_PERIOD] = SDLK_PERIOD;
-+    keymap[SCANCODE_SLASH] = SDLK_SLASH;
-+    keymap[SCANCODE_LEFTALT] = SDLK_LALT;
-+    keymap[SCANCODE_SPACE] = SDLK_SPACE;
-+    keymap[SCANCODE_CAPSLOCK] = SDLK_CAPSLOCK;
-+    keymap[SCANCODE_F1] = SDLK_F1;
-+    keymap[SCANCODE_F2] = SDLK_F2;
-+    keymap[SCANCODE_F3] = SDLK_F3;
-+    keymap[SCANCODE_F4] = SDLK_F4;
-+    keymap[SCANCODE_F5] = SDLK_F5;
-+    keymap[SCANCODE_F6] = SDLK_F6;
-+    keymap[SCANCODE_F7] = SDLK_F7;
-+    keymap[SCANCODE_F8] = SDLK_F8;
-+    keymap[SCANCODE_F9] = SDLK_F9;
-+    keymap[SCANCODE_F10] = SDLK_F10;
-+    keymap[SCANCODE_F11] = SDLK_F11;
-+    keymap[SCANCODE_F12] = SDLK_F12;
-+    keymap[SCANCODE_HOME] = SDLK_HOME;
-+    keymap[SCANCODE_CURSORBLOCKUP] = SDLK_UP;
-+    keymap[SCANCODE_PAGEUP] = SDLK_PAGEUP;
-+    keymap[SCANCODE_CURSORBLOCKLEFT] = SDLK_LEFT;
-+    keymap[SCANCODE_CURSORBLOCKRIGHT] = SDLK_RIGHT;
-+    keymap[SCANCODE_END] = SDLK_END;
-+    keymap[SCANCODE_CURSORBLOCKDOWN] = SDLK_DOWN;
-+    keymap[SCANCODE_PAGEDOWN] = SDLK_PAGEDOWN;
-+    keymap[SCANCODE_INSERT] = SDLK_INSERT;
-+    keymap[SCANCODE_DELETE] = SDLK_DELETE;
++    keymap[ORB_KEY_ESC] = SDLK_ESCAPE;
++    keymap[ORB_KEY_1] = SDLK_1;
++    keymap[ORB_KEY_2] = SDLK_2;
++    keymap[ORB_KEY_3] = SDLK_3;
++    keymap[ORB_KEY_4] = SDLK_4;
++    keymap[ORB_KEY_5] = SDLK_5;
++    keymap[ORB_KEY_6] = SDLK_6;
++    keymap[ORB_KEY_7] = SDLK_7;
++    keymap[ORB_KEY_8] = SDLK_8;
++    keymap[ORB_KEY_9] = SDLK_9;
++    keymap[ORB_KEY_0] = SDLK_0;
++    keymap[ORB_KEY_MINUS] = SDLK_MINUS;
++    keymap[ORB_KEY_EQUALS] = SDLK_EQUALS;
++    keymap[ORB_KEY_BKSP] = SDLK_BACKSPACE;
++    keymap[ORB_KEY_TAB] = SDLK_TAB;
++    keymap[ORB_KEY_Q] = SDLK_q;
++    keymap[ORB_KEY_W] = SDLK_w;
++    keymap[ORB_KEY_E] = SDLK_e;
++    keymap[ORB_KEY_R] = SDLK_r;
++    keymap[ORB_KEY_T] = SDLK_t;
++    keymap[ORB_KEY_Y] = SDLK_y;
++    keymap[ORB_KEY_U] = SDLK_u;
++    keymap[ORB_KEY_I] = SDLK_i;
++    keymap[ORB_KEY_O] = SDLK_o;
++    keymap[ORB_KEY_P] = SDLK_p;
++    keymap[ORB_KEY_BRACE_OPEN] = SDLK_LEFTBRACKET;
++    keymap[ORB_KEY_BRACE_CLOSE] = SDLK_RIGHTBRACKET;
++    keymap[ORB_KEY_ENTER] = SDLK_RETURN;
++    keymap[ORB_KEY_CTRL] = SDLK_LCTRL;
++    keymap[ORB_KEY_A] = SDLK_a;
++    keymap[ORB_KEY_S] = SDLK_s;
++    keymap[ORB_KEY_D] = SDLK_d;
++    keymap[ORB_KEY_F] = SDLK_f;
++    keymap[ORB_KEY_G] = SDLK_g;
++    keymap[ORB_KEY_H] = SDLK_h;
++    keymap[ORB_KEY_J] = SDLK_j;
++    keymap[ORB_KEY_K] = SDLK_k;
++    keymap[ORB_KEY_L] = SDLK_l;
++    keymap[ORB_KEY_SEMICOLON] = SDLK_SEMICOLON;
++    keymap[ORB_KEY_QUOTE] = SDLK_QUOTE;
++    keymap[ORB_KEY_TICK] = SDLK_BACKQUOTE;
++    keymap[ORB_KEY_LEFT_SHIFT] = SDLK_LSHIFT;
++    keymap[ORB_KEY_RIGHT_SHIFT] = SDLK_RSHIFT;
++    keymap[ORB_KEY_BACKSLASH] = SDLK_BACKSLASH;
++    keymap[ORB_KEY_Z] = SDLK_z;
++    keymap[ORB_KEY_X] = SDLK_x;
++    keymap[ORB_KEY_C] = SDLK_c;
++    keymap[ORB_KEY_V] = SDLK_v;
++    keymap[ORB_KEY_B] = SDLK_b;
++    keymap[ORB_KEY_N] = SDLK_n;
++    keymap[ORB_KEY_M] = SDLK_m;
++    keymap[ORB_KEY_COMMA] = SDLK_COMMA;
++    keymap[ORB_KEY_PERIOD] = SDLK_PERIOD;
++    keymap[ORB_KEY_SLASH] = SDLK_SLASH;
++    keymap[ORB_KEY_ALT] = SDLK_LALT;
++    keymap[ORB_KEY_SPACE] = SDLK_SPACE;
++    keymap[ORB_KEY_CAPS] = SDLK_CAPSLOCK;
++    keymap[ORB_KEY_F1] = SDLK_F1;
++    keymap[ORB_KEY_F2] = SDLK_F2;
++    keymap[ORB_KEY_F3] = SDLK_F3;
++    keymap[ORB_KEY_F4] = SDLK_F4;
++    keymap[ORB_KEY_F5] = SDLK_F5;
++    keymap[ORB_KEY_F6] = SDLK_F6;
++    keymap[ORB_KEY_F7] = SDLK_F7;
++    keymap[ORB_KEY_F8] = SDLK_F8;
++    keymap[ORB_KEY_F9] = SDLK_F9;
++    keymap[ORB_KEY_F10] = SDLK_F10;
++    keymap[ORB_KEY_F11] = SDLK_F11;
++    keymap[ORB_KEY_F12] = SDLK_F12;
++    keymap[ORB_KEY_HOME] = SDLK_HOME;
++    keymap[ORB_KEY_UP] = SDLK_UP;
++    keymap[ORB_KEY_PGUP] = SDLK_PAGEUP;
++    keymap[ORB_KEY_LEFT] = SDLK_LEFT;
++    keymap[ORB_KEY_RIGHT] = SDLK_RIGHT;
++    keymap[ORB_KEY_END] = SDLK_END;
++    keymap[ORB_KEY_DOWN] = SDLK_DOWN;
++    keymap[ORB_KEY_PGDN] = SDLK_PAGEDOWN;
++    keymap[ORB_KEY_INSERT] = SDLK_INSERT;
++    keymap[ORB_KEY_DEL] = SDLK_DELETE;
 +}
 +
 +/* end of SDL_orbitalevents.c ... */
-diff -rupN source/src/video/orbital/SDL_orbitalevents_c.h source-redox/src/video/orbital/SDL_orbitalevents_c.h
---- source/src/video/orbital/SDL_orbitalevents_c.h	1969-12-31 17:00:00.000000000 -0700
-+++ source-redox/src/video/orbital/SDL_orbitalevents_c.h	2018-02-27 20:42:46.335903198 -0700
+diff -rupNw source-original/src/video/orbital/SDL_orbitalevents_c.h source/src/video/orbital/SDL_orbitalevents_c.h
+--- source-original/src/video/orbital/SDL_orbitalevents_c.h	1970-01-01 01:00:00.000000000 +0100
++++ source/src/video/orbital/SDL_orbitalevents_c.h	2018-04-23 17:03:35.537588257 +0200
 @@ -0,0 +1,32 @@
 +/*
 +    SDL - Simple DirectMedia Layer
@@ -295,9 +303,9 @@ diff -rupN source/src/video/orbital/SDL_orbitalevents_c.h source-redox/src/video
 +extern void ORBITAL_PumpEvents(_THIS);
 +
 +/* end of SDL_orbitalevents_c.h ... */
-diff -rupN source/src/video/orbital/SDL_orbitalmouse.c source-redox/src/video/orbital/SDL_orbitalmouse.c
---- source/src/video/orbital/SDL_orbitalmouse.c	1969-12-31 17:00:00.000000000 -0700
-+++ source-redox/src/video/orbital/SDL_orbitalmouse.c	2018-02-27 20:42:46.335903198 -0700
+diff -rupNw source-original/src/video/orbital/SDL_orbitalmouse.c source/src/video/orbital/SDL_orbitalmouse.c
+--- source-original/src/video/orbital/SDL_orbitalmouse.c	1970-01-01 01:00:00.000000000 +0100
++++ source/src/video/orbital/SDL_orbitalmouse.c	2018-04-23 17:03:35.537588257 +0200
 @@ -0,0 +1,33 @@
 +/*
 +    SDL - Simple DirectMedia Layer
@@ -332,9 +340,9 @@ diff -rupN source/src/video/orbital/SDL_orbitalmouse.c source-redox/src/video/or
 +struct WMcursor {
 +	int unused;
 +};
-diff -rupN source/src/video/orbital/SDL_orbitalmouse_c.h source-redox/src/video/orbital/SDL_orbitalmouse_c.h
---- source/src/video/orbital/SDL_orbitalmouse_c.h	1969-12-31 17:00:00.000000000 -0700
-+++ source-redox/src/video/orbital/SDL_orbitalmouse_c.h	2018-02-27 20:42:46.335903198 -0700
+diff -rupNw source-original/src/video/orbital/SDL_orbitalmouse_c.h source/src/video/orbital/SDL_orbitalmouse_c.h
+--- source-original/src/video/orbital/SDL_orbitalmouse_c.h	1970-01-01 01:00:00.000000000 +0100
++++ source/src/video/orbital/SDL_orbitalmouse_c.h	2018-04-23 17:03:35.537588257 +0200
 @@ -0,0 +1,26 @@
 +/*
 +    SDL - Simple DirectMedia Layer
@@ -362,94 +370,10 @@ diff -rupN source/src/video/orbital/SDL_orbitalmouse_c.h source-redox/src/video/
 +#include "SDL_orbitalvideo.h"
 +
 +/* Functions to be exported */
-diff -rupN source/src/video/orbital/SDL_orbitalscancode.h source-redox/src/video/orbital/SDL_orbitalscancode.h
---- source/src/video/orbital/SDL_orbitalscancode.h	1969-12-31 17:00:00.000000000 -0700
-+++ source-redox/src/video/orbital/SDL_orbitalscancode.h	2018-02-27 20:42:46.335903198 -0700
-@@ -0,0 +1,80 @@
-+#define SCANCODE_A	0x1E
-+#define SCANCODE_B	0x30
-+#define SCANCODE_C	0x2E
-+#define SCANCODE_D	0x20
-+#define SCANCODE_E	0x12
-+#define SCANCODE_F	0x21
-+#define SCANCODE_G	0x22
-+#define SCANCODE_H	0x23
-+#define SCANCODE_I	0x17
-+#define SCANCODE_J	0x24
-+#define SCANCODE_K	0x25
-+#define SCANCODE_L	0x26
-+#define SCANCODE_M	0x32
-+#define SCANCODE_N	0x31
-+#define SCANCODE_O	0x18
-+#define SCANCODE_P	0x19
-+#define SCANCODE_Q	0x10
-+#define SCANCODE_R	0x13
-+#define SCANCODE_S	0x1F
-+#define SCANCODE_T	0x14
-+#define SCANCODE_U	0x16
-+#define SCANCODE_V	0x2F
-+#define SCANCODE_W	0x11
-+#define SCANCODE_X	0x2D
-+#define SCANCODE_Y	0x15
-+#define SCANCODE_Z	0x2C
-+#define SCANCODE_0	0x0B
-+#define SCANCODE_1	0x2
-+#define SCANCODE_2	0x3
-+#define SCANCODE_3	0x4
-+#define SCANCODE_4	0x5
-+#define SCANCODE_5	0x6
-+#define SCANCODE_6	0x7
-+#define SCANCODE_7	0x8
-+#define SCANCODE_8	0x9
-+#define SCANCODE_9	0x0A
-+#define SCANCODE_TICK	0x29
-+#define SCANCODE_MINUS	0x0C
-+#define SCANCODE_EQUAL	0x0D
-+#define SCANCODE_BACKSLASH	0x2B
-+#define SCANCODE_BACKSPACE	0x0E
-+#define SCANCODE_SPACE	0x39
-+#define SCANCODE_TAB	0x0F
-+#define SCANCODE_CAPSLOCK	0x3A
-+#define SCANCODE_LEFTSHIFT	0x2A
-+#define SCANCODE_LEFTCONTROL	0x1D
-+#define SCANCODE_LEFTALT	0x38
-+#define SCANCODE_RIGHTSHIFT	0x36
-+#define SCANCODE_ENTER	0x1C
-+#define SCANCODE_ESCAPE	0x1
-+#define SCANCODE_F1	0x3B
-+#define SCANCODE_F2	0x3C
-+#define SCANCODE_F3	0x3D
-+#define SCANCODE_F4	0x3E
-+#define SCANCODE_F5	0x3F
-+#define SCANCODE_F6	0x40
-+#define SCANCODE_F7	0x41
-+#define SCANCODE_F8	0x42
-+#define SCANCODE_F9	0x43
-+#define SCANCODE_F10	0x44
-+#define SCANCODE_F11	0x57
-+#define SCANCODE_F12	0x58
-+#define SCANCODE_SCROLL	0x46
-+#define SCANCODE_BRACKET_LEFT	0x1A
-+#define SCANCODE_BRACKET_RIGHT	0x1B
-+#define SCANCODE_INSERT	0x52
-+#define SCANCODE_HOME	0x47
-+#define SCANCODE_PAGEUP	0x49
-+#define SCANCODE_DELETE	0x53
-+#define SCANCODE_END	0x4F
-+#define SCANCODE_PAGEDOWN	0x51
-+#define SCANCODE_CURSORBLOCKUP	0x48
-+#define SCANCODE_CURSORBLOCKLEFT	0x4B
-+#define SCANCODE_CURSORBLOCKDOWN	0x50
-+#define SCANCODE_CURSORBLOCKRIGHT	0x4D
-+#define SCANCODE_SEMICOLON	0x27
-+#define SCANCODE_APOSTROPHE	0x28
-+#define SCANCODE_COMMA	0x33
-+#define SCANCODE_PERIOD	0x34
-+#define SCANCODE_SLASH	0x35
-diff -rupN source/src/video/orbital/SDL_orbitalvideo.c source-redox/src/video/orbital/SDL_orbitalvideo.c
---- source/src/video/orbital/SDL_orbitalvideo.c	1969-12-31 17:00:00.000000000 -0700
-+++ source-redox/src/video/orbital/SDL_orbitalvideo.c	2018-02-27 20:42:46.335903198 -0700
-@@ -0,0 +1,282 @@
+diff -rupNw source-original/src/video/orbital/SDL_orbitalvideo.c source/src/video/orbital/SDL_orbitalvideo.c
+--- source-original/src/video/orbital/SDL_orbitalvideo.c	1970-01-01 01:00:00.000000000 +0100
++++ source/src/video/orbital/SDL_orbitalvideo.c	2018-04-25 02:29:56.554079034 +0200
+@@ -0,0 +1,248 @@
 +/*
 +    SDL - Simple DirectMedia Layer
 +    Copyright (C) 1997-2012 Sam Lantinga
@@ -487,6 +411,7 @@ diff -rupN source/src/video/orbital/SDL_orbitalvideo.c source-redox/src/video/or
 +#include "../SDL_pixels_c.h"
 +#include "../../events/SDL_events_c.h"
 +
++#include <orbital.h>
 +#include "SDL_orbitalvideo.h"
 +#include "SDL_orbitalevents_c.h"
 +#include "SDL_orbitalmouse_c.h"
@@ -611,62 +536,37 @@ diff -rupN source/src/video/orbital/SDL_orbitalvideo.c source-redox/src/video/or
 +		return(NULL);
 +	}
 +
-+	if ( this->hidden->buffer ) {
-+		redox_funmap( this->hidden->buffer );
-+		this->hidden->buffer = NULL;
-+	}
-+
-+	if ( this->hidden->fd > 0 ) {
-+		/* If the window already exists send a resize message to the display server */
-+		char msg[4096];
-+		int msg_len = snprintf(msg, 4096, "S,%d,%d", width, height);
-+		int res = write(this->hidden->fd, msg, msg_len);
-+		if ( res != msg_len ) {
-+			close(this->hidden->fd);
-+			this->hidden->fd = 0;
-+			SDL_SetError("Couldn't write resize event");
-+			return(NULL);
-+		}
++	if (this->hidden->window) {
++		orb_window_set_size(this->hidden->window, width, height);
 +	} else {
-+		/* Otherwise create a new window */
-+		char path[4096];
-+		snprintf(path, 4096, "orbital:a%s/-1/-1/%d/%d/SDL", (flags & SDL_RESIZABLE) ? "r" : "", width, height);
-+		this->hidden->fd = open(path, O_RDWR);
-+		if ( this->hidden->fd <= 0 ) {
-+			this->hidden->fd = 0;
++		uint32_t flags = ORB_WINDOW_ASYNC;
++		if (flags & SDL_RESIZABLE)
++			flags |= ORB_WINDOW_RESIZABLE;
++
++		this->hidden->window = orb_window_new_flags(-1, -1, width, height, "SDL", flags);
++		if (!this->hidden->window) {
 +			SDL_SetError("Couldn't create window for requested mode");
 +			return(NULL);
 +		}
-+		printf("%s at %d\n", path, this->hidden->fd);
-+	}
-+
-+	this->hidden->buffer = redox_fmap(this->hidden->fd, 0, width * height * (bpp / 8));
-+	if ( ! this->hidden->buffer ) {
-+		close(this->hidden->fd);
-+		this->hidden->fd = 0;
-+		SDL_SetError("Couldn't map window for requested mode");
-+		return(NULL);
 +	}
 +
 + 	fprintf(stderr, "Setting mode %dx%d@%d\n", width, height, bpp);
 +
 +	/* Allocate the new pixel format for the screen */
-+
 +	if ( ! SDL_ReallocFormat(current, bpp, 0, 0, 0, 0) ) {
-+		redox_funmap(this->hidden->buffer);
-+		this->hidden->buffer = NULL;
-+		close(this->hidden->fd);
-+		this->hidden->fd = 0;
++		orb_window_destroy(this->hidden->window);
++		this->hidden->window = NULL;
++
 +		SDL_SetError("Couldn't allocate new pixel format for requested mode");
 +		return(NULL);
 +	}
 +
 +	/* Set up the new mode framebuffer */
 +	current->flags = flags /*& SDL_FULLSCREEN*/;
-+	this->hidden->w = current->w = width;
-+	this->hidden->h = current->h = height;
-+	current->pitch = current->w * (bpp / 8);
-+	current->pixels = this->hidden->buffer;
++	current->w = width;
++	current->h = height;
++	current->pitch = width * (bpp / 8);
++	current->pixels = orb_window_data(this->hidden->window);
 +
 +	/* We're done */
 +	return(current);
@@ -674,14 +574,8 @@ diff -rupN source/src/video/orbital/SDL_orbitalvideo.c source-redox/src/video/or
 +
 +static void ORBITAL_SetCaption(_THIS, const char *title, const char *icon)
 +{
-+	if ( this->hidden->fd > 0 ) {
-+		char msg[4096];
-+		int msg_len = snprintf(msg, 4096, "T,%s", title);
-+		int res = write(this->hidden->fd, msg, msg_len);
-+		if ( res != msg_len ) {
-+			SDL_SetError("Couldn't set window caption (write error)");
-+		}
-+	}
++	if (this->hidden->window)
++		orb_window_set_title(this->hidden->window, title);
 +}
 +
 +/* We don't actually allow hardware surfaces other than the main one */
@@ -707,7 +601,8 @@ diff -rupN source/src/video/orbital/SDL_orbitalvideo.c source-redox/src/video/or
 +
 +static void ORBITAL_UpdateRects(_THIS, int numrects, SDL_Rect *rects)
 +{
-+	fsync(this->hidden->fd);
++	if (this->hidden->window)
++		orb_window_sync(this->hidden->window);
 +}
 +
 +int ORBITAL_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors)
@@ -721,21 +616,16 @@ diff -rupN source/src/video/orbital/SDL_orbitalvideo.c source-redox/src/video/or
 +*/
 +void ORBITAL_VideoQuit(_THIS)
 +{
-+	if ( this->hidden->buffer ) {
-+		redox_funmap( this->hidden->buffer );
-+		this->hidden->buffer = NULL;
++	if (this->hidden->window) {
++		orb_window_destroy(this->hidden->window);
++		this->hidden->window = NULL;
 +		this->screen->pixels = NULL;
 +	}
-+
-+	if ( this->hidden->fd >= 0) {
-+		close( this->hidden->fd );
-+                this->hidden->fd = 0;
-+	}
 +}
-diff -rupN source/src/video/orbital/SDL_orbitalvideo.h source-redox/src/video/orbital/SDL_orbitalvideo.h
---- source/src/video/orbital/SDL_orbitalvideo.h	1969-12-31 17:00:00.000000000 -0700
-+++ source-redox/src/video/orbital/SDL_orbitalvideo.h	2018-02-27 20:42:46.335903198 -0700
-@@ -0,0 +1,41 @@
+diff -rupNw source-original/src/video/orbital/SDL_orbitalvideo.h source/src/video/orbital/SDL_orbitalvideo.h
+--- source-original/src/video/orbital/SDL_orbitalvideo.h	1970-01-01 01:00:00.000000000 +0100
++++ source/src/video/orbital/SDL_orbitalvideo.h	2018-04-23 17:04:31.224570535 +0200
+@@ -0,0 +1,39 @@
 +/*
 +    SDL - Simple DirectMedia Layer
 +    Copyright (C) 1997-2012 Sam Lantinga
@@ -771,15 +661,13 @@ diff -rupN source/src/video/orbital/SDL_orbitalvideo.h source-redox/src/video/or
 +/* Private display data */
 +
 +struct SDL_PrivateVideoData {
-+    int w, h;
-+    int fd;
-+    void *buffer;
++    void *window;
 +};
 +
 +#endif /* _SDL_orbitalvideo_h */
-diff -rupN source/src/video/SDL_gamma.c source-redox/src/video/SDL_gamma.c
---- source/src/video/SDL_gamma.c	2012-01-18 23:30:06.000000000 -0700
-+++ source-redox/src/video/SDL_gamma.c	2018-02-27 20:56:59.314549375 -0700
+diff -rupNw source-original/src/video/SDL_gamma.c source/src/video/SDL_gamma.c
+--- source-original/src/video/SDL_gamma.c	2012-01-19 07:30:06.000000000 +0100
++++ source/src/video/SDL_gamma.c	2018-04-23 17:03:35.537588257 +0200
 @@ -35,6 +35,9 @@
  #define log(x)		__ieee754_log(x)
  #endif
@@ -790,9 +678,9 @@ diff -rupN source/src/video/SDL_gamma.c source-redox/src/video/SDL_gamma.c
  #include "SDL_sysvideo.h"
  
  
-diff -rupN source/src/video/SDL_sysvideo.h source-redox/src/video/SDL_sysvideo.h
---- source/src/video/SDL_sysvideo.h	2012-01-18 23:30:06.000000000 -0700
-+++ source-redox/src/video/SDL_sysvideo.h	2018-02-27 20:42:46.335903198 -0700
+diff -rupNw source-original/src/video/SDL_sysvideo.h source/src/video/SDL_sysvideo.h
+--- source-original/src/video/SDL_sysvideo.h	2012-01-19 07:30:06.000000000 +0100
++++ source/src/video/SDL_sysvideo.h	2018-04-23 17:03:35.537588257 +0200
 @@ -410,6 +410,9 @@ extern VideoBootStrap AALIB_bootstrap;
  #if SDL_VIDEO_DRIVER_CACA
  extern VideoBootStrap CACA_bootstrap;
@@ -803,9 +691,9 @@ diff -rupN source/src/video/SDL_sysvideo.h source-redox/src/video/SDL_sysvideo.h
  #if SDL_VIDEO_DRIVER_DUMMY
  extern VideoBootStrap DUMMY_bootstrap;
  #endif
-diff -rupN source/src/video/SDL_video.c source-redox/src/video/SDL_video.c
---- source/src/video/SDL_video.c	2012-01-18 23:30:06.000000000 -0700
-+++ source-redox/src/video/SDL_video.c	2018-02-27 20:45:30.447873197 -0700
+diff -rupNw source-original/src/video/SDL_video.c source/src/video/SDL_video.c
+--- source-original/src/video/SDL_video.c	2012-01-19 07:30:06.000000000 +0100
++++ source/src/video/SDL_video.c	2018-04-23 17:03:35.541588484 +0200
 @@ -126,6 +126,9 @@ static VideoBootStrap *bootstrap[] = {
  #if SDL_VIDEO_DRIVER_CACA
  	&CACA_bootstrap,
@@ -826,12 +714,3 @@ diff -rupN source/src/video/SDL_video.c source-redox/src/video/SDL_video.c
  
  		/* Now adjust the offsets to match the desired mode */
  		video->offset_x = (mode->w-width)/2;
-@@ -1598,7 +1602,7 @@ void SDL_GL_UpdateRects(int numrects, SD
- 				this->glFlush();
- 				/*
- 				* Note the parens around the function name:
--				* This is because some OpenGL implementations define glTexCoord etc 
-+				* This is because some OpenGL implementations define glTexCoord etc
- 				* as macros, and we don't want them expanded here.
- 				*/
- 				this->glBegin(GL_TRIANGLE_STRIP);
diff --git a/recipes/sdl/recipe.sh b/recipes/sdl/recipe.sh
index 6e7695c3e..da0031fe4 100644
--- a/recipes/sdl/recipe.sh
+++ b/recipes/sdl/recipe.sh
@@ -1,5 +1,9 @@
 VERSION=1.2.15
 TAR=https://www.libsdl.org/release/SDL-$VERSION.tar.gz
+BUILD_DEPENDS=(liborbital)
+
+export CFLAGS="-I$PWD/sysroot/include/"
+export LDFLAGS="-L$PWD/sysroot/lib/"
 
 function recipe_version {
     echo "$VERSION"
-- 
GitLab