mirror of
https://github.com/xemu-project/imgui.git
synced 2024-11-23 18:29:51 +00:00
Demo: draw a section of keyboard in "Inputs > Keyboard, Gamepad & Navigation state" to visualize keys.
This commit is contained in:
parent
69b697378b
commit
c2db4c2462
@ -115,6 +115,7 @@ Other Changes:
|
|||||||
- Tables: Fixed positioning of Sort icon on right-most column with some settings (not resizable + no borders). (#4918).
|
- Tables: Fixed positioning of Sort icon on right-most column with some settings (not resizable + no borders). (#4918).
|
||||||
- Nav: Fixed gamepad navigation in wrapping popups not wrapping all the way. (#4365)
|
- Nav: Fixed gamepad navigation in wrapping popups not wrapping all the way. (#4365)
|
||||||
- Sliders, Drags: Fixed text input of values with a leading sign, common when using a format enforcing sign. (#4917)
|
- Sliders, Drags: Fixed text input of values with a leading sign, common when using a format enforcing sign. (#4917)
|
||||||
|
- Demo: draw a section of keyboard in "Inputs > Keyboard, Gamepad & Navigation state" to visualize keys. [@thedmd]
|
||||||
- Platform IME: changed io.ImeSetInputScreenPosFn() to io.SetPlatformImeDataFn() API,
|
- Platform IME: changed io.ImeSetInputScreenPosFn() to io.SetPlatformImeDataFn() API,
|
||||||
now taking a ImGuiPlatformImeData structure which we can more easily extend in the future.
|
now taking a ImGuiPlatformImeData structure which we can more easily extend in the future.
|
||||||
- Platform IME: moved io.ImeWindowHandle to GetMainViewport()->PlatformHandleRaw.
|
- Platform IME: moved io.ImeWindowHandle to GetMainViewport()->PlatformHandleRaw.
|
||||||
|
@ -5712,6 +5712,51 @@ static void ShowDemoWindowMisc()
|
|||||||
ImGui::Text("Chars queue:"); for (int i = 0; i < io.InputQueueCharacters.Size; i++) { ImWchar c = io.InputQueueCharacters[i]; ImGui::SameLine(); ImGui::Text("\'%c\' (0x%04X)", (c > ' ' && c <= 255) ? (char)c : '?', c); } // FIXME: We should convert 'c' to UTF-8 here but the functions are not public.
|
ImGui::Text("Chars queue:"); for (int i = 0; i < io.InputQueueCharacters.Size; i++) { ImWchar c = io.InputQueueCharacters[i]; ImGui::SameLine(); ImGui::Text("\'%c\' (0x%04X)", (c > ' ' && c <= 255) ? (char)c : '?', c); } // FIXME: We should convert 'c' to UTF-8 here but the functions are not public.
|
||||||
ImGui::Text("NavInputs down:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputs[i] > 0.0f) { ImGui::SameLine(); ImGui::Text("[%d] %.2f (%.02f secs)", i, io.NavInputs[i], io.NavInputsDownDuration[i]); }
|
ImGui::Text("NavInputs down:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputs[i] > 0.0f) { ImGui::SameLine(); ImGui::Text("[%d] %.2f (%.02f secs)", i, io.NavInputs[i], io.NavInputsDownDuration[i]); }
|
||||||
ImGui::Text("NavInputs pressed:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputsDownDuration[i] == 0.0f) { ImGui::SameLine(); ImGui::Text("[%d]", i); }
|
ImGui::Text("NavInputs pressed:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputsDownDuration[i] == 0.0f) { ImGui::SameLine(); ImGui::Text("[%d]", i); }
|
||||||
|
|
||||||
|
// Draw an arbitrary US keyboard layout to visualize translated keys
|
||||||
|
{
|
||||||
|
const ImVec2 key_size = ImVec2(35.0f, 35.0f);
|
||||||
|
const float key_rounding = 3.0f;
|
||||||
|
const ImVec2 key_face_size = ImVec2(25.0f, 25.0f);
|
||||||
|
const ImVec2 key_face_pos = ImVec2(5.0f, 3.0f);
|
||||||
|
const float key_face_rounding = 2.0f;
|
||||||
|
const ImVec2 key_label_pos = ImVec2(7.0f, 4.0f);
|
||||||
|
const ImVec2 key_step = ImVec2(key_size.x - 1.0f, key_size.y - 1.0f);
|
||||||
|
const float key_row_offset = 9.0f;
|
||||||
|
|
||||||
|
ImVec2 board_min = ImGui::GetCursorScreenPos();
|
||||||
|
ImVec2 board_max = ImVec2(board_min.x + 3 * key_step.x + 2 * key_row_offset + 10.0f, board_min.y + 3 * key_step.y + 10.0f);
|
||||||
|
ImVec2 start_pos = ImVec2(board_min.x + 5.0f - key_step.x, board_min.y);
|
||||||
|
|
||||||
|
struct KeyLayoutData { int Row, Col; const char* Label; ImGuiKey Key; };
|
||||||
|
const KeyLayoutData keys_to_display[] =
|
||||||
|
{
|
||||||
|
{ 0, 0, "", ImGuiKey_Tab }, { 0, 1, "Q", ImGuiKey_Q }, { 0, 2, "W", ImGuiKey_W }, { 0, 3, "E", ImGuiKey_E }, { 0, 4, "R", ImGuiKey_R },
|
||||||
|
{ 1, 0, "", ImGuiKey_CapsLock }, { 1, 1, "A", ImGuiKey_A }, { 1, 2, "S", ImGuiKey_S }, { 1, 3, "D", ImGuiKey_D }, { 1, 4, "F", ImGuiKey_F },
|
||||||
|
{ 2, 0, "", ImGuiKey_LeftShift },{ 2, 1, "Z", ImGuiKey_Z }, { 2, 2, "X", ImGuiKey_X }, { 2, 3, "C", ImGuiKey_C }, { 2, 4, "V", ImGuiKey_V }
|
||||||
|
};
|
||||||
|
|
||||||
|
ImDrawList* draw_list = ImGui::GetWindowDrawList();
|
||||||
|
draw_list->PushClipRect(board_min, board_max, true);
|
||||||
|
for (int n = 0; n < IM_ARRAYSIZE(keys_to_display); n++)
|
||||||
|
{
|
||||||
|
const KeyLayoutData* key_data = &keys_to_display[n];
|
||||||
|
ImVec2 key_min = ImVec2(start_pos.x + key_data->Col * key_step.x + key_data->Row * key_row_offset, start_pos.y + key_data->Row * key_step.y);
|
||||||
|
ImVec2 key_max = ImVec2(key_min.x + key_size.x, key_min.y + key_size.y);
|
||||||
|
draw_list->AddRectFilled(key_min, key_max, IM_COL32(204, 204, 204, 255), key_rounding);
|
||||||
|
draw_list->AddRect(key_min, key_max, IM_COL32(24, 24, 24, 255), key_rounding);
|
||||||
|
ImVec2 face_min = ImVec2(key_min.x + key_face_pos.x, key_min.y + key_face_pos.y);
|
||||||
|
ImVec2 face_max = ImVec2(face_min.x + key_face_size.x, face_min.y + key_face_size.y);
|
||||||
|
draw_list->AddRect(face_min, face_max, IM_COL32(193, 193, 193, 255), key_face_rounding, ImDrawFlags_None, 2.0f);
|
||||||
|
draw_list->AddRectFilled(face_min, face_max, IM_COL32(252, 252, 252, 255), key_face_rounding);
|
||||||
|
ImVec2 label_min = ImVec2(key_min.x + key_label_pos.x, key_min.y + key_label_pos.y);
|
||||||
|
draw_list->AddText(label_min, IM_COL32(64, 64, 64, 255), key_data->Label);
|
||||||
|
if (ImGui::IsKeyDown(key_data->Key))
|
||||||
|
draw_list->AddRectFilled(key_min, key_max, IM_COL32(255, 0, 0, 128), key_rounding);
|
||||||
|
}
|
||||||
|
draw_list->PopClipRect();
|
||||||
|
ImGui::Dummy(ImVec2(board_max.x - board_min.x, board_max.y - board_min.y));
|
||||||
|
}
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user