mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Merge remote-tracking branch 'origin' into 2015-06-multiline_textedit
Conflicts: imgui.cpp
This commit is contained in:
		
							
								
								
									
										140
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										140
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -6735,76 +6735,6 @@ void ImGuiTextEditState::RenderTextScrolledClipped(ImFont* font, float font_size
 | 
			
		||||
        LogText(pos, buf, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ImGui::InputFloat(const char* label, float *v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiState& g = *GImGui;
 | 
			
		||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
			
		||||
    if (window->SkipItems)
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
    const ImGuiStyle& style = g.Style;
 | 
			
		||||
    const float w = ImGui::CalcItemWidth();
 | 
			
		||||
    const ImVec2 label_size = CalcTextSize(label, NULL, true);
 | 
			
		||||
    const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y) + style.FramePadding*2.0f);
 | 
			
		||||
 | 
			
		||||
    ImGui::BeginGroup();
 | 
			
		||||
    ImGui::PushID(label);
 | 
			
		||||
    const ImVec2 button_sz = ImVec2(g.FontSize, g.FontSize) + style.FramePadding * 2;
 | 
			
		||||
    if (step > 0.0f)
 | 
			
		||||
        ImGui::PushItemWidth(ImMax(1.0f, w - (button_sz.x + style.ItemInnerSpacing.x)*2));
 | 
			
		||||
 | 
			
		||||
    char buf[64];
 | 
			
		||||
    if (decimal_precision < 0)
 | 
			
		||||
        ImFormatString(buf, IM_ARRAYSIZE(buf), "%f", *v);       // Ideally we'd have a minimum decimal precision of 1 to visually denote that it is a float, while hiding non-significant digits?
 | 
			
		||||
    else
 | 
			
		||||
        ImFormatString(buf, IM_ARRAYSIZE(buf), "%.*f", decimal_precision, *v);
 | 
			
		||||
    bool value_changed = false;
 | 
			
		||||
    const ImGuiInputTextFlags flags = extra_flags | (ImGuiInputTextFlags_CharsDecimal|ImGuiInputTextFlags_AutoSelectAll);
 | 
			
		||||
    if (ImGui::InputText("", buf, IM_ARRAYSIZE(buf), flags))
 | 
			
		||||
    {
 | 
			
		||||
        ApplyNumericalTextInput(buf, v);
 | 
			
		||||
        value_changed = true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Step buttons
 | 
			
		||||
    if (step > 0.0f)
 | 
			
		||||
    {
 | 
			
		||||
        ImGui::PopItemWidth();
 | 
			
		||||
        ImGui::SameLine(0, (int)style.ItemInnerSpacing.x);
 | 
			
		||||
        if (ButtonEx("-", button_sz, ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups))
 | 
			
		||||
        {
 | 
			
		||||
            *v -= g.IO.KeyCtrl && step_fast > 0.0f ? step_fast : step;
 | 
			
		||||
            value_changed = true;
 | 
			
		||||
        }
 | 
			
		||||
        ImGui::SameLine(0, (int)style.ItemInnerSpacing.x);
 | 
			
		||||
        if (ButtonEx("+", button_sz, ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups))
 | 
			
		||||
        {
 | 
			
		||||
            *v += g.IO.KeyCtrl && step_fast > 0.0f ? step_fast : step;
 | 
			
		||||
            value_changed = true;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    ImGui::PopID();
 | 
			
		||||
 | 
			
		||||
    if (label_size.x > 0)
 | 
			
		||||
    {
 | 
			
		||||
        ImGui::SameLine(0, (int)style.ItemInnerSpacing.x);
 | 
			
		||||
        RenderText(ImVec2(window->DC.CursorPos.x, window->DC.CursorPos.y + style.FramePadding.y), label);
 | 
			
		||||
        ItemSize(label_size, style.FramePadding.y);
 | 
			
		||||
    }
 | 
			
		||||
    ImGui::EndGroup();
 | 
			
		||||
 | 
			
		||||
    return value_changed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ImGui::InputInt(const char* label, int *v, int step, int step_fast, ImGuiInputTextFlags extra_flags)
 | 
			
		||||
{
 | 
			
		||||
    float f = (float)*v;
 | 
			
		||||
    const bool value_changed = ImGui::InputFloat(label, &f, (float)step, (float)step_fast, 0, extra_flags);
 | 
			
		||||
    if (value_changed)
 | 
			
		||||
        *v = (int)f;
 | 
			
		||||
    return value_changed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Public API to manipulate UTF-8 text
 | 
			
		||||
// We expose UTF-8 to the user (unlike the STB_TEXTEDIT_* functions which are manipulating wchar)
 | 
			
		||||
void ImGuiTextEditCallbackData::DeleteChars(int pos, int bytes_count)
 | 
			
		||||
@@ -7279,6 +7209,76 @@ bool ImGui::InputTextMultiline(const char* label, char* buf, size_t buf_size, co
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ImGui::InputFloat(const char* label, float *v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiState& g = *GImGui;
 | 
			
		||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
			
		||||
    if (window->SkipItems)
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
    const ImGuiStyle& style = g.Style;
 | 
			
		||||
    const float w = ImGui::CalcItemWidth();
 | 
			
		||||
    const ImVec2 label_size = CalcTextSize(label, NULL, true);
 | 
			
		||||
    const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y) + style.FramePadding*2.0f);
 | 
			
		||||
 | 
			
		||||
    ImGui::BeginGroup();
 | 
			
		||||
    ImGui::PushID(label);
 | 
			
		||||
    const ImVec2 button_sz = ImVec2(g.FontSize, g.FontSize) + style.FramePadding * 2;
 | 
			
		||||
    if (step > 0.0f)
 | 
			
		||||
        ImGui::PushItemWidth(ImMax(1.0f, w - (button_sz.x + style.ItemInnerSpacing.x)*2));
 | 
			
		||||
 | 
			
		||||
    char buf[64];
 | 
			
		||||
    if (decimal_precision < 0)
 | 
			
		||||
        ImFormatString(buf, IM_ARRAYSIZE(buf), "%f", *v);       // Ideally we'd have a minimum decimal precision of 1 to visually denote that it is a float, while hiding non-significant digits?
 | 
			
		||||
    else
 | 
			
		||||
        ImFormatString(buf, IM_ARRAYSIZE(buf), "%.*f", decimal_precision, *v);
 | 
			
		||||
    bool value_changed = false;
 | 
			
		||||
    const ImGuiInputTextFlags flags = extra_flags | (ImGuiInputTextFlags_CharsDecimal|ImGuiInputTextFlags_AutoSelectAll);
 | 
			
		||||
    if (ImGui::InputText("", buf, IM_ARRAYSIZE(buf), flags))
 | 
			
		||||
    {
 | 
			
		||||
        ApplyNumericalTextInput(buf, v);
 | 
			
		||||
        value_changed = true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Step buttons
 | 
			
		||||
    if (step > 0.0f)
 | 
			
		||||
    {
 | 
			
		||||
        ImGui::PopItemWidth();
 | 
			
		||||
        ImGui::SameLine(0, (int)style.ItemInnerSpacing.x);
 | 
			
		||||
        if (ButtonEx("-", button_sz, ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups))
 | 
			
		||||
        {
 | 
			
		||||
            *v -= g.IO.KeyCtrl && step_fast > 0.0f ? step_fast : step;
 | 
			
		||||
            value_changed = true;
 | 
			
		||||
        }
 | 
			
		||||
        ImGui::SameLine(0, (int)style.ItemInnerSpacing.x);
 | 
			
		||||
        if (ButtonEx("+", button_sz, ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups))
 | 
			
		||||
        {
 | 
			
		||||
            *v += g.IO.KeyCtrl && step_fast > 0.0f ? step_fast : step;
 | 
			
		||||
            value_changed = true;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    ImGui::PopID();
 | 
			
		||||
 | 
			
		||||
    if (label_size.x > 0)
 | 
			
		||||
    {
 | 
			
		||||
        ImGui::SameLine(0, (int)style.ItemInnerSpacing.x);
 | 
			
		||||
        RenderText(ImVec2(window->DC.CursorPos.x, window->DC.CursorPos.y + style.FramePadding.y), label);
 | 
			
		||||
        ItemSize(label_size, style.FramePadding.y);
 | 
			
		||||
    }
 | 
			
		||||
    ImGui::EndGroup();
 | 
			
		||||
 | 
			
		||||
    return value_changed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ImGui::InputInt(const char* label, int *v, int step, int step_fast, ImGuiInputTextFlags extra_flags)
 | 
			
		||||
{
 | 
			
		||||
    float f = (float)*v;
 | 
			
		||||
    const bool value_changed = ImGui::InputFloat(label, &f, (float)step, (float)step_fast, 0, extra_flags);
 | 
			
		||||
    if (value_changed)
 | 
			
		||||
        *v = (int)f;
 | 
			
		||||
    return value_changed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool InputFloatN(const char* label, float* v, int components, int decimal_precision, ImGuiInputTextFlags extra_flags)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiState& g = *GImGui;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user