mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Demo: added casing swap demo to clarify use of ImGuiInputTextFlags_CallbackCharFilter. (#6457) + Metrics: simplified some code.
This commit is contained in:
		@@ -13409,7 +13409,7 @@ void ImGui::DebugRenderKeyboardPreview(ImDrawList* draw_list)
 | 
			
		||||
        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))
 | 
			
		||||
        if (IsKeyDown(key_data->Key))
 | 
			
		||||
            draw_list->AddRectFilled(key_min, key_max, IM_COL32(255, 0, 0, 128), key_rounding);
 | 
			
		||||
    }
 | 
			
		||||
    draw_list->PopClipRect();
 | 
			
		||||
@@ -14270,13 +14270,11 @@ void ImGui::DebugNodeTabBar(ImGuiTabBar* tab_bar, const char* label)
 | 
			
		||||
    char* p = buf;
 | 
			
		||||
    const char* buf_end = buf + IM_ARRAYSIZE(buf);
 | 
			
		||||
    const bool is_active = (tab_bar->PrevFrameVisible >= GetFrameCount() - 2);
 | 
			
		||||
    p += ImFormatString(p, buf_end - p, "%s 0x%08X (%d tabs)%s", label, tab_bar->ID, tab_bar->Tabs.Size, is_active ? "" : " *Inactive*");
 | 
			
		||||
    p += ImFormatString(p, buf_end - p, "  { ");
 | 
			
		||||
    p += ImFormatString(p, buf_end - p, "%s 0x%08X (%d tabs)%s  {", label, tab_bar->ID, tab_bar->Tabs.Size, is_active ? "" : " *Inactive*");
 | 
			
		||||
    for (int tab_n = 0; tab_n < ImMin(tab_bar->Tabs.Size, 3); tab_n++)
 | 
			
		||||
    {
 | 
			
		||||
        ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
 | 
			
		||||
        p += ImFormatString(p, buf_end - p, "%s'%s'",
 | 
			
		||||
            tab_n > 0 ? ", " : "", TabBarGetTabName(tab_bar, tab));
 | 
			
		||||
        p += ImFormatString(p, buf_end - p, "%s'%s'", tab_n > 0 ? ", " : "", TabBarGetTabName(tab_bar, tab));
 | 
			
		||||
    }
 | 
			
		||||
    p += ImFormatString(p, buf_end - p, (tab_bar->Tabs.Size > 3) ? " ... }" : " } ");
 | 
			
		||||
    if (!is_active) { PushStyleColor(ImGuiCol_Text, GetStyleColorVec4(ImGuiCol_TextDisabled)); }
 | 
			
		||||
 
 | 
			
		||||
