mirror of
https://github.com/ocornut/imgui.git
synced 2024-11-28 09:30:56 +01:00
Nav: Comments (#323)
This commit is contained in:
parent
cbf24c13ca
commit
5ef8452509
13
imgui.cpp
13
imgui.cpp
@ -150,13 +150,14 @@
|
|||||||
|
|
||||||
USING GAMEPAD/KEYBOARD NAVIGATION [BETA]
|
USING GAMEPAD/KEYBOARD NAVIGATION [BETA]
|
||||||
|
|
||||||
- Gamepad/keyboard navigation support is available, it is currently in Beta and has issues. Your feedback and bug reports are welcome.
|
- Gamepad/keyboard navigation support is available, currently in Beta with some issues. Your feedback and bug reports are welcome.
|
||||||
- See https://github.com/ocornut/imgui/issues/323 for discussion thread and ask questions.
|
- See https://github.com/ocornut/imgui/issues/323 for discussion thread and ask questions.
|
||||||
- The current primary focus is to support game controllers.
|
- The current primary focus is to support game controllers.
|
||||||
- Consider emulating a mouse cursor with DualShock4 touch pad or a spare analog stick as a mouse-emulation fallback.
|
- Consider emulating a mouse cursor with DualShock4 touch pad or a spare analog stick as a mouse-emulation fallback.
|
||||||
- Consider using Synergy host (on your computer) + uSynergy.c (in your console/tablet/phone app) to use PC mouse/keyboard.
|
- Consider using Synergy host (on your computer) + uSynergy.c (in your console/tablet/phone app) to use PC mouse/keyboard.
|
||||||
- Being able to share and transition inputs between imgui navigation and your own game/application is tricky, and may requires further work on imgui.
|
- Your inputs are passed to imgui by filling the io.NavInputs[] array. See 'enum ImGuiNavInput_' in imgui.h for a description of available inputs.
|
||||||
For gamepad use, the easiest approach is to go all-or-nothing, with a buttons combo that toggle your inputs between imgui and your game/application.
|
- For gamepad use, the easiest approach is to go all-or-nothing, with a buttons combo that toggle your inputs between imgui and your game/application.
|
||||||
|
Sharing inputs in a more advanced or granular way between imgui and your game/application may be tricky and requires further work on imgui.
|
||||||
For more advanced uses, you may want to use:
|
For more advanced uses, you may want to use:
|
||||||
- io.NavUsable: true when a window is focused and it doesn't have the ImGuiWindowFlags_NoNavInputs flag set.
|
- io.NavUsable: true when a window is focused and it doesn't have the ImGuiWindowFlags_NoNavInputs flag set.
|
||||||
- io.NavActive: true when the navigation cursor is visible (and usually goes false when mouse is used).
|
- io.NavActive: true when the navigation cursor is visible (and usually goes false when mouse is used).
|
||||||
@ -165,7 +166,7 @@
|
|||||||
As we head toward more keyboard-oriented development this aspect will need to be improved.
|
As we head toward more keyboard-oriented development this aspect will need to be improved.
|
||||||
- It is recommended that you enable the 'io.NavMovesMouse' option. Enabling it instructs ImGui that it can request moving your move cursor to track navigated items and ease readability.
|
- It is recommended that you enable the 'io.NavMovesMouse' option. Enabling it instructs ImGui that it can request moving your move cursor to track navigated items and ease readability.
|
||||||
When enabled and using directional navigation (with d-pad or arrow keys), the NewFrame() functions may alter 'io.MousePos' and set 'io.WantMoveMouse' to notify you that it did so.
|
When enabled and using directional navigation (with d-pad or arrow keys), the NewFrame() functions may alter 'io.MousePos' and set 'io.WantMoveMouse' to notify you that it did so.
|
||||||
When that happens your back-end will need to move the OS mouse cursor on the _next_ frame. The examples binding in examples/ do that.
|
When that happens your back-end will need to move the OS mouse cursor on the next frame. The examples binding in examples/ do that.
|
||||||
|
|
||||||
// Application init
|
// Application init
|
||||||
io.NavMovesMouse = true;
|
io.NavMovesMouse = true;
|
||||||
@ -175,8 +176,8 @@
|
|||||||
MyFuncToSetMousePosition(io.MousePos.x, io.MousePos.y);
|
MyFuncToSetMousePosition(io.MousePos.x, io.MousePos.y);
|
||||||
ImGui::NewFrame();
|
ImGui::NewFrame();
|
||||||
|
|
||||||
In a setup when you may not have easy control over the mouse cursor (e.g. uSynergy doesn't expose changing remote mouse cursor),
|
In a setup when you may not have easy control over the mouse cursor (e.g. uSynergy.c doesn't expose moving remote mouse cursor),
|
||||||
you might want to set a boolean to request ignoring your other external mouse positions until they move again.
|
you might want to set a boolean to ignore your other external mouse positions until they move again.
|
||||||
|
|
||||||
|
|
||||||
API BREAKING CHANGES
|
API BREAKING CHANGES
|
||||||
|
14
imgui.h
14
imgui.h
@ -593,25 +593,29 @@ enum ImGuiKey_
|
|||||||
ImGuiKey_COUNT
|
ImGuiKey_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// [BETA] Gamepad/Keyboard directional navigation
|
||||||
|
// Fill ImGuiIO.NavInputs[] float array every frame to feed gamepad/keyboard navigation inputs.
|
||||||
|
// 0.0f= not held. 1.0f= fully held. Pass intermediate 0.0f..1.0f values for analog triggers/sticks.
|
||||||
|
// ImGui uses a simple >0.0f for activation testing, and won't attempt to test for a dead-zone.
|
||||||
|
// Your code passing analog gamepad values is likely to want to transform your raw inputs, using a dead-zone and maybe a power curve.
|
||||||
enum ImGuiNavInput_
|
enum ImGuiNavInput_
|
||||||
{
|
{
|
||||||
ImGuiNavInput_PadActivate, // press button, tweak value // e.g. Circle button
|
ImGuiNavInput_PadActivate, // press button, tweak value // e.g. Circle button
|
||||||
ImGuiNavInput_PadCancel, // close menu/popup/child, lose selection // e.g. Cross button
|
ImGuiNavInput_PadCancel, // close menu/popup/child, lose selection // e.g. Cross button
|
||||||
ImGuiNavInput_PadInput, // text input // e.g. Triangle button
|
ImGuiNavInput_PadInput, // text input // e.g. Triangle button
|
||||||
ImGuiNavInput_PadMenu, // access menu, focus, move, resize // e.g. Square button
|
ImGuiNavInput_PadMenu, // access menu, focus, move, resize // e.g. Square button
|
||||||
ImGuiNavInput_PadUp, // move up, resize window (with PadMenu held) // e.g. D-pad up/down/left/right
|
ImGuiNavInput_PadUp, // move up, resize window (with PadMenu held) // e.g. D-pad up/down/left/right, analog
|
||||||
ImGuiNavInput_PadDown, // move down
|
ImGuiNavInput_PadDown, // move down
|
||||||
ImGuiNavInput_PadLeft, // move left
|
ImGuiNavInput_PadLeft, // move left
|
||||||
ImGuiNavInput_PadRight, // move right
|
ImGuiNavInput_PadRight, // move right
|
||||||
ImGuiNavInput_PadScrollUp, // scroll up, move window (with PadMenu held) // e.g. right stick up/down/left/right
|
ImGuiNavInput_PadScrollUp, // scroll up, move window (with PadMenu held) // e.g. right stick up/down/left/right, analog
|
||||||
ImGuiNavInput_PadScrollDown, // "
|
ImGuiNavInput_PadScrollDown, // "
|
||||||
ImGuiNavInput_PadScrollLeft, //
|
ImGuiNavInput_PadScrollLeft, //
|
||||||
ImGuiNavInput_PadScrollRight, //
|
ImGuiNavInput_PadScrollRight, //
|
||||||
ImGuiNavInput_PadFocusPrev, // next window (with PadMenu held) // e.g. L-trigger
|
ImGuiNavInput_PadFocusPrev, // next window (with PadMenu held) // e.g. L-trigger
|
||||||
ImGuiNavInput_PadFocusNext, // prev window (with PadMenu held) // e.g. R-trigger
|
ImGuiNavInput_PadFocusNext, // prev window (with PadMenu held) // e.g. R-trigger
|
||||||
ImGuiNavInput_PadTweakSlow, // slower tweaks // e.g. L-trigger
|
ImGuiNavInput_PadTweakSlow, // slower tweaks // e.g. L-trigger, analog
|
||||||
ImGuiNavInput_PadTweakFast, // faster tweaks // e.g. R-trigger
|
ImGuiNavInput_PadTweakFast, // faster tweaks // e.g. R-trigger, analog
|
||||||
|
|
||||||
ImGuiNavInput_COUNT,
|
ImGuiNavInput_COUNT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user