rxi / microui

A tiny immediate-mode UI library
MIT License
3.29k stars 239 forks source link

Keyboard controls? #29

Closed gingerbeardman closed 4 years ago

gingerbeardman commented 4 years ago

It seems a pointer device is needed to use the microui interfaces.

I'd be interested in keyboard control, I suppose this would also mean tab order would be useful.

Thanks for all your work!

rxi commented 4 years ago

This isn't something I plan to support in the base library at the moment, as you can imagine given the goals of the project the addition of features is typically avoided. I did experiment a little with tab-moves-to-next-control in the past but for what it added in code it didn't yield results I was happy with. Anything more complex than this (eg, being able to use arrow keys to navigate between buttons/sliders, enter to select) would be a huge change in both lines of code and complexity.

This being said microui should be able to act as a foundation for these kinds of additions, eg. in projects I use it in I typically use it as a base to many additional controls and features specific to the application. Keyboard controls would be one of these application-specific features.

ericoporto commented 3 years ago

Hey, I understand this is not something to be part of the library, since it's good it's really tiny and easy to understand, but I wanted to use it in a game.

So, I understand that for some rustic way of using arrow keys/d-pad to move a cursor on the "cells" (comparing a bunch of rows with a table), I would need to know the position/dimensions of these cells. But I think that these only exist fleetingly, between the BeginWindow and EndWindow, with things getting popped out of the stack - so a new window on the same frame would "overwrite" the stacked layouts and there goes my positional information.

In this way, I think the only possible way would be store that the player had intention to move cursor right (a boolean key_right or something) and then when it's the control in the position of where the cursor is now, mark somewhere this, and then on layout next advance the cursor.

Are there other simpler strategies? Or is there a way to recover the position of controls on screen I am not seeing?