@@ -1390,7 +1390,15 @@ static void ShowDemoWindowWidgets()
 | 
			
		||||
        {
 | 
			
		||||
            struct TextFilters
 | 
			
		||||
            {
 | 
			
		||||
                // Return 0 (pass) if the character is 'i' or 'm' or 'g' or 'u' or 'i'
 | 
			
		||||
                // Modify character input by altering 'data->Eventchar' (ImGuiInputTextFlags_CallbackCharFilter callback)
 | 
			
		||||
                static int FilterCasingSwap(ImGuiInputTextCallbackData* data)
 | 
			
		||||
                {
 | 
			
		||||
                    if (data->EventChar >= 'a' && data->EventChar <= 'z')       { data->EventChar = data->EventChar - 'A' - 'a'; } // Lowercase becomes uppercase
 | 
			
		||||
                    else if (data->EventChar >= 'A' && data->EventChar <= 'Z')  { data->EventChar = data->EventChar + 'a' - 'A'; } // Uppercase becomes lowercase
 | 
			
		||||
                    return 0;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Return 0 (pass) if the character is 'i' or 'm' or 'g' or 'u' or 'i', otherwise return 1 (filter out)
 | 
			
		||||
                static int FilterImGuiLetters(ImGuiInputTextCallbackData* data)
 | 
			
		||||
                {
 | 
			
		||||
                    if (data->EventChar < 256 && strchr("imgui", (char)data->EventChar))
 | 
			
		||||
@@ -1399,12 +1407,13 @@ static void ShowDemoWindowWidgets()
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            static char buf1[64] = ""; ImGui::InputText("default",     buf1, 64);
 | 
			
		||||
            static char buf2[64] = ""; ImGui::InputText("decimal",     buf2, 64, ImGuiInputTextFlags_CharsDecimal);
 | 
			
		||||
            static char buf3[64] = ""; ImGui::InputText("hexadecimal", buf3, 64, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase);
 | 
			
		||||
            static char buf4[64] = ""; ImGui::InputText("uppercase",   buf4, 64, ImGuiInputTextFlags_CharsUppercase);
 | 
			
		||||
            static char buf5[64] = ""; ImGui::InputText("no blank",    buf5, 64, ImGuiInputTextFlags_CharsNoBlank);
 | 
			
		||||
            static char buf6[64] = ""; ImGui::InputText("\"imgui\" letters", buf6, 64, ImGuiInputTextFlags_CallbackCharFilter, TextFilters::FilterImGuiLetters);
 | 
			
		||||
            static char buf1[32] = ""; ImGui::InputText("default",     buf1, 32);
 | 
			
		||||
            static char buf2[32] = ""; ImGui::InputText("decimal",     buf2, 32, ImGuiInputTextFlags_CharsDecimal);
 | 
			
		||||
            static char buf3[32] = ""; ImGui::InputText("hexadecimal", buf3, 32, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase);
 | 
			
		||||
            static char buf4[32] = ""; ImGui::InputText("uppercase",   buf4, 32, ImGuiInputTextFlags_CharsUppercase);
 | 
			
		||||
            static char buf5[32] = ""; ImGui::InputText("no blank",    buf5, 32, ImGuiInputTextFlags_CharsNoBlank);
 | 
			
		||||
            static char buf6[32] = ""; ImGui::InputText("casing swap", buf6, 32, ImGuiInputTextFlags_CallbackCharFilter, TextFilters::FilterCasingSwap); // Use CharFilter callback to replace characters.
 | 
			
		||||
            static char buf7[32] = ""; ImGui::InputText("\"imgui\"",   buf7, 32, ImGuiInputTextFlags_CallbackCharFilter, TextFilters::FilterImGuiLetters); // Use CharFilter callback to disable some characters.
 | 
			
		||||
            ImGui::TreePop();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3581,13 +3581,9 @@ static const char* DebugNodeTableGetSizingPolicyDesc(ImGuiTableFlags sizing_poli
 | 
			
		||||
 | 
			
		||||
void ImGui::DebugNodeTable(ImGuiTable* table)
 | 
			
		||||
{
 | 
			
		||||
    char buf[512];
 | 
			
		||||
    char* p = buf;
 | 
			
		||||
    const char* buf_end = buf + IM_ARRAYSIZE(buf);
 | 
			
		||||
    const bool is_active = (table->LastFrameActive >= ImGui::GetFrameCount() - 2); // Note that fully clipped early out scrolling tables will appear as inactive here.
 | 
			
		||||
    ImFormatString(p, buf_end - p, "Table 0x%08X (%d columns, in '%s')%s", table->ID, table->ColumnsCount, table->OuterWindow->Name, is_active ? "" : " *Inactive*");
 | 
			
		||||
    const bool is_active = (table->LastFrameActive >= GetFrameCount() - 2); // Note that fully clipped early out scrolling tables will appear as inactive here.
 | 
			
		||||
    if (!is_active) { PushStyleColor(ImGuiCol_Text, GetStyleColorVec4(ImGuiCol_TextDisabled)); }
 | 
			
		||||
    bool open = TreeNode(table, "%s", buf);
 | 
			
		||||
    bool open = TreeNode(table, "Table 0x%08X (%d columns, in '%s')%s", table->ID, table->ColumnsCount, table->OuterWindow->Name, is_active ? "" : " *Inactive*");
 | 
			
		||||
    if (!is_active) { PopStyleColor(); }
 | 
			
		||||
    if (IsItemHovered())
 | 
			
		||||
        GetForegroundDrawList()->AddRect(table->OuterRect.Min, table->OuterRect.Max, IM_COL32(255, 255, 0, 255));
 | 
			
		||||
@@ -3596,7 +3592,7 @@ void ImGui::DebugNodeTable(ImGuiTable* table)
 | 
			
		||||
    if (!open)
 | 
			
		||||
        return;
 | 
			
		||||
    if (table->InstanceCurrent > 0)
 | 
			
		||||
        ImGui::Text("** %d instances of same table! Some data below will refer to last instance.", table->InstanceCurrent + 1);
 | 
			
		||||
        Text("** %d instances of same table! Some data below will refer to last instance.", table->InstanceCurrent + 1);
 | 
			
		||||
    bool clear_settings = SmallButton("Clear settings");
 | 
			
		||||
    BulletText("OuterRect: Pos: (%.1f,%.1f) Size: (%.1f,%.1f) Sizing: '%s'", table->OuterRect.Min.x, table->OuterRect.Min.y, table->OuterRect.GetWidth(), table->OuterRect.GetHeight(), DebugNodeTableGetSizingPolicyDesc(table->Flags));
 | 
			
		||||
    BulletText("ColumnsGivenWidth: %.1f, ColumnsAutoFitWidth: %.1f, InnerWidth: %.1f%s", table->ColumnsGivenWidth, table->ColumnsAutoFitWidth, table->InnerWidth, table->InnerWidth == 0.0f ? " (auto)" : "");
 | 
			
		||||
@@ -3612,6 +3608,7 @@ void ImGui::DebugNodeTable(ImGuiTable* table)
 | 
			
		||||
    {
 | 
			
		||||
        ImGuiTableColumn* column = &table->Columns[n];
 | 
			
		||||
        const char* name = TableGetColumnName(table, n);
 | 
			
		||||
        char buf[512];
 | 
			
		||||
        ImFormatString(buf, IM_ARRAYSIZE(buf),
 | 
			
		||||
            "Column %d order %d '%s': offset %+.2f to %+.2f%s\n"
 | 
			
		||||
            "Enabled: %d, VisibleX/Y: %d/%d, RequestOutput: %d, SkipItems: %d, DrawChannels: %d,%d\n"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user