Fix issue 548
The issue was introduced in the fix for 416 (commit 8559aeb
).
The original problem was (backspace and arrows moving too fast) is not a
nuklear problem but a GLFW problem. Because of the way nuklear handles
input (it must be between input_begin and end), the key callback method
GLFW offers is not an option.
So we have to use glfwGetKey() which returns the current state of a key
not whether it was just pressed or released, so nuklear acts like it
was pressed every single frame, hence the "too fast" problem.
The fix checks for state change and discards the event if there was
no change. This kills key repeat behavior (for named keys) on
*all* platforms which makes deleting or arrowing inconvenient.
Since there's no way to fix the shortcomings of a callback vs event
based input API, my "fix" just makes the original fix conditional
on a macro NK_KEYSTATE_BASED_INPUT
This commit is contained in:
parent
19c14bb777
commit
36a8d2a5ad
@ -21,6 +21,7 @@
|
||||
#define NK_INCLUDE_DEFAULT_FONT
|
||||
#define NK_IMPLEMENTATION
|
||||
#define NK_GLFW_GL2_IMPLEMENTATION
|
||||
#define NK_KEYSTATE_BASED_INPUT
|
||||
#include "../../nuklear.h"
|
||||
#include "nuklear_glfw_gl2.h"
|
||||
|
||||
@ -37,7 +38,7 @@
|
||||
/*#define INCLUDE_ALL */
|
||||
/*#define INCLUDE_STYLE */
|
||||
/*#define INCLUDE_CALCULATOR */
|
||||
/*#define INCLUDE_OVERVIEW */
|
||||
#define INCLUDE_OVERVIEW
|
||||
/*#define INCLUDE_NODE_EDITOR */
|
||||
|
||||
#ifdef INCLUDE_ALL
|
||||
|
@ -22,6 +22,7 @@
|
||||
#define NK_INCLUDE_DEFAULT_FONT
|
||||
#define NK_IMPLEMENTATION
|
||||
#define NK_GLFW_GL3_IMPLEMENTATION
|
||||
#define NK_KEYSTATE_BASED_INPUT
|
||||
#include "../../nuklear.h"
|
||||
#include "nuklear_glfw_gl3.h"
|
||||
|
||||
@ -41,7 +42,7 @@
|
||||
/*#define INCLUDE_ALL */
|
||||
/*#define INCLUDE_STYLE */
|
||||
/*#define INCLUDE_CALCULATOR */
|
||||
/*#define INCLUDE_OVERVIEW */
|
||||
#define INCLUDE_OVERVIEW
|
||||
/*#define INCLUDE_NODE_EDITOR */
|
||||
|
||||
#ifdef INCLUDE_ALL
|
||||
|
@ -22,6 +22,7 @@
|
||||
#define NK_INCLUDE_DEFAULT_FONT
|
||||
#define NK_IMPLEMENTATION
|
||||
#define NK_GLFW_GL4_IMPLEMENTATION
|
||||
#define NK_KEYSTATE_BASED_INPUT
|
||||
#include "../../nuklear.h"
|
||||
#include "nuklear_glfw_gl4.h"
|
||||
|
||||
@ -41,7 +42,7 @@
|
||||
/*#define INCLUDE_ALL */
|
||||
/*#define INCLUDE_STYLE */
|
||||
/*#define INCLUDE_CALCULATOR */
|
||||
/*#define INCLUDE_OVERVIEW */
|
||||
#define INCLUDE_OVERVIEW
|
||||
/*#define INCLUDE_NODE_EDITOR */
|
||||
|
||||
#ifdef INCLUDE_ALL
|
||||
|
@ -13922,8 +13922,12 @@ nk_input_key(struct nk_context *ctx, enum nk_keys key, int down)
|
||||
NK_ASSERT(ctx);
|
||||
if (!ctx) return;
|
||||
in = &ctx->input;
|
||||
#ifdef NK_KEYSTATE_BASED_INPUT
|
||||
if (in->keyboard.keys[key].down != down)
|
||||
in->keyboard.keys[key].clicked++;
|
||||
#else
|
||||
in->keyboard.keys[key].clicked++;
|
||||
#endif
|
||||
in->keyboard.keys[key].down = down;
|
||||
}
|
||||
NK_API void
|
||||
|
Loading…
Reference in New Issue
Block a user