Immediate-Mode-UI / Nuklear

A single-header ANSI C immediate mode cross-platform GUI library
https://immediate-mode-ui.github.io/Nuklear/doc/index.html
Other
9.05k stars 542 forks source link

Handling Custom Input #330

Open blobotic opened 3 years ago

blobotic commented 3 years ago

Hi, first off, this is a great project!

I've been searching for a way to handle custom text input, specifically keyboard input when you're not focused on any particular widget.

For example, if I have a couple of text boxes (say, nk_edit_string) stacked vertically, I'd like for a new one to be created, appended to the top, and focused on on keyboard input if there is nothing currently active, otherwise handle input in the active widget (i.e. if I press "e" with nothing focused, I want to see a new nk_edit_string at the top of my window with an "e" in its buffer).

I am aware of nk_item_is_any_active, so I've been bashing my head trying to figure out how to handle input otherwise.

I'm currently using the d3d11 demo as a base, and I have

MSG msg;
nk_input_begin(ctx);
while (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) {
    if (msg.message == WM_QUIT) running = 0;
    else if (msg.message == WM_KEYDOWN) nk_input_key(ctx, msg.wParam, 1);
    else if (msg.message == WM_KEYUP) nk_input_key(ctx, msg.wParam, 0);
    TranslateMessage(&msg);
    DispatchMessageW(&msg);
}
nk_input_end(ctx);

, but I'm stuck on what to do after nk_input_key.

Any help would be greatly appreciated!

RobLoach commented 4 months ago

That's correct, though you'll want to port the msg.wParam to a enum nk_keys.

bolt-blue commented 2 months ago

I'm facing a similar issue. Is it then reasonable/expected to extend nk_keys for other cases that it doesn't include, e.g. ascii letters, function keys, ...?