diff nuklear_ui/nuklear_sdl_gles2.h @ 1862:e07fc3d473b2

Basic UI navigation with controller
author Michael Pavone <pavone@retrodev.com>
date Wed, 08 May 2019 23:44:40 -0700
parents 56a1171e29b9
children 579fe3f6fe76
line wrap: on
line diff
--- a/nuklear_ui/nuklear_sdl_gles2.h	Fri May 03 18:56:12 2019 -0700
+++ b/nuklear_ui/nuklear_sdl_gles2.h	Wed May 08 23:44:40 2019 -0700
@@ -414,6 +414,30 @@
             else nk_input_key(ctx, NK_KEY_RIGHT, down);
         } else return 0;
         return 1;
+	} else if (evt->type == SDL_CONTROLLERBUTTONDOWN || evt->type == SDL_CONTROLLERBUTTONUP) {
+		int down = evt->type == SDL_CONTROLLERBUTTONDOWN;
+		if (evt->cbutton.button == SDL_CONTROLLER_BUTTON_DPAD_UP) {
+			nk_input_key(ctx, NK_KEY_UP, down);
+		} else if (evt->cbutton.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN) {
+			nk_input_key(ctx, NK_KEY_DOWN, down);
+		} else if (evt->cbutton.button == SDL_CONTROLLER_BUTTON_A || evt->cbutton.button == SDL_CONTROLLER_BUTTON_START) {
+			nk_input_key(ctx, NK_KEY_ENTER, down);
+		}
+	} else if (evt->type == SDL_CONTROLLERAXISMOTION) {
+		if (evt->caxis.axis == SDL_CONTROLLER_AXIS_LEFTY || evt->caxis.axis ==  SDL_CONTROLLER_AXIS_RIGHTY) {
+			int down = abs(evt->caxis.value) > 2000;
+			if (evt->caxis.value >= 0) {
+				if (ctx->input.keyboard.keys[NK_KEY_UP].down) {
+					nk_input_key(ctx, NK_KEY_UP, 0);
+				}
+				nk_input_key(ctx, NK_KEY_DOWN, down);
+			} else {
+				if (ctx->input.keyboard.keys[NK_KEY_DOWN].down) {
+					nk_input_key(ctx, NK_KEY_DOWN, 0);
+				}
+				nk_input_key(ctx, NK_KEY_UP, down);
+			}
+		}
     } else if (evt->type == SDL_MOUSEBUTTONDOWN || evt->type == SDL_MOUSEBUTTONUP) {
         /* mouse button */
         int down = evt->type == SDL_MOUSEBUTTONDOWN;