@ -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 ( " 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 ) ; }
// 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 ( ) ;
}