diff --git a/glfw/null_init.c b/glfw/null_init.c index bebc5d350..3fdab31b2 100644 --- a/glfw/null_init.c +++ b/glfw/null_init.c @@ -29,6 +29,8 @@ #include "internal.h" +#include + ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// @@ -36,11 +38,14 @@ int _glfwPlatformInit(void) { + _glfwPollMonitorsNull(); + return true; } void _glfwPlatformTerminate(void) { + free(_glfw.null.clipboardString); _glfwTerminateOSMesa(); } diff --git a/glfw/null_monitor.c b/glfw/null_monitor.c index bf1ade992..0571e20b7 100644 --- a/glfw/null_monitor.c +++ b/glfw/null_monitor.c @@ -29,13 +29,45 @@ #include "internal.h" +#include +#include +#include + +// The the sole (fake) video mode of our (sole) fake monitor +// +static GLFWvidmode getVideoMode(void) +{ + GLFWvidmode mode; + mode.width = 1920; + mode.height = 1080; + mode.redBits = 8; + mode.greenBits = 8; + mode.blueBits = 8; + mode.refreshRate = 60; + return mode; +} + +////////////////////////////////////////////////////////////////////////// +////// GLFW internal API ////// +////////////////////////////////////////////////////////////////////////// + +void _glfwPollMonitorsNull(void) +{ + const float dpi = 141.f; + const GLFWvidmode mode = getVideoMode(); + _GLFWmonitor* monitor = _glfwAllocMonitor("Null SuperNoop 0", + (int) (mode.width * 25.4f / dpi), + (int) (mode.height * 25.4f / dpi)); + _glfwInputMonitor(monitor, GLFW_CONNECTED, _GLFW_INSERT_FIRST); +} ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// -void _glfwPlatformFreeMonitor(_GLFWmonitor* monitor UNUSED) +void _glfwPlatformFreeMonitor(_GLFWmonitor* monitor) { + _glfwFreeGammaArrays(&monitor->null.ramp); } void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor UNUSED, int* xpos UNUSED, int* ypos UNUSED) @@ -52,26 +84,72 @@ void _glfwPlatformGetMonitorContentScale(_GLFWmonitor* monitor UNUSED, } void _glfwPlatformGetMonitorWorkarea(_GLFWmonitor* monitor UNUSED, - int* xpos UNUSED, int* ypos UNUSED, - int* width UNUSED, int* height UNUSED) + int* xpos, int* ypos, + int* width, int* height) { + const GLFWvidmode mode = getVideoMode(); + + if (xpos) + *xpos = 10; + if (ypos) + ypos = 0; + if (width) + *width = mode.width; + if (height) + *height = mode.height - 10; } -GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor UNUSED, int* found UNUSED) +GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor UNUSED, int* found) { - return NULL; + GLFWvidmode* mode = calloc(1, sizeof(GLFWvidmode)); + *mode = getVideoMode(); + *found = 1; + return mode; } -void _glfwPlatformGetVideoMode(_GLFWmonitor* monitor UNUSED, GLFWvidmode* mode UNUSED) +void _glfwPlatformGetVideoMode(_GLFWmonitor* monitor UNUSED, GLFWvidmode* mode) { + *mode = getVideoMode(); } -bool _glfwPlatformGetGammaRamp(_GLFWmonitor* monitor UNUSED, GLFWgammaramp* ramp UNUSED) +bool _glfwPlatformGetGammaRamp(_GLFWmonitor* monitor, GLFWgammaramp* ramp) { - return false; + if (!monitor->null.ramp.size) + { + _glfwAllocGammaArrays(&monitor->null.ramp, 256); + + for (unsigned int i = 0; i < monitor->null.ramp.size; i++) + { + const float gamma = 2.2f; + float value; + value = i / (float) (monitor->null.ramp.size - 1); + value = powf(value, 1.f / gamma) * 65535.f + 0.5f; + value = _glfw_fminf(value, 65535.f); + + monitor->null.ramp.red[i] = (unsigned short) value; + monitor->null.ramp.green[i] = (unsigned short) value; + monitor->null.ramp.blue[i] = (unsigned short) value; + } + } + + _glfwAllocGammaArrays(ramp, monitor->null.ramp.size); + memcpy(ramp->red, monitor->null.ramp.red, sizeof(short) * ramp->size); + memcpy(ramp->green, monitor->null.ramp.green, sizeof(short) * ramp->size); + memcpy(ramp->blue, monitor->null.ramp.blue, sizeof(short) * ramp->size); + return true; } -void _glfwPlatformSetGammaRamp(_GLFWmonitor* monitor UNUSED, const GLFWgammaramp* ramp UNUSED) +void _glfwPlatformSetGammaRamp(_GLFWmonitor* monitor, const GLFWgammaramp* ramp) { + if (monitor->null.ramp.size != ramp->size) + { + _glfwInputError(GLFW_PLATFORM_ERROR, + "Null: Gamma ramp size must match current ramp size"); + return; + } + + memcpy(monitor->null.ramp.red, ramp->red, sizeof(short) * ramp->size); + memcpy(monitor->null.ramp.green, ramp->green, sizeof(short) * ramp->size); + memcpy(monitor->null.ramp.blue, ramp->blue, sizeof(short) * ramp->size); } diff --git a/glfw/null_platform.h b/glfw/null_platform.h index d844488f8..d767e87b8 100644 --- a/glfw/null_platform.h +++ b/glfw/null_platform.h @@ -27,12 +27,12 @@ #include -#define _GLFW_PLATFORM_WINDOW_STATE _GLFWwindowNull null +#define _GLFW_PLATFORM_WINDOW_STATE _GLFWwindowNull null +#define _GLFW_PLATFORM_LIBRARY_WINDOW_STATE _GLFWlibraryNull null +#define _GLFW_PLATFORM_MONITOR_STATE _GLFWmonitorNull null #define _GLFW_PLATFORM_CONTEXT_STATE -#define _GLFW_PLATFORM_MONITOR_STATE #define _GLFW_PLATFORM_CURSOR_STATE -#define _GLFW_PLATFORM_LIBRARY_WINDOW_STATE #define _GLFW_PLATFORM_LIBRARY_CONTEXT_STATE #define _GLFW_EGL_CONTEXT_STATE #define _GLFW_EGL_LIBRARY_CONTEXT_STATE @@ -56,7 +56,36 @@ // typedef struct _GLFWwindowNull { - int width; - int height; + int xpos; + int ypos; + int width; + int height; + char* title; + bool visible; + bool iconified; + bool maximized; + bool resizable; + bool decorated; + bool floating; + bool transparent; + float opacity; } _GLFWwindowNull; +// Null-specific per-monitor data +// +typedef struct _GLFWmonitorNull +{ + GLFWgammaramp ramp; +} _GLFWmonitorNull; + +// Null-specific global data +// +typedef struct _GLFWlibraryNull +{ + int xcursor; + int ycursor; + char* clipboardString; + _GLFWwindow* focusedWindow; +} _GLFWlibraryNull; + +void _glfwPollMonitorsNull(void); diff --git a/glfw/null_window.c b/glfw/null_window.c index b12d4ca19..7fdd2ef9a 100644 --- a/glfw/null_window.c +++ b/glfw/null_window.c @@ -30,12 +30,71 @@ #include "internal.h" #include "../kitty/monotonic.h" +#include + +static void applySizeLimits(_GLFWwindow* window, int* width, int* height) +{ + if (window->numer != GLFW_DONT_CARE && window->denom != GLFW_DONT_CARE) + { + const float ratio = (float) window->numer / (float) window->denom; + *height = (int) (*width / ratio); + } + + if (window->minwidth != GLFW_DONT_CARE && *width < window->minwidth) + *width = window->minwidth; + else if (window->maxwidth != GLFW_DONT_CARE && *width > window->maxwidth) + *width = window->maxwidth; + + if (window->minheight != GLFW_DONT_CARE && *height < window->minheight) + *height = window->minheight; + else if (window->maxheight != GLFW_DONT_CARE && *height > window->maxheight) + *height = window->maxheight; +} + +static void fitToMonitor(_GLFWwindow* window) +{ + GLFWvidmode mode; + _glfwPlatformGetVideoMode(window->monitor, &mode); + _glfwPlatformGetMonitorPos(window->monitor, + &window->null.xpos, + &window->null.ypos); + window->null.width = mode.width; + window->null.height = mode.height; +} + +static void acquireMonitor(_GLFWwindow* window) +{ + _glfwInputMonitorWindow(window->monitor, window); +} + +static void releaseMonitor(_GLFWwindow* window) +{ + if (window->monitor->window != window) + return; + + _glfwInputMonitorWindow(window->monitor, NULL); +} static int createNativeWindow(_GLFWwindow* window, - const _GLFWwndconfig* wndconfig) + const _GLFWwndconfig* wndconfig, + const _GLFWfbconfig* fbconfig) { - window->null.width = wndconfig->width; - window->null.height = wndconfig->height; + if (window->monitor) + fitToMonitor(window); + else + { + window->null.xpos = 17; + window->null.ypos = 17; + window->null.width = wndconfig->width; + window->null.height = wndconfig->height; + } + + window->null.visible = wndconfig->visible; + window->null.decorated = wndconfig->decorated; + window->null.maximized = wndconfig->maximized; + window->null.floating = wndconfig->floating; + window->null.transparent = fbconfig->transparent; + window->null.opacity = 1.f; return true; } @@ -50,7 +109,7 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig) { - if (!createNativeWindow(window, wndconfig)) + if (!createNativeWindow(window, wndconfig, fbconfig)) return false; if (ctxconfig->client != GLFW_NO_API) @@ -70,11 +129,24 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, } } + if (window->monitor) + { + _glfwPlatformShowWindow(window); + _glfwPlatformFocusWindow(window); + acquireMonitor(window); + } + return true; } void _glfwPlatformDestroyWindow(_GLFWwindow* window) { + if (window->monitor) + releaseMonitor(window); + + if (_glfw.null.focusedWindow == window) + _glfw.null.focusedWindow = NULL; + if (window->context.destroy) window->context.destroy(window); } @@ -88,20 +160,60 @@ void _glfwPlatformSetWindowIcon(_GLFWwindow* window UNUSED, int count UNUSED, { } -void _glfwPlatformSetWindowMonitor(_GLFWwindow* window UNUSED, - _GLFWmonitor* monitor UNUSED, - int xpos UNUSED, int ypos UNUSED, - int width UNUSED, int height UNUSED, +void _glfwPlatformSetWindowMonitor(_GLFWwindow* window, + _GLFWmonitor* monitor, + int xpos, int ypos, + int width, int height, int refreshRate UNUSED) { + if (window->monitor == monitor) + { + if (!monitor) + { + _glfwPlatformSetWindowPos(window, xpos, ypos); + _glfwPlatformSetWindowSize(window, width, height); + } + + return; + } + + if (window->monitor) + releaseMonitor(window); + + _glfwInputWindowMonitor(window, monitor); + + if (window->monitor) + { + window->null.visible = true; + acquireMonitor(window); + fitToMonitor(window); + } + else + { + _glfwPlatformSetWindowPos(window, xpos, ypos); + _glfwPlatformSetWindowSize(window, width, height); + } } -void _glfwPlatformGetWindowPos(_GLFWwindow* window UNUSED, int* xpos UNUSED, int* ypos UNUSED) +void _glfwPlatformGetWindowPos(_GLFWwindow* window, int* xpos, int* ypos) { + if (xpos) + *xpos = window->null.xpos; + if (ypos) + *ypos = window->null.ypos; } -void _glfwPlatformSetWindowPos(_GLFWwindow* window UNUSED, int xpos UNUSED, int ypos UNUSED) +void _glfwPlatformSetWindowPos(_GLFWwindow* window, int xpos, int ypos) { + if (window->monitor) + return; + + if (window->null.xpos != xpos || window->null.ypos != ypos) + { + window->null.xpos = xpos; + window->null.ypos = ypos; + _glfwInputWindowPos(window, xpos, ypos); + } } void _glfwPlatformGetWindowSize(_GLFWwindow* window, int* width, int* height) @@ -114,18 +226,34 @@ void _glfwPlatformGetWindowSize(_GLFWwindow* window, int* width, int* height) void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height) { - window->null.width = width; - window->null.height = height; + if (window->monitor) + return; + + if (window->null.width != width || window->null.height != height) + { + window->null.width = width; + window->null.height = height; + _glfwInputWindowSize(window, width, height); + _glfwInputFramebufferSize(window, width, height); + } } -void _glfwPlatformSetWindowSizeLimits(_GLFWwindow* window UNUSED, +void _glfwPlatformSetWindowSizeLimits(_GLFWwindow* window, int minwidth UNUSED, int minheight UNUSED, int maxwidth UNUSED, int maxheight UNUSED) { + int width = window->null.width; + int height = window->null.height; + applySizeLimits(window, &width, &height); + _glfwPlatformSetWindowSize(window, width, height); } -void _glfwPlatformSetWindowAspectRatio(_GLFWwindow* window UNUSED, int n UNUSED, int d UNUSED) +void _glfwPlatformSetWindowAspectRatio(_GLFWwindow* window, int n UNUSED, int d UNUSED) { + int width = window->null.width; + int height = window->null.height; + applySizeLimits(window, &width, &height); + _glfwPlatformSetWindowSize(window, width, height); } void _glfwPlatformSetWindowSizeIncrements(_GLFWwindow* window UNUSED, int widthincr UNUSED, int heightincr UNUSED) @@ -140,10 +268,17 @@ void _glfwPlatformGetFramebufferSize(_GLFWwindow* window, int* width, int* heigh *height = window->null.height; } -void _glfwPlatformGetWindowFrameSize(_GLFWwindow* window UNUSED, - int* left UNUSED, int* top UNUSED, - int* right UNUSED, int* bottom UNUSED) +void _glfwPlatformGetWindowFrameSize(_GLFWwindow* window, + int* left, int* top, + int* right, int* bottom) { + if (window->null.decorated && !window->monitor) + { + *left = 1; + *top = 10; + *right = 1; + *bottom = 1; + } } void _glfwPlatformGetWindowContentScale(_GLFWwindow* window UNUSED, @@ -160,52 +295,91 @@ monotonic_t _glfwPlatformGetDoubleClickInterval(_GLFWwindow* window UNUSED) return ms_to_monotonic_t(500ll); } -void _glfwPlatformIconifyWindow(_GLFWwindow* window UNUSED) +void _glfwPlatformIconifyWindow(_GLFWwindow* window) { + if (_glfw.null.focusedWindow == window) + { + _glfw.null.focusedWindow = NULL; + _glfwInputWindowFocus(window, false); + } + + if (!window->null.iconified) + { + window->null.iconified = true; + _glfwInputWindowIconify(window, true); + + if (window->monitor) + releaseMonitor(window); + } } -void _glfwPlatformRestoreWindow(_GLFWwindow* window UNUSED) +void _glfwPlatformRestoreWindow(_GLFWwindow* window) { + if (window->null.iconified) + { + window->null.iconified = false; + _glfwInputWindowIconify(window, false); + + if (window->monitor) + acquireMonitor(window); + } + else if (window->null.maximized) + { + window->null.maximized = false; + _glfwInputWindowMaximize(window, false); + } } -void _glfwPlatformMaximizeWindow(_GLFWwindow* window UNUSED) +void _glfwPlatformMaximizeWindow(_GLFWwindow* window) { + if (!window->null.maximized) + { + window->null.maximized = true; + _glfwInputWindowMaximize(window, true); + } } -int _glfwPlatformWindowMaximized(_GLFWwindow* window UNUSED) +int _glfwPlatformWindowMaximized(_GLFWwindow* window) { - return false; + return window->null.maximized; } -int _glfwPlatformWindowHovered(_GLFWwindow* window UNUSED) +int _glfwPlatformWindowHovered(_GLFWwindow* window) { - return false; + return _glfw.null.xcursor >= window->null.xpos && + _glfw.null.ycursor >= window->null.ypos && + _glfw.null.xcursor <= window->null.xpos + window->null.width - 1 && + _glfw.null.ycursor <= window->null.ypos + window->null.height - 1; } -int _glfwPlatformFramebufferTransparent(_GLFWwindow* window UNUSED) +int _glfwPlatformFramebufferTransparent(_GLFWwindow* window) { - return false; + return window->null.transparent; } -void _glfwPlatformSetWindowResizable(_GLFWwindow* window UNUSED, bool enabled UNUSED) +void _glfwPlatformSetWindowResizable(_GLFWwindow* window, bool enabled) { + window->null.resizable = enabled; } -void _glfwPlatformSetWindowDecorated(_GLFWwindow* window UNUSED, bool enabled UNUSED) +void _glfwPlatformSetWindowDecorated(_GLFWwindow* window, bool enabled) { + window->null.decorated = enabled; } -void _glfwPlatformSetWindowFloating(_GLFWwindow* window UNUSED, bool enabled UNUSED) +void _glfwPlatformSetWindowFloating(_GLFWwindow* window, bool enabled) { + window->null.floating = enabled; } -float _glfwPlatformGetWindowOpacity(_GLFWwindow* window UNUSED) +float _glfwPlatformGetWindowOpacity(_GLFWwindow* window) { - return 1.f; + return window->null.opacity; } -void _glfwPlatformSetWindowOpacity(_GLFWwindow* window UNUSED, float opacity UNUSED) +void _glfwPlatformSetWindowOpacity(_GLFWwindow* window, float opacity) { + window->null.opacity = opacity; } void _glfwPlatformSetRawMouseMotion(_GLFWwindow *window UNUSED, bool enabled UNUSED) @@ -214,14 +388,14 @@ void _glfwPlatformSetRawMouseMotion(_GLFWwindow *window UNUSED, bool enabled UNU bool _glfwPlatformRawMouseMotionSupported(void) { - return false; + return true; } -void _glfwPlatformShowWindow(_GLFWwindow* window UNUSED) +void _glfwPlatformShowWindow(_GLFWwindow* window) { + window->null.visible = true; } - void _glfwPlatformRequestWindowAttention(_GLFWwindow* window UNUSED) { } @@ -231,21 +405,41 @@ int _glfwPlatformWindowBell(_GLFWwindow* window UNUSED) return false; } -void _glfwPlatformUnhideWindow(_GLFWwindow* window UNUSED) +void _glfwPlatformHideWindow(_GLFWwindow* window) { + if (_glfw.null.focusedWindow == window) + { + _glfw.null.focusedWindow = NULL; + _glfwInputWindowFocus(window, false); + } + + window->null.visible = false; } -void _glfwPlatformHideWindow(_GLFWwindow* window UNUSED) +void _glfwPlatformFocusWindow(_GLFWwindow* window) { + if (_glfw.null.focusedWindow == window) + return; + + if (!window->null.visible) + return; + + _GLFWwindow* previous = _glfw.null.focusedWindow; + _glfw.null.focusedWindow = window; + + if (previous) + { + _glfwInputWindowFocus(previous, false); + if (previous->monitor && previous->autoIconify) + _glfwPlatformIconifyWindow(previous); + } + + _glfwInputWindowFocus(window, true); } -void _glfwPlatformFocusWindow(_GLFWwindow* window UNUSED) +int _glfwPlatformWindowFocused(_GLFWwindow* window) { -} - -int _glfwPlatformWindowFocused(_GLFWwindow* window UNUSED) -{ - return false; + return _glfw.null.focusedWindow == window; } int _glfwPlatformWindowOccluded(_GLFWwindow* window UNUSED) @@ -253,14 +447,14 @@ int _glfwPlatformWindowOccluded(_GLFWwindow* window UNUSED) return false; } -int _glfwPlatformWindowIconified(_GLFWwindow* window UNUSED) +int _glfwPlatformWindowIconified(_GLFWwindow* window) { - return false; + return window->null.iconified; } -int _glfwPlatformWindowVisible(_GLFWwindow* window UNUSED) +int _glfwPlatformWindowVisible(_GLFWwindow* window) { - return false; + return window->null.visible; } void _glfwPlatformPollEvents(void) @@ -279,12 +473,18 @@ void _glfwPlatformPostEmptyEvent(void) { } -void _glfwPlatformGetCursorPos(_GLFWwindow* window UNUSED, double* xpos UNUSED, double* ypos UNUSED) +void _glfwPlatformGetCursorPos(_GLFWwindow* window, double* xpos, double* ypos) { + if (xpos) + *xpos = _glfw.null.xcursor - window->null.xpos; + if (ypos) + *ypos = _glfw.null.ycursor - window->null.ypos; } -void _glfwPlatformSetCursorPos(_GLFWwindow* window UNUSED, double x UNUSED, double y UNUSED) +void _glfwPlatformSetCursorPos(_GLFWwindow* window, double x, double y) { + _glfw.null.xcursor = window->null.xpos + (int) x; + _glfw.null.ycursor = window->null.ypos + (int) y; } void _glfwPlatformSetCursorMode(_GLFWwindow* window UNUSED, int mode UNUSED) @@ -311,23 +511,142 @@ void _glfwPlatformSetCursor(_GLFWwindow* window UNUSED, _GLFWcursor* cursor UNUS { } -void _glfwPlatformSetClipboardString(const char* string UNUSED) +void _glfwPlatformSetClipboardString(const char* string) { + char* copy = _glfw_strdup(string); + free(_glfw.null.clipboardString); + _glfw.null.clipboardString = copy; } const char* _glfwPlatformGetClipboardString(void) { + return _glfw.null.clipboardString; +} + +const char* _glfwPlatformGetNativeKeyName(int native_key) +{ + switch (scancode) + { + case GLFW_KEY_APOSTROPHE: + return "'"; + case GLFW_KEY_COMMA: + return ","; + case GLFW_KEY_MINUS: + case GLFW_KEY_KP_SUBTRACT: + return "-"; + case GLFW_KEY_PERIOD: + case GLFW_KEY_KP_DECIMAL: + return "."; + case GLFW_KEY_SLASH: + case GLFW_KEY_KP_DIVIDE: + return "/"; + case GLFW_KEY_SEMICOLON: + return ";"; + case GLFW_KEY_EQUAL: + case GLFW_KEY_KP_EQUAL: + return "="; + case GLFW_KEY_LEFT_BRACKET: + return "["; + case GLFW_KEY_RIGHT_BRACKET: + return "]"; + case GLFW_KEY_KP_MULTIPLY: + return "*"; + case GLFW_KEY_KP_ADD: + return "+"; + case GLFW_KEY_BACKSLASH: + case GLFW_KEY_WORLD_1: + case GLFW_KEY_WORLD_2: + return "\\"; + case GLFW_KEY_0: + case GLFW_KEY_KP_0: + return "0"; + case GLFW_KEY_1: + case GLFW_KEY_KP_1: + return "1"; + case GLFW_KEY_2: + case GLFW_KEY_KP_2: + return "2"; + case GLFW_KEY_3: + case GLFW_KEY_KP_3: + return "3"; + case GLFW_KEY_4: + case GLFW_KEY_KP_4: + return "4"; + case GLFW_KEY_5: + case GLFW_KEY_KP_5: + return "5"; + case GLFW_KEY_6: + case GLFW_KEY_KP_6: + return "6"; + case GLFW_KEY_7: + case GLFW_KEY_KP_7: + return "7"; + case GLFW_KEY_8: + case GLFW_KEY_KP_8: + return "8"; + case GLFW_KEY_9: + case GLFW_KEY_KP_9: + return "9"; + case GLFW_KEY_A: + return "a"; + case GLFW_KEY_B: + return "b"; + case GLFW_KEY_C: + return "c"; + case GLFW_KEY_D: + return "d"; + case GLFW_KEY_E: + return "e"; + case GLFW_KEY_F: + return "f"; + case GLFW_KEY_G: + return "g"; + case GLFW_KEY_H: + return "h"; + case GLFW_KEY_I: + return "i"; + case GLFW_KEY_J: + return "j"; + case GLFW_KEY_K: + return "k"; + case GLFW_KEY_L: + return "l"; + case GLFW_KEY_M: + return "m"; + case GLFW_KEY_N: + return "n"; + case GLFW_KEY_O: + return "o"; + case GLFW_KEY_P: + return "p"; + case GLFW_KEY_Q: + return "q"; + case GLFW_KEY_R: + return "r"; + case GLFW_KEY_S: + return "s"; + case GLFW_KEY_T: + return "t"; + case GLFW_KEY_U: + return "u"; + case GLFW_KEY_V: + return "v"; + case GLFW_KEY_W: + return "w"; + case GLFW_KEY_X: + return "x"; + case GLFW_KEY_Y: + return "y"; + case GLFW_KEY_Z: + return "z"; + } + return NULL; } -const char* _glfwPlatformGetNativeKeyName(int native_key UNUSED) +int _glfwPlatformGetNativeKeyForKey(int key) { - return ""; -} - -int _glfwPlatformGetNativeKeyForKey(int key UNUSED) -{ - return -1; + return key; } void _glfwPlatformGetRequiredInstanceExtensions(char** extensions UNUSED) @@ -347,6 +666,6 @@ VkResult _glfwPlatformCreateWindowSurface(VkInstance instance UNUSED, VkSurfaceKHR* surface UNUSED) { // This seems like the most appropriate error to return here - return VK_ERROR_INITIALIZATION_FAILED; + return VK_ERROR_EXTENSION_NOT_PRESENT; }