mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-22 20:07:01 +00:00
Demo: Rearranged everything under Widgets in a more consistent way.
This commit is contained in:
parent
d888de4483
commit
be9628494a
376
imgui_demo.cpp
376
imgui_demo.cpp
@ -260,6 +260,133 @@ void ImGui::ShowTestWindow(bool* p_open)
|
|||||||
|
|
||||||
if (ImGui::CollapsingHeader("Widgets"))
|
if (ImGui::CollapsingHeader("Widgets"))
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if (ImGui::TreeNode("Basic"))
|
||||||
|
{
|
||||||
|
static int clicked = 0;
|
||||||
|
if (ImGui::Button("Button"))
|
||||||
|
clicked++;
|
||||||
|
if (clicked & 1)
|
||||||
|
{
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::Text("Thanks for clicking me!");
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool check = true;
|
||||||
|
ImGui::Checkbox("checkbox", &check);
|
||||||
|
|
||||||
|
static int e = 0;
|
||||||
|
ImGui::RadioButton("radio a", &e, 0); ImGui::SameLine();
|
||||||
|
ImGui::RadioButton("radio b", &e, 1); ImGui::SameLine();
|
||||||
|
ImGui::RadioButton("radio c", &e, 2);
|
||||||
|
|
||||||
|
// Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style.
|
||||||
|
for (int i = 0; i < 7; i++)
|
||||||
|
{
|
||||||
|
if (i > 0) ImGui::SameLine();
|
||||||
|
ImGui::PushID(i);
|
||||||
|
ImGui::PushStyleColor(ImGuiCol_Button, ImColor::HSV(i/7.0f, 0.6f, 0.6f));
|
||||||
|
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImColor::HSV(i/7.0f, 0.7f, 0.7f));
|
||||||
|
ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImColor::HSV(i/7.0f, 0.8f, 0.8f));
|
||||||
|
ImGui::Button("Click");
|
||||||
|
ImGui::PopStyleColor(3);
|
||||||
|
ImGui::PopID();
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::Text("Hover over me");
|
||||||
|
if (ImGui::IsItemHovered())
|
||||||
|
ImGui::SetTooltip("I am a tooltip");
|
||||||
|
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::Text("- or me");
|
||||||
|
if (ImGui::IsItemHovered())
|
||||||
|
{
|
||||||
|
ImGui::BeginTooltip();
|
||||||
|
ImGui::Text("I am a fancy tooltip");
|
||||||
|
static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f };
|
||||||
|
ImGui::PlotLines("Curve", arr, IM_ARRAYSIZE(arr));
|
||||||
|
ImGui::EndTooltip();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Testing IMGUI_ONCE_UPON_A_FRAME macro
|
||||||
|
//for (int i = 0; i < 5; i++)
|
||||||
|
//{
|
||||||
|
// IMGUI_ONCE_UPON_A_FRAME
|
||||||
|
// {
|
||||||
|
// ImGui::Text("This will be displayed only once.");
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
ImGui::Separator();
|
||||||
|
|
||||||
|
ImGui::LabelText("label", "Value");
|
||||||
|
|
||||||
|
static int item = 1;
|
||||||
|
ImGui::Combo("combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); // Combo using values packed in a single constant string (for really quick combo)
|
||||||
|
|
||||||
|
const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK" };
|
||||||
|
static int item2 = -1;
|
||||||
|
ImGui::Combo("combo scroll", &item2, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that.
|
||||||
|
|
||||||
|
{
|
||||||
|
static char str0[128] = "Hello, world!";
|
||||||
|
static int i0=123;
|
||||||
|
static float f0=0.001f;
|
||||||
|
ImGui::InputText("input text", str0, IM_ARRAYSIZE(str0));
|
||||||
|
ImGui::SameLine(); ShowHelpMarker("Hold SHIFT or use mouse to select text.\n" "CTRL+Left/Right to word jump.\n" "CTRL+A or double-click to select all.\n" "CTRL+X,CTRL+C,CTRL+V clipboard.\n" "CTRL+Z,CTRL+Y undo/redo.\n" "ESCAPE to revert.\n");
|
||||||
|
|
||||||
|
ImGui::InputInt("input int", &i0);
|
||||||
|
ImGui::SameLine(); ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n");
|
||||||
|
|
||||||
|
ImGui::InputFloat("input float", &f0, 0.01f, 1.0f);
|
||||||
|
|
||||||
|
static float vec4a[4] = { 0.10f, 0.20f, 0.30f, 0.44f };
|
||||||
|
ImGui::InputFloat3("input float3", vec4a);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
static int i1=50, i2=42;
|
||||||
|
ImGui::DragInt("drag int", &i1, 1);
|
||||||
|
ImGui::SameLine(); ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value.");
|
||||||
|
|
||||||
|
ImGui::DragInt("drag int 0..100", &i2, 1, 0, 100, "%.0f%%");
|
||||||
|
|
||||||
|
static float f1=1.00f, f2=0.0067f;
|
||||||
|
ImGui::DragFloat("drag float", &f1, 0.005f);
|
||||||
|
ImGui::DragFloat("drag small float", &f2, 0.0001f, 0.0f, 0.0f, "%.06f ns");
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
static int i1=0;
|
||||||
|
ImGui::SliderInt("slider int", &i1, -1, 3);
|
||||||
|
ImGui::SameLine(); ShowHelpMarker("CTRL+click to input value.");
|
||||||
|
|
||||||
|
static float f1=0.123f, f2=0.0f;
|
||||||
|
ImGui::SliderFloat("slider float", &f1, 0.0f, 1.0f, "ratio = %.3f");
|
||||||
|
ImGui::SliderFloat("slider log float", &f2, -10.0f, 10.0f, "%.4f", 3.0f);
|
||||||
|
static float angle = 0.0f;
|
||||||
|
ImGui::SliderAngle("slider angle", &angle);
|
||||||
|
}
|
||||||
|
|
||||||
|
static float col1[3] = { 1.0f,0.0f,0.2f };
|
||||||
|
static float col2[4] = { 0.4f,0.7f,0.0f,0.5f };
|
||||||
|
ImGui::ColorEdit3("color 1", col1);
|
||||||
|
ImGui::SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n");
|
||||||
|
|
||||||
|
ImGui::ColorEdit4("color 2", col2);
|
||||||
|
|
||||||
|
const char* listbox_items[] = { "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" };
|
||||||
|
static int listbox_item_current = 1;
|
||||||
|
ImGui::ListBox("listbox\n(single select)", &listbox_item_current, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
|
||||||
|
|
||||||
|
//static int listbox_item_current2 = 2;
|
||||||
|
//ImGui::PushItemWidth(-1);
|
||||||
|
//ImGui::ListBox("##listbox2", &listbox_item_current2, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
|
||||||
|
//ImGui::PopItemWidth();
|
||||||
|
|
||||||
|
ImGui::TreePop();
|
||||||
|
}
|
||||||
|
|
||||||
if (ImGui::TreeNode("Trees"))
|
if (ImGui::TreeNode("Trees"))
|
||||||
{
|
{
|
||||||
if (ImGui::TreeNode("Basic trees"))
|
if (ImGui::TreeNode("Basic trees"))
|
||||||
@ -353,12 +480,15 @@ void ImGui::ShowTestWindow(bool* p_open)
|
|||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ImGui::TreeNode("Text"))
|
||||||
|
{
|
||||||
if (ImGui::TreeNode("Colored Text"))
|
if (ImGui::TreeNode("Colored Text"))
|
||||||
{
|
{
|
||||||
// Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility.
|
// Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility.
|
||||||
ImGui::TextColored(ImVec4(1.0f,0.0f,1.0f,1.0f), "Pink");
|
ImGui::TextColored(ImVec4(1.0f,0.0f,1.0f,1.0f), "Pink");
|
||||||
ImGui::TextColored(ImVec4(1.0f,1.0f,0.0f,1.0f), "Yellow");
|
ImGui::TextColored(ImVec4(1.0f,1.0f,0.0f,1.0f), "Yellow");
|
||||||
ImGui::TextDisabled("Disabled");
|
ImGui::TextDisabled("Disabled");
|
||||||
|
ImGui::SameLine(); ShowHelpMarker("The TextDisabled color is stored in ImGuiStyle.");
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -394,17 +524,20 @@ void ImGui::ShowTestWindow(bool* p_open)
|
|||||||
{
|
{
|
||||||
// UTF-8 test with Japanese characters
|
// UTF-8 test with Japanese characters
|
||||||
// (needs a suitable font, try Arial Unicode or M+ fonts http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html)
|
// (needs a suitable font, try Arial Unicode or M+ fonts http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html)
|
||||||
// Most compiler appears to support UTF-8 in source code (with Visual Studio you need to save your file as 'UTF-8 without signature')
|
// - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8
|
||||||
// However for the sake for maximum portability here we are *not* including raw UTF-8 character in this source file, instead we encode the string with hexadecimal constants.
|
// - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. Visual Studio save your file as 'UTF-8 without signature')
|
||||||
// In your own application be reasonable and use UTF-8 in source or retrieve the data from file system!
|
// - HOWEVER, FOR THIS DEMO FILE, BECAUSE WE WANT TO SUPPORT COMPILER, WE ARE *NOT* INCLUDING RAW UTF-8 CHARACTERS IN THIS SOURCE FILE.
|
||||||
// Note that characters values are preserved even if the font cannot be displayed, so you can safely copy & paste garbled characters into another application.
|
// Instead we are encoding a few string with hexadecimal constants. Don't do this in your application!
|
||||||
|
// Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application.
|
||||||
ImGui::TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges.");
|
ImGui::TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges.");
|
||||||
ImGui::Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)");
|
ImGui::Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)");
|
||||||
ImGui::Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)");
|
ImGui::Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)");
|
||||||
static char buf[32] = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e";
|
static char buf[32] = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"; // "nihongo"
|
||||||
ImGui::InputText("UTF-8 input", buf, IM_ARRAYSIZE(buf));
|
ImGui::InputText("UTF-8 input", buf, IM_ARRAYSIZE(buf));
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
ImGui::TreePop();
|
||||||
|
}
|
||||||
|
|
||||||
if (ImGui::TreeNode("Images"))
|
if (ImGui::TreeNode("Images"))
|
||||||
{
|
{
|
||||||
@ -542,127 +675,71 @@ void ImGui::ShowTestWindow(bool* p_open)
|
|||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int clicked = 0;
|
|
||||||
if (ImGui::Button("Button"))
|
if (ImGui::TreeNode("Plots widgets"))
|
||||||
clicked++;
|
|
||||||
if (clicked & 1)
|
|
||||||
{
|
{
|
||||||
ImGui::SameLine();
|
static bool animate = true;
|
||||||
ImGui::Text("Thanks for clicking me!");
|
ImGui::Checkbox("Animate", &animate);
|
||||||
}
|
|
||||||
|
|
||||||
static bool check = true;
|
|
||||||
ImGui::Checkbox("checkbox", &check);
|
|
||||||
|
|
||||||
static int e = 0;
|
|
||||||
ImGui::RadioButton("radio a", &e, 0); ImGui::SameLine();
|
|
||||||
ImGui::RadioButton("radio b", &e, 1); ImGui::SameLine();
|
|
||||||
ImGui::RadioButton("radio c", &e, 2);
|
|
||||||
|
|
||||||
// Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style.
|
|
||||||
for (int i = 0; i < 7; i++)
|
|
||||||
{
|
|
||||||
if (i > 0) ImGui::SameLine();
|
|
||||||
ImGui::PushID(i);
|
|
||||||
ImGui::PushStyleColor(ImGuiCol_Button, ImColor::HSV(i/7.0f, 0.6f, 0.6f));
|
|
||||||
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImColor::HSV(i/7.0f, 0.7f, 0.7f));
|
|
||||||
ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImColor::HSV(i/7.0f, 0.8f, 0.8f));
|
|
||||||
ImGui::Button("Click");
|
|
||||||
ImGui::PopStyleColor(3);
|
|
||||||
ImGui::PopID();
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::Text("Hover over me");
|
|
||||||
if (ImGui::IsItemHovered())
|
|
||||||
ImGui::SetTooltip("I am a tooltip");
|
|
||||||
|
|
||||||
ImGui::SameLine();
|
|
||||||
ImGui::Text("- or me");
|
|
||||||
if (ImGui::IsItemHovered())
|
|
||||||
{
|
|
||||||
ImGui::BeginTooltip();
|
|
||||||
ImGui::Text("I am a fancy tooltip");
|
|
||||||
static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f };
|
static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f };
|
||||||
ImGui::PlotLines("Curve", arr, IM_ARRAYSIZE(arr));
|
ImGui::PlotLines("Frame Times", arr, IM_ARRAYSIZE(arr));
|
||||||
ImGui::EndTooltip();
|
|
||||||
|
// Create a dummy array of contiguous float values to plot
|
||||||
|
// Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter.
|
||||||
|
static float values[90] = { 0 };
|
||||||
|
static int values_offset = 0;
|
||||||
|
static float refresh_time = 0.0f;
|
||||||
|
if (!animate || refresh_time == 0.0f)
|
||||||
|
refresh_time = ImGui::GetTime();
|
||||||
|
while (refresh_time < ImGui::GetTime()) // Create dummy data at fixed 60 hz rate for the demo
|
||||||
|
{
|
||||||
|
static float phase = 0.0f;
|
||||||
|
values[values_offset] = cosf(phase);
|
||||||
|
values_offset = (values_offset+1) % IM_ARRAYSIZE(values);
|
||||||
|
phase += 0.10f*values_offset;
|
||||||
|
refresh_time += 1.0f/60.0f;
|
||||||
}
|
}
|
||||||
|
ImGui::PlotLines("Lines", values, IM_ARRAYSIZE(values), values_offset, "avg 0.0", -1.0f, 1.0f, ImVec2(0,80));
|
||||||
|
ImGui::PlotHistogram("Histogram", arr, IM_ARRAYSIZE(arr), 0, NULL, 0.0f, 1.0f, ImVec2(0,80));
|
||||||
|
|
||||||
// Testing IMGUI_ONCE_UPON_A_FRAME macro
|
// Use functions to generate output
|
||||||
//for (int i = 0; i < 5; i++)
|
// FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count.
|
||||||
//{
|
struct Funcs
|
||||||
// IMGUI_ONCE_UPON_A_FRAME
|
{
|
||||||
// {
|
static float Sin(void*, int i) { return sinf(i * 0.1f); }
|
||||||
// ImGui::Text("This will be displayed only once.");
|
static float Saw(void*, int i) { return (i & 1) ? 1.0f : -1.0f; }
|
||||||
// }
|
};
|
||||||
//}
|
static int func_type = 0, display_count = 70;
|
||||||
|
ImGui::Separator();
|
||||||
|
ImGui::PushItemWidth(100); ImGui::Combo("func", &func_type, "Sin\0Saw\0"); ImGui::PopItemWidth();
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::SliderInt("Sample count", &display_count, 1, 400);
|
||||||
|
float (*func)(void*, int) = (func_type == 0) ? Funcs::Sin : Funcs::Saw;
|
||||||
|
ImGui::PlotLines("Lines", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80));
|
||||||
|
ImGui::PlotHistogram("Histogram", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80));
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|
||||||
ImGui::LabelText("label", "Value");
|
// Animate a simple progress bar
|
||||||
|
static float progress = 0.0f, progress_dir = 1.0f;
|
||||||
static int item = 1;
|
if (animate)
|
||||||
ImGui::Combo("combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); // Combo using values packed in a single constant string (for really quick combo)
|
|
||||||
|
|
||||||
const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK" };
|
|
||||||
static int item2 = -1;
|
|
||||||
ImGui::Combo("combo scroll", &item2, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that.
|
|
||||||
|
|
||||||
{
|
{
|
||||||
static char str0[128] = "Hello, world!";
|
progress += progress_dir * 0.4f * ImGui::GetIO().DeltaTime;
|
||||||
static int i0=123;
|
if (progress >= +1.1f) { progress = +1.1f; progress_dir *= -1.0f; }
|
||||||
static float f0=0.001f;
|
if (progress <= -0.1f) { progress = -0.1f; progress_dir *= -1.0f; }
|
||||||
ImGui::InputText("input text", str0, IM_ARRAYSIZE(str0));
|
|
||||||
ImGui::SameLine(); ShowHelpMarker("Hold SHIFT or use mouse to select text.\n" "CTRL+Left/Right to word jump.\n" "CTRL+A or double-click to select all.\n" "CTRL+X,CTRL+C,CTRL+V clipboard.\n" "CTRL+Z,CTRL+Y undo/redo.\n" "ESCAPE to revert.\n");
|
|
||||||
|
|
||||||
ImGui::InputInt("input int", &i0);
|
|
||||||
ImGui::SameLine(); ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n");
|
|
||||||
|
|
||||||
ImGui::InputFloat("input float", &f0, 0.01f, 1.0f);
|
|
||||||
|
|
||||||
static float vec4a[4] = { 0.10f, 0.20f, 0.30f, 0.44f };
|
|
||||||
ImGui::InputFloat3("input float3", vec4a);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
// Typically we would use ImVec2(-1.0f,0.0f) to use all available width, or ImVec2(width,0.0f) for a specified width. ImVec2(0.0f,0.0f) uses ItemWidth.
|
||||||
static int i1=50, i2=42;
|
ImGui::ProgressBar(progress, ImVec2(0.0f,0.0f));
|
||||||
ImGui::DragInt("drag int", &i1, 1);
|
ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
|
||||||
ImGui::SameLine(); ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value.");
|
ImGui::Text("Progress Bar");
|
||||||
|
|
||||||
ImGui::DragInt("drag int 0..100", &i2, 1, 0, 100, "%.0f%%");
|
float progress_saturated = (progress < 0.0f) ? 0.0f : (progress > 1.0f) ? 1.0f : progress;
|
||||||
|
char buf[32];
|
||||||
static float f1=1.00f, f2=0.0067f;
|
sprintf(buf, "%d/%d", (int)(progress_saturated*1753), 1753);
|
||||||
ImGui::DragFloat("drag float", &f1, 0.005f);
|
ImGui::ProgressBar(progress, ImVec2(0.f,0.f), buf);
|
||||||
ImGui::DragFloat("drag small float", &f2, 0.0001f, 0.0f, 0.0f, "%.06f ns");
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
|
||||||
static int i1=0;
|
|
||||||
ImGui::SliderInt("slider int", &i1, -1, 3);
|
|
||||||
ImGui::SameLine(); ShowHelpMarker("CTRL+click to input value.");
|
|
||||||
|
|
||||||
static float f1=0.123f, f2=0.0f;
|
|
||||||
ImGui::SliderFloat("slider float", &f1, 0.0f, 1.0f, "ratio = %.3f");
|
|
||||||
ImGui::SliderFloat("slider log float", &f2, -10.0f, 10.0f, "%.4f", 3.0f);
|
|
||||||
static float angle = 0.0f;
|
|
||||||
ImGui::SliderAngle("slider angle", &angle);
|
|
||||||
}
|
|
||||||
|
|
||||||
static float col1[3] = { 1.0f,0.0f,0.2f };
|
|
||||||
static float col2[4] = { 0.4f,0.7f,0.0f,0.5f };
|
|
||||||
ImGui::ColorEdit3("color 1", col1);
|
|
||||||
ImGui::SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n");
|
|
||||||
|
|
||||||
ImGui::ColorEdit4("color 2", col2);
|
|
||||||
|
|
||||||
const char* listbox_items[] = { "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" };
|
|
||||||
static int listbox_item_current = 1;
|
|
||||||
ImGui::ListBox("listbox\n(single select)", &listbox_item_current, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
|
|
||||||
|
|
||||||
//static int listbox_item_current2 = 2;
|
|
||||||
//ImGui::PushItemWidth(-1);
|
|
||||||
//ImGui::ListBox("##listbox2", &listbox_item_current2, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
|
|
||||||
//ImGui::PopItemWidth();
|
|
||||||
|
|
||||||
if (ImGui::TreeNode("Color/Picker Widgets"))
|
if (ImGui::TreeNode("Color/Picker Widgets"))
|
||||||
{
|
{
|
||||||
static ImVec4 color = ImColor(114, 144, 154, 200);
|
static ImVec4 color = ImColor(114, 144, 154, 200);
|
||||||
@ -786,21 +863,15 @@ void ImGui::ShowTestWindow(bool* p_open)
|
|||||||
|
|
||||||
if (ImGui::TreeNode("Range Widgets"))
|
if (ImGui::TreeNode("Range Widgets"))
|
||||||
{
|
{
|
||||||
ImGui::Unindent();
|
|
||||||
|
|
||||||
static float begin = 10, end = 90;
|
static float begin = 10, end = 90;
|
||||||
static int begin_i = 100, end_i = 1000;
|
static int begin_i = 100, end_i = 1000;
|
||||||
ImGui::DragFloatRange2("range", &begin, &end, 0.25f, 0.0f, 100.0f, "Min: %.1f %%", "Max: %.1f %%");
|
ImGui::DragFloatRange2("range", &begin, &end, 0.25f, 0.0f, 100.0f, "Min: %.1f %%", "Max: %.1f %%");
|
||||||
ImGui::DragIntRange2("range int (no bounds)", &begin_i, &end_i, 5, 0, 0, "Min: %.0f units", "Max: %.0f units");
|
ImGui::DragIntRange2("range int (no bounds)", &begin_i, &end_i, 5, 0, 0, "Min: %.0f units", "Max: %.0f units");
|
||||||
|
|
||||||
ImGui::Indent();
|
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ImGui::TreeNode("Multi-component Widgets"))
|
if (ImGui::TreeNode("Multi-component Widgets"))
|
||||||
{
|
{
|
||||||
ImGui::Unindent();
|
|
||||||
|
|
||||||
static float vec4f[4] = { 0.10f, 0.20f, 0.30f, 0.44f };
|
static float vec4f[4] = { 0.10f, 0.20f, 0.30f, 0.44f };
|
||||||
static int vec4i[4] = { 1, 5, 100, 255 };
|
static int vec4i[4] = { 1, 5, 100, 255 };
|
||||||
|
|
||||||
@ -827,13 +898,11 @@ void ImGui::ShowTestWindow(bool* p_open)
|
|||||||
ImGui::DragInt4("drag int4", vec4i, 1, 0, 255);
|
ImGui::DragInt4("drag int4", vec4i, 1, 0, 255);
|
||||||
ImGui::SliderInt4("slider int4", vec4i, 0, 255);
|
ImGui::SliderInt4("slider int4", vec4i, 0, 255);
|
||||||
|
|
||||||
ImGui::Indent();
|
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ImGui::TreeNode("Vertical Sliders"))
|
if (ImGui::TreeNode("Vertical Sliders"))
|
||||||
{
|
{
|
||||||
ImGui::Unindent();
|
|
||||||
const float spacing = 4;
|
const float spacing = 4;
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(spacing, spacing));
|
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(spacing, spacing));
|
||||||
|
|
||||||
@ -893,75 +962,10 @@ void ImGui::ShowTestWindow(bool* p_open)
|
|||||||
}
|
}
|
||||||
ImGui::PopID();
|
ImGui::PopID();
|
||||||
ImGui::PopStyleVar();
|
ImGui::PopStyleVar();
|
||||||
|
|
||||||
ImGui::Indent();
|
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ImGui::CollapsingHeader("Plots widgets"))
|
|
||||||
{
|
|
||||||
static bool animate = true;
|
|
||||||
ImGui::Checkbox("Animate", &animate);
|
|
||||||
|
|
||||||
static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f };
|
|
||||||
ImGui::PlotLines("Frame Times", arr, IM_ARRAYSIZE(arr));
|
|
||||||
|
|
||||||
// Create a dummy array of contiguous float values to plot
|
|
||||||
// Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter.
|
|
||||||
static float values[90] = { 0 };
|
|
||||||
static int values_offset = 0;
|
|
||||||
static float refresh_time = 0.0f;
|
|
||||||
if (!animate || refresh_time == 0.0f)
|
|
||||||
refresh_time = ImGui::GetTime();
|
|
||||||
while (refresh_time < ImGui::GetTime()) // Create dummy data at fixed 60 hz rate for the demo
|
|
||||||
{
|
|
||||||
static float phase = 0.0f;
|
|
||||||
values[values_offset] = cosf(phase);
|
|
||||||
values_offset = (values_offset+1) % IM_ARRAYSIZE(values);
|
|
||||||
phase += 0.10f*values_offset;
|
|
||||||
refresh_time += 1.0f/60.0f;
|
|
||||||
}
|
|
||||||
ImGui::PlotLines("Lines", values, IM_ARRAYSIZE(values), values_offset, "avg 0.0", -1.0f, 1.0f, ImVec2(0,80));
|
|
||||||
ImGui::PlotHistogram("Histogram", arr, IM_ARRAYSIZE(arr), 0, NULL, 0.0f, 1.0f, ImVec2(0,80));
|
|
||||||
|
|
||||||
// Use functions to generate output
|
|
||||||
// FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count.
|
|
||||||
struct Funcs
|
|
||||||
{
|
|
||||||
static float Sin(void*, int i) { return sinf(i * 0.1f); }
|
|
||||||
static float Saw(void*, int i) { return (i & 1) ? 1.0f : -1.0f; }
|
|
||||||
};
|
|
||||||
static int func_type = 0, display_count = 70;
|
|
||||||
ImGui::Separator();
|
|
||||||
ImGui::PushItemWidth(100); ImGui::Combo("func", &func_type, "Sin\0Saw\0"); ImGui::PopItemWidth();
|
|
||||||
ImGui::SameLine();
|
|
||||||
ImGui::SliderInt("Sample count", &display_count, 1, 400);
|
|
||||||
float (*func)(void*, int) = (func_type == 0) ? Funcs::Sin : Funcs::Saw;
|
|
||||||
ImGui::PlotLines("Lines", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80));
|
|
||||||
ImGui::PlotHistogram("Histogram", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80));
|
|
||||||
ImGui::Separator();
|
|
||||||
|
|
||||||
// Animate a simple progress bar
|
|
||||||
static float progress = 0.0f, progress_dir = 1.0f;
|
|
||||||
if (animate)
|
|
||||||
{
|
|
||||||
progress += progress_dir * 0.4f * ImGui::GetIO().DeltaTime;
|
|
||||||
if (progress >= +1.1f) { progress = +1.1f; progress_dir *= -1.0f; }
|
|
||||||
if (progress <= -0.1f) { progress = -0.1f; progress_dir *= -1.0f; }
|
|
||||||
}
|
|
||||||
|
|
||||||
// Typically we would use ImVec2(-1.0f,0.0f) to use all available width, or ImVec2(width,0.0f) for a specified width. ImVec2(0.0f,0.0f) uses ItemWidth.
|
|
||||||
ImGui::ProgressBar(progress, ImVec2(0.0f,0.0f));
|
|
||||||
ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
|
|
||||||
ImGui::Text("Progress Bar");
|
|
||||||
|
|
||||||
float progress_saturated = (progress < 0.0f) ? 0.0f : (progress > 1.0f) ? 1.0f : progress;
|
|
||||||
char buf[32];
|
|
||||||
sprintf(buf, "%d/%d", (int)(progress_saturated*1753), 1753);
|
|
||||||
ImGui::ProgressBar(progress, ImVec2(0.f,0.f), buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::CollapsingHeader("Layout"))
|
if (ImGui::CollapsingHeader("Layout"))
|
||||||
{
|
{
|
||||||
if (ImGui::TreeNode("Child regions"))
|
if (ImGui::TreeNode("Child regions"))
|
||||||
|
Loading…
Reference in New Issue
Block a user