Updated ImGui.
This commit is contained in:
parent
848309f10f
commit
1ab3a2b516
40
3rdparty/dear-imgui/imgui.cpp
vendored
40
3rdparty/dear-imgui/imgui.cpp
vendored
@ -857,7 +857,6 @@ static const ImU64 IM_U64_MAX = 0xFFFFFFFFFFFFFFFFull;
|
|||||||
|
|
||||||
static bool IsKeyPressedMap(ImGuiKey key, bool repeat = true);
|
static bool IsKeyPressedMap(ImGuiKey key, bool repeat = true);
|
||||||
|
|
||||||
static ImFont* GetDefaultFont();
|
|
||||||
static void SetCurrentWindow(ImGuiWindow* window);
|
static void SetCurrentWindow(ImGuiWindow* window);
|
||||||
static void SetWindowScrollX(ImGuiWindow* window, float new_scroll_x);
|
static void SetWindowScrollX(ImGuiWindow* window, float new_scroll_x);
|
||||||
static void SetWindowScrollY(ImGuiWindow* window, float new_scroll_y);
|
static void SetWindowScrollY(ImGuiWindow* window, float new_scroll_y);
|
||||||
@ -866,6 +865,7 @@ static void SetWindowSize(ImGuiWindow* window, const ImVec2& size, I
|
|||||||
static void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond);
|
static void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond);
|
||||||
static void FindHoveredWindow();
|
static void FindHoveredWindow();
|
||||||
static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags);
|
static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags);
|
||||||
|
static ImGuiWindowSettings* CreateNewWindowSettings(const char* name);
|
||||||
static void CheckStacksSize(ImGuiWindow* window, bool write);
|
static void CheckStacksSize(ImGuiWindow* window, bool write);
|
||||||
static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window, bool snap_on_edges);
|
static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window, bool snap_on_edges);
|
||||||
|
|
||||||
@ -873,12 +873,8 @@ static void AddDrawListToDrawData(ImVector<ImDrawList*>* out_list, I
|
|||||||
static void AddWindowToDrawData(ImVector<ImDrawList*>* out_list, ImGuiWindow* window);
|
static void AddWindowToDrawData(ImVector<ImDrawList*>* out_list, ImGuiWindow* window);
|
||||||
static void AddWindowToSortedBuffer(ImVector<ImGuiWindow*>* out_sorted_windows, ImGuiWindow* window);
|
static void AddWindowToSortedBuffer(ImVector<ImGuiWindow*>* out_sorted_windows, ImGuiWindow* window);
|
||||||
|
|
||||||
static ImGuiWindowSettings* AddWindowSettings(const char* name);
|
|
||||||
|
|
||||||
static ImRect GetViewportRect();
|
static ImRect GetViewportRect();
|
||||||
|
|
||||||
static void ClosePopupToLevel(int remaining);
|
|
||||||
|
|
||||||
static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags flags, ImGuiTextEditCallback callback, void* user_data);
|
static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags flags, ImGuiTextEditCallback callback, void* user_data);
|
||||||
static int InputTextCalcTextLenAndLineCount(const char* text_begin, const char** out_text_end);
|
static int InputTextCalcTextLenAndLineCount(const char* text_begin, const char** out_text_end);
|
||||||
static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining = NULL, ImVec2* out_offset = NULL, bool stop_on_new_line = false);
|
static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining = NULL, ImVec2* out_offset = NULL, bool stop_on_new_line = false);
|
||||||
@ -1700,7 +1696,7 @@ void ImGuiStorage::BuildSortByKey()
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
if (Data.Size > 1)
|
if (Data.Size > 1)
|
||||||
qsort(Data.Data, (size_t)Data.Size, sizeof(Pair), StaticFunc::PairCompareByID);
|
ImQsort(Data.Data, (size_t)Data.Size, sizeof(Pair), StaticFunc::PairCompareByID);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ImGuiStorage::GetInt(ImGuiID key, int default_val) const
|
int ImGuiStorage::GetInt(ImGuiID key, int default_val) const
|
||||||
@ -3201,11 +3197,11 @@ void ImGui::NavUpdateWindowingList()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (g.NavWindowingList == NULL)
|
if (g.NavWindowingList == NULL)
|
||||||
g.NavWindowingList = FindWindowByName("###NavWindowList");
|
g.NavWindowingList = FindWindowByName("###NavWindowingList");
|
||||||
SetNextWindowSizeConstraints(ImVec2(g.IO.DisplaySize.x * 0.20f, g.IO.DisplaySize.y * 0.20f), ImVec2(FLT_MAX, FLT_MAX));
|
SetNextWindowSizeConstraints(ImVec2(g.IO.DisplaySize.x * 0.20f, g.IO.DisplaySize.y * 0.20f), ImVec2(FLT_MAX, FLT_MAX));
|
||||||
SetNextWindowPos(g.IO.DisplaySize * 0.5f, ImGuiCond_Always, ImVec2(0.5f, 0.5f));
|
SetNextWindowPos(g.IO.DisplaySize * 0.5f, ImGuiCond_Always, ImVec2(0.5f, 0.5f));
|
||||||
PushStyleVar(ImGuiStyleVar_WindowPadding, g.Style.WindowPadding * 2.0f);
|
PushStyleVar(ImGuiStyleVar_WindowPadding, g.Style.WindowPadding * 2.0f);
|
||||||
Begin("###NavWindowList", NULL, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_AlwaysAutoResize);
|
Begin("###NavWindowingList", NULL, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_AlwaysAutoResize);
|
||||||
for (int n = g.Windows.Size - 1; n >= 0; n--)
|
for (int n = g.Windows.Size - 1; n >= 0; n--)
|
||||||
{
|
{
|
||||||
ImGuiWindow* window = g.Windows[n];
|
ImGuiWindow* window = g.Windows[n];
|
||||||
@ -3969,7 +3965,7 @@ static void* SettingsHandlerWindow_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*
|
|||||||
{
|
{
|
||||||
ImGuiWindowSettings* settings = ImGui::FindWindowSettings(ImHash(name, 0));
|
ImGuiWindowSettings* settings = ImGui::FindWindowSettings(ImHash(name, 0));
|
||||||
if (!settings)
|
if (!settings)
|
||||||
settings = AddWindowSettings(name);
|
settings = CreateNewWindowSettings(name);
|
||||||
return (void*)settings;
|
return (void*)settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3996,7 +3992,7 @@ static void SettingsHandlerWindow_WriteAll(ImGuiContext* imgui_ctx, ImGuiSetting
|
|||||||
ImGuiWindowSettings* settings = (window->SettingsIdx != -1) ? &g.SettingsWindows[window->SettingsIdx] : ImGui::FindWindowSettings(window->ID);
|
ImGuiWindowSettings* settings = (window->SettingsIdx != -1) ? &g.SettingsWindows[window->SettingsIdx] : ImGui::FindWindowSettings(window->ID);
|
||||||
if (!settings)
|
if (!settings)
|
||||||
{
|
{
|
||||||
settings = AddWindowSettings(window->Name);
|
settings = CreateNewWindowSettings(window->Name);
|
||||||
window->SettingsIdx = g.SettingsWindows.index_from_pointer(settings);
|
window->SettingsIdx = g.SettingsWindows.index_from_pointer(settings);
|
||||||
}
|
}
|
||||||
IM_ASSERT(settings->ID == window->ID);
|
IM_ASSERT(settings->ID == window->ID);
|
||||||
@ -4107,7 +4103,7 @@ ImGuiWindowSettings* ImGui::FindWindowSettings(ImGuiID id)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ImGuiWindowSettings* AddWindowSettings(const char* name)
|
static ImGuiWindowSettings* CreateNewWindowSettings(const char* name)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
g.SettingsWindows.push_back(ImGuiWindowSettings());
|
g.SettingsWindows.push_back(ImGuiWindowSettings());
|
||||||
@ -4265,7 +4261,7 @@ static void AddWindowToSortedBuffer(ImVector<ImGuiWindow*>* out_sorted_windows,
|
|||||||
{
|
{
|
||||||
int count = window->DC.ChildWindows.Size;
|
int count = window->DC.ChildWindows.Size;
|
||||||
if (count > 1)
|
if (count > 1)
|
||||||
qsort(window->DC.ChildWindows.begin(), (size_t)count, sizeof(ImGuiWindow*), ChildWindowComparer);
|
ImQsort(window->DC.ChildWindows.begin(), (size_t)count, sizeof(ImGuiWindow*), ChildWindowComparer);
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
ImGuiWindow* child = window->DC.ChildWindows[i];
|
ImGuiWindow* child = window->DC.ChildWindows[i];
|
||||||
@ -5352,14 +5348,14 @@ ImGuiWindow* ImGui::GetFrontMostPopupModal()
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ClosePopupToLevel(int remaining)
|
void ImGui::ClosePopupToLevel(int remaining)
|
||||||
{
|
{
|
||||||
IM_ASSERT(remaining >= 0);
|
IM_ASSERT(remaining >= 0);
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
ImGuiWindow* focus_window = (remaining > 0) ? g.OpenPopupStack[remaining-1].Window : g.OpenPopupStack[0].ParentWindow;
|
ImGuiWindow* focus_window = (remaining > 0) ? g.OpenPopupStack[remaining-1].Window : g.OpenPopupStack[0].ParentWindow;
|
||||||
if (g.NavLayer == 0)
|
if (g.NavLayer == 0)
|
||||||
focus_window = NavRestoreLastChildNavWindow(focus_window);
|
focus_window = NavRestoreLastChildNavWindow(focus_window);
|
||||||
ImGui::FocusWindow(focus_window);
|
FocusWindow(focus_window);
|
||||||
focus_window->DC.NavHideHighlightOneFrame = true;
|
focus_window->DC.NavHideHighlightOneFrame = true;
|
||||||
g.OpenPopupStack.resize(remaining);
|
g.OpenPopupStack.resize(remaining);
|
||||||
}
|
}
|
||||||
@ -6462,7 +6458,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
const bool dim_bg_for_window_list = g.NavWindowingTarget && (window == g.NavWindowingTarget->RootWindow);
|
const bool dim_bg_for_window_list = g.NavWindowingTarget && (window == g.NavWindowingTarget->RootWindow);
|
||||||
if (dim_bg_for_modal || dim_bg_for_window_list)
|
if (dim_bg_for_modal || dim_bg_for_window_list)
|
||||||
{
|
{
|
||||||
const ImU32 dim_bg_col = GetColorU32(dim_bg_for_modal ? ImGuiCol_ModalWindowDimBg : ImGuiCol_NavWindowListDimBg, g.DimBgRatio);
|
const ImU32 dim_bg_col = GetColorU32(dim_bg_for_modal ? ImGuiCol_ModalWindowDimBg : ImGuiCol_NavWindowingDimBg, g.DimBgRatio);
|
||||||
window->DrawList->AddRectFilled(viewport_rect.Min, viewport_rect.Max, dim_bg_col);
|
window->DrawList->AddRectFilled(viewport_rect.Min, viewport_rect.Max, dim_bg_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6472,7 +6468,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
ImRect bb = window->Rect();
|
ImRect bb = window->Rect();
|
||||||
bb.Expand(g.FontSize);
|
bb.Expand(g.FontSize);
|
||||||
if (!bb.Contains(viewport_rect)) // Avoid drawing if the window covers all the viewport anyway
|
if (!bb.Contains(viewport_rect)) // Avoid drawing if the window covers all the viewport anyway
|
||||||
window->DrawList->AddRectFilled(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowListHighlight, g.NavWindowingHighlightAlpha * 0.25f), g.Style.WindowRounding);
|
window->DrawList->AddRectFilled(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowingHighlight, g.NavWindowingHighlightAlpha * 0.25f), g.Style.WindowRounding);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw window + handle manual resize
|
// Draw window + handle manual resize
|
||||||
@ -6559,7 +6555,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
bb.Expand(-g.FontSize - 1.0f);
|
bb.Expand(-g.FontSize - 1.0f);
|
||||||
rounding = window->WindowRounding;
|
rounding = window->WindowRounding;
|
||||||
}
|
}
|
||||||
window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowListHighlight, g.NavWindowingHighlightAlpha), rounding, ~0, 3.0f);
|
window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowingHighlight, g.NavWindowingHighlightAlpha), rounding, ~0, 3.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store a backup of SizeFull which we will use next frame to decide if we need scrollbars.
|
// Store a backup of SizeFull which we will use next frame to decide if we need scrollbars.
|
||||||
@ -7006,12 +7002,6 @@ float ImGui::CalcItemWidth()
|
|||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ImFont* GetDefaultFont()
|
|
||||||
{
|
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
return g.IO.FontDefault ? g.IO.FontDefault : g.IO.Fonts->Fonts[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
void ImGui::SetCurrentFont(ImFont* font)
|
void ImGui::SetCurrentFont(ImFont* font)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
@ -7258,8 +7248,8 @@ const char* ImGui::GetStyleColorName(ImGuiCol idx)
|
|||||||
case ImGuiCol_TextSelectedBg: return "TextSelectedBg";
|
case ImGuiCol_TextSelectedBg: return "TextSelectedBg";
|
||||||
case ImGuiCol_DragDropTarget: return "DragDropTarget";
|
case ImGuiCol_DragDropTarget: return "DragDropTarget";
|
||||||
case ImGuiCol_NavHighlight: return "NavHighlight";
|
case ImGuiCol_NavHighlight: return "NavHighlight";
|
||||||
case ImGuiCol_NavWindowListHighlight: return "NavWindowListHighlight";
|
case ImGuiCol_NavWindowingHighlight: return "NavWindowingHighlight";
|
||||||
case ImGuiCol_NavWindowListDimBg: return "NavWindowListDimBg";
|
case ImGuiCol_NavWindowingDimBg: return "NavWindowingDimBg";
|
||||||
case ImGuiCol_ModalWindowDimBg: return "ModalWindowDimBg";
|
case ImGuiCol_ModalWindowDimBg: return "ModalWindowDimBg";
|
||||||
}
|
}
|
||||||
IM_ASSERT(0);
|
IM_ASSERT(0);
|
||||||
|
4
3rdparty/dear-imgui/imgui.h
vendored
4
3rdparty/dear-imgui/imgui.h
vendored
@ -897,8 +897,8 @@ enum ImGuiCol_
|
|||||||
ImGuiCol_TextSelectedBg,
|
ImGuiCol_TextSelectedBg,
|
||||||
ImGuiCol_DragDropTarget,
|
ImGuiCol_DragDropTarget,
|
||||||
ImGuiCol_NavHighlight, // Gamepad/keyboard: current highlighted item
|
ImGuiCol_NavHighlight, // Gamepad/keyboard: current highlighted item
|
||||||
ImGuiCol_NavWindowListHighlight,// Highlight window when using CTRL+TAB
|
ImGuiCol_NavWindowingHighlight, // Highlight window when using CTRL+TAB
|
||||||
ImGuiCol_NavWindowListDimBg, // Darken/colorize entire screen behind the CTRL+TAB window list, when active
|
ImGuiCol_NavWindowingDimBg, // Darken/colorize entire screen behind the CTRL+TAB window list, when active
|
||||||
ImGuiCol_ModalWindowDimBg, // Darken/colorize entire screen behind a modal window, when one is active
|
ImGuiCol_ModalWindowDimBg, // Darken/colorize entire screen behind a modal window, when one is active
|
||||||
ImGuiCol_COUNT
|
ImGuiCol_COUNT
|
||||||
|
|
||||||
|
507
3rdparty/dear-imgui/imgui_demo.cpp
vendored
507
3rdparty/dear-imgui/imgui_demo.cpp
vendored
@ -77,6 +77,7 @@
|
|||||||
#if !defined(IMGUI_DISABLE_DEMO_WINDOWS)
|
#if !defined(IMGUI_DISABLE_DEMO_WINDOWS)
|
||||||
|
|
||||||
// Forward Declarations
|
// Forward Declarations
|
||||||
|
static void ShowExampleAppMainMenuBar();
|
||||||
static void ShowExampleAppConsole(bool* p_open);
|
static void ShowExampleAppConsole(bool* p_open);
|
||||||
static void ShowExampleAppLog(bool* p_open);
|
static void ShowExampleAppLog(bool* p_open);
|
||||||
static void ShowExampleAppLayout(bool* p_open);
|
static void ShowExampleAppLayout(bool* p_open);
|
||||||
@ -87,7 +88,6 @@ static void ShowExampleAppConstrainedResize(bool* p_open);
|
|||||||
static void ShowExampleAppSimpleOverlay(bool* p_open);
|
static void ShowExampleAppSimpleOverlay(bool* p_open);
|
||||||
static void ShowExampleAppWindowTitles(bool* p_open);
|
static void ShowExampleAppWindowTitles(bool* p_open);
|
||||||
static void ShowExampleAppCustomRendering(bool* p_open);
|
static void ShowExampleAppCustomRendering(bool* p_open);
|
||||||
static void ShowExampleAppMainMenuBar();
|
|
||||||
static void ShowExampleMenuFile();
|
static void ShowExampleMenuFile();
|
||||||
|
|
||||||
// Helper to display a little (?) mark which shows a tooltip when hovered.
|
// Helper to display a little (?) mark which shows a tooltip when hovered.
|
||||||
@ -2252,6 +2252,7 @@ void ImGui::ShowDemoWindow(bool* p_open)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// End of ShowDemoWindow()
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2517,6 +2518,10 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
|||||||
ImGui::PopItemWidth();
|
ImGui::PopItemWidth();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// EXAMPLE APP CODE: MAIN MENU BAR
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
// Demonstrate creating a fullscreen menu bar and populating it.
|
// Demonstrate creating a fullscreen menu bar and populating it.
|
||||||
static void ShowExampleAppMainMenuBar()
|
static void ShowExampleAppMainMenuBar()
|
||||||
{
|
{
|
||||||
@ -2606,235 +2611,9 @@ static void ShowExampleMenuFile()
|
|||||||
if (ImGui::MenuItem("Quit", "Alt+F4")) {}
|
if (ImGui::MenuItem("Quit", "Alt+F4")) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Demonstrate creating a window which gets auto-resized according to its content.
|
//-----------------------------------------------------------------------------
|
||||||
static void ShowExampleAppAutoResize(bool* p_open)
|
// EXAMPLE APP CODE: CONSOLE
|
||||||
{
|
//-----------------------------------------------------------------------------
|
||||||
if (!ImGui::Begin("Example: Auto-resizing window", p_open, ImGuiWindowFlags_AlwaysAutoResize))
|
|
||||||
{
|
|
||||||
ImGui::End();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int lines = 10;
|
|
||||||
ImGui::Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop.");
|
|
||||||
ImGui::SliderInt("Number of lines", &lines, 1, 20);
|
|
||||||
for (int i = 0; i < lines; i++)
|
|
||||||
ImGui::Text("%*sThis is line %d", i*4, "", i); // Pad with space to extend size horizontally
|
|
||||||
ImGui::End();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Demonstrate creating a window with custom resize constraints.
|
|
||||||
static void ShowExampleAppConstrainedResize(bool* p_open)
|
|
||||||
{
|
|
||||||
struct CustomConstraints // Helper functions to demonstrate programmatic constraints
|
|
||||||
{
|
|
||||||
static void Square(ImGuiSizeCallbackData* data) { data->DesiredSize = ImVec2(IM_MAX(data->DesiredSize.x, data->DesiredSize.y), IM_MAX(data->DesiredSize.x, data->DesiredSize.y)); }
|
|
||||||
static void Step(ImGuiSizeCallbackData* data) { float step = (float)(int)(intptr_t)data->UserData; data->DesiredSize = ImVec2((int)(data->DesiredSize.x / step + 0.5f) * step, (int)(data->DesiredSize.y / step + 0.5f) * step); }
|
|
||||||
};
|
|
||||||
|
|
||||||
static bool auto_resize = false;
|
|
||||||
static int type = 0;
|
|
||||||
static int display_lines = 10;
|
|
||||||
if (type == 0) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 0), ImVec2(-1, FLT_MAX)); // Vertical only
|
|
||||||
if (type == 1) ImGui::SetNextWindowSizeConstraints(ImVec2(0, -1), ImVec2(FLT_MAX, -1)); // Horizontal only
|
|
||||||
if (type == 2) ImGui::SetNextWindowSizeConstraints(ImVec2(100, 100), ImVec2(FLT_MAX, FLT_MAX)); // Width > 100, Height > 100
|
|
||||||
if (type == 3) ImGui::SetNextWindowSizeConstraints(ImVec2(400, -1), ImVec2(500, -1)); // Width 400-500
|
|
||||||
if (type == 4) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 400), ImVec2(-1, 500)); // Height 400-500
|
|
||||||
if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square); // Always Square
|
|
||||||
if (type == 6) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)100);// Fixed Step
|
|
||||||
|
|
||||||
ImGuiWindowFlags flags = auto_resize ? ImGuiWindowFlags_AlwaysAutoResize : 0;
|
|
||||||
if (ImGui::Begin("Example: Constrained Resize", p_open, flags))
|
|
||||||
{
|
|
||||||
const char* desc[] =
|
|
||||||
{
|
|
||||||
"Resize vertical only",
|
|
||||||
"Resize horizontal only",
|
|
||||||
"Width > 100, Height > 100",
|
|
||||||
"Width 400-500",
|
|
||||||
"Height 400-500",
|
|
||||||
"Custom: Always Square",
|
|
||||||
"Custom: Fixed Steps (100)",
|
|
||||||
};
|
|
||||||
if (ImGui::Button("200x200")) { ImGui::SetWindowSize(ImVec2(200, 200)); } ImGui::SameLine();
|
|
||||||
if (ImGui::Button("500x500")) { ImGui::SetWindowSize(ImVec2(500, 500)); } ImGui::SameLine();
|
|
||||||
if (ImGui::Button("800x200")) { ImGui::SetWindowSize(ImVec2(800, 200)); }
|
|
||||||
ImGui::PushItemWidth(200);
|
|
||||||
ImGui::Combo("Constraint", &type, desc, IM_ARRAYSIZE(desc));
|
|
||||||
ImGui::DragInt("Lines", &display_lines, 0.2f, 1, 100);
|
|
||||||
ImGui::PopItemWidth();
|
|
||||||
ImGui::Checkbox("Auto-resize", &auto_resize);
|
|
||||||
for (int i = 0; i < display_lines; i++)
|
|
||||||
ImGui::Text("%*sHello, sailor! Making this line long enough for the example.", i * 4, "");
|
|
||||||
}
|
|
||||||
ImGui::End();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use.
|
|
||||||
static void ShowExampleAppSimpleOverlay(bool* p_open)
|
|
||||||
{
|
|
||||||
const float DISTANCE = 10.0f;
|
|
||||||
static int corner = 0;
|
|
||||||
ImVec2 window_pos = ImVec2((corner & 1) ? ImGui::GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner & 2) ? ImGui::GetIO().DisplaySize.y - DISTANCE : DISTANCE);
|
|
||||||
ImVec2 window_pos_pivot = ImVec2((corner & 1) ? 1.0f : 0.0f, (corner & 2) ? 1.0f : 0.0f);
|
|
||||||
if (corner != -1)
|
|
||||||
ImGui::SetNextWindowPos(window_pos, ImGuiCond_Always, window_pos_pivot);
|
|
||||||
ImGui::SetNextWindowBgAlpha(0.3f); // Transparent background
|
|
||||||
if (ImGui::Begin("Example: Simple Overlay", p_open, (corner != -1 ? ImGuiWindowFlags_NoMove : 0) | ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_NoFocusOnAppearing|ImGuiWindowFlags_NoNav))
|
|
||||||
{
|
|
||||||
ImGui::Text("Simple overlay\n" "in the corner of the screen.\n" "(right-click to change position)");
|
|
||||||
ImGui::Separator();
|
|
||||||
if (ImGui::IsMousePosValid())
|
|
||||||
ImGui::Text("Mouse Position: (%.1f,%.1f)", ImGui::GetIO().MousePos.x, ImGui::GetIO().MousePos.y);
|
|
||||||
else
|
|
||||||
ImGui::Text("Mouse Position: <invalid>");
|
|
||||||
if (ImGui::BeginPopupContextWindow())
|
|
||||||
{
|
|
||||||
if (ImGui::MenuItem("Custom", NULL, corner == -1)) corner = -1;
|
|
||||||
if (ImGui::MenuItem("Top-left", NULL, corner == 0)) corner = 0;
|
|
||||||
if (ImGui::MenuItem("Top-right", NULL, corner == 1)) corner = 1;
|
|
||||||
if (ImGui::MenuItem("Bottom-left", NULL, corner == 2)) corner = 2;
|
|
||||||
if (ImGui::MenuItem("Bottom-right", NULL, corner == 3)) corner = 3;
|
|
||||||
if (p_open && ImGui::MenuItem("Close")) *p_open = false;
|
|
||||||
ImGui::EndPopup();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ImGui::End();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Demonstrate using "##" and "###" in identifiers to manipulate ID generation.
|
|
||||||
// This apply to regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details.
|
|
||||||
static void ShowExampleAppWindowTitles(bool*)
|
|
||||||
{
|
|
||||||
// By default, Windows are uniquely identified by their title.
|
|
||||||
// You can use the "##" and "###" markers to manipulate the display/ID.
|
|
||||||
|
|
||||||
// Using "##" to display same title but have unique identifier.
|
|
||||||
ImGui::SetNextWindowPos(ImVec2(100,100), ImGuiCond_FirstUseEver);
|
|
||||||
ImGui::Begin("Same title as another window##1");
|
|
||||||
ImGui::Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique.");
|
|
||||||
ImGui::End();
|
|
||||||
|
|
||||||
ImGui::SetNextWindowPos(ImVec2(100,200), ImGuiCond_FirstUseEver);
|
|
||||||
ImGui::Begin("Same title as another window##2");
|
|
||||||
ImGui::Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique.");
|
|
||||||
ImGui::End();
|
|
||||||
|
|
||||||
// Using "###" to display a changing title but keep a static identifier "AnimatedTitle"
|
|
||||||
char buf[128];
|
|
||||||
sprintf(buf, "Animated title %c %d###AnimatedTitle", "|/-\\"[(int)(ImGui::GetTime()/0.25f)&3], ImGui::GetFrameCount());
|
|
||||||
ImGui::SetNextWindowPos(ImVec2(100,300), ImGuiCond_FirstUseEver);
|
|
||||||
ImGui::Begin(buf);
|
|
||||||
ImGui::Text("This window has a changing title.");
|
|
||||||
ImGui::End();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Demonstrate using the low-level ImDrawList to draw custom shapes.
|
|
||||||
static void ShowExampleAppCustomRendering(bool* p_open)
|
|
||||||
{
|
|
||||||
ImGui::SetNextWindowSize(ImVec2(350,560), ImGuiCond_FirstUseEver);
|
|
||||||
if (!ImGui::Begin("Example: Custom rendering", p_open))
|
|
||||||
{
|
|
||||||
ImGui::End();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc.
|
|
||||||
// Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4.
|
|
||||||
// ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types)
|
|
||||||
// In this example we are not using the maths operators!
|
|
||||||
ImDrawList* draw_list = ImGui::GetWindowDrawList();
|
|
||||||
|
|
||||||
// Primitives
|
|
||||||
ImGui::Text("Primitives");
|
|
||||||
static float sz = 36.0f;
|
|
||||||
static float thickness = 4.0f;
|
|
||||||
static ImVec4 col = ImVec4(1.0f,1.0f,0.4f,1.0f);
|
|
||||||
ImGui::DragFloat("Size", &sz, 0.2f, 2.0f, 72.0f, "%.0f");
|
|
||||||
ImGui::DragFloat("Thickness", &thickness, 0.05f, 1.0f, 8.0f, "%.02f");
|
|
||||||
ImGui::ColorEdit3("Color", &col.x);
|
|
||||||
{
|
|
||||||
const ImVec2 p = ImGui::GetCursorScreenPos();
|
|
||||||
const ImU32 col32 = ImColor(col);
|
|
||||||
float x = p.x + 4.0f, y = p.y + 4.0f, spacing = 8.0f;
|
|
||||||
for (int n = 0; n < 2; n++)
|
|
||||||
{
|
|
||||||
float curr_thickness = (n == 0) ? 1.0f : thickness;
|
|
||||||
draw_list->AddCircle(ImVec2(x+sz*0.5f, y+sz*0.5f), sz*0.5f, col32, 20, curr_thickness); x += sz+spacing;
|
|
||||||
draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 0.0f, ImDrawCornerFlags_All, curr_thickness); x += sz+spacing;
|
|
||||||
draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f, ImDrawCornerFlags_All, curr_thickness); x += sz+spacing;
|
|
||||||
draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotRight, curr_thickness); x += sz+spacing;
|
|
||||||
draw_list->AddTriangle(ImVec2(x+sz*0.5f, y), ImVec2(x+sz,y+sz-0.5f), ImVec2(x,y+sz-0.5f), col32, curr_thickness); x += sz+spacing;
|
|
||||||
draw_list->AddLine(ImVec2(x, y), ImVec2(x+sz, y ), col32, curr_thickness); x += sz+spacing; // Horizontal line (note: drawing a filled rectangle will be faster!)
|
|
||||||
draw_list->AddLine(ImVec2(x, y), ImVec2(x, y+sz), col32, curr_thickness); x += spacing; // Vertical line (note: drawing a filled rectangle will be faster!)
|
|
||||||
draw_list->AddLine(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, curr_thickness); x += sz+spacing; // Diagonal line
|
|
||||||
draw_list->AddBezierCurve(ImVec2(x, y), ImVec2(x+sz*1.3f,y+sz*0.3f), ImVec2(x+sz-sz*1.3f,y+sz-sz*0.3f), ImVec2(x+sz, y+sz), col32, curr_thickness);
|
|
||||||
x = p.x + 4;
|
|
||||||
y += sz+spacing;
|
|
||||||
}
|
|
||||||
draw_list->AddCircleFilled(ImVec2(x+sz*0.5f, y+sz*0.5f), sz*0.5f, col32, 32); x += sz+spacing;
|
|
||||||
draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+sz, y+sz), col32); x += sz+spacing;
|
|
||||||
draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f); x += sz+spacing;
|
|
||||||
draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotRight); x += sz+spacing;
|
|
||||||
draw_list->AddTriangleFilled(ImVec2(x+sz*0.5f, y), ImVec2(x+sz,y+sz-0.5f), ImVec2(x,y+sz-0.5f), col32); x += sz+spacing;
|
|
||||||
draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+sz, y+thickness), col32); x += sz+spacing; // Horizontal line (faster than AddLine, but only handle integer thickness)
|
|
||||||
draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+thickness, y+sz), col32); x += spacing+spacing; // Vertical line (faster than AddLine, but only handle integer thickness)
|
|
||||||
draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+1, y+1), col32); x += sz; // Pixel (faster than AddLine)
|
|
||||||
draw_list->AddRectFilledMultiColor(ImVec2(x, y), ImVec2(x+sz, y+sz), IM_COL32(0,0,0,255), IM_COL32(255,0,0,255), IM_COL32(255,255,0,255), IM_COL32(0,255,0,255));
|
|
||||||
ImGui::Dummy(ImVec2((sz+spacing)*8, (sz+spacing)*3));
|
|
||||||
}
|
|
||||||
ImGui::Separator();
|
|
||||||
{
|
|
||||||
static ImVector<ImVec2> points;
|
|
||||||
static bool adding_line = false;
|
|
||||||
ImGui::Text("Canvas example");
|
|
||||||
if (ImGui::Button("Clear")) points.clear();
|
|
||||||
if (points.Size >= 2) { ImGui::SameLine(); if (ImGui::Button("Undo")) { points.pop_back(); points.pop_back(); } }
|
|
||||||
ImGui::Text("Left-click and drag to add lines,\nRight-click to undo");
|
|
||||||
|
|
||||||
// Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered()
|
|
||||||
// But you can also draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos().
|
|
||||||
// If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max).
|
|
||||||
ImVec2 canvas_pos = ImGui::GetCursorScreenPos(); // ImDrawList API uses screen coordinates!
|
|
||||||
ImVec2 canvas_size = ImGui::GetContentRegionAvail(); // Resize canvas to what's available
|
|
||||||
if (canvas_size.x < 50.0f) canvas_size.x = 50.0f;
|
|
||||||
if (canvas_size.y < 50.0f) canvas_size.y = 50.0f;
|
|
||||||
draw_list->AddRectFilledMultiColor(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(50,50,50,255), IM_COL32(50,50,60,255), IM_COL32(60,60,70,255), IM_COL32(50,50,60,255));
|
|
||||||
draw_list->AddRect(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(255,255,255,255));
|
|
||||||
|
|
||||||
bool adding_preview = false;
|
|
||||||
ImGui::InvisibleButton("canvas", canvas_size);
|
|
||||||
ImVec2 mouse_pos_in_canvas = ImVec2(ImGui::GetIO().MousePos.x - canvas_pos.x, ImGui::GetIO().MousePos.y - canvas_pos.y);
|
|
||||||
if (adding_line)
|
|
||||||
{
|
|
||||||
adding_preview = true;
|
|
||||||
points.push_back(mouse_pos_in_canvas);
|
|
||||||
if (!ImGui::IsMouseDown(0))
|
|
||||||
adding_line = adding_preview = false;
|
|
||||||
}
|
|
||||||
if (ImGui::IsItemHovered())
|
|
||||||
{
|
|
||||||
if (!adding_line && ImGui::IsMouseClicked(0))
|
|
||||||
{
|
|
||||||
points.push_back(mouse_pos_in_canvas);
|
|
||||||
adding_line = true;
|
|
||||||
}
|
|
||||||
if (ImGui::IsMouseClicked(1) && !points.empty())
|
|
||||||
{
|
|
||||||
adding_line = adding_preview = false;
|
|
||||||
points.pop_back();
|
|
||||||
points.pop_back();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
draw_list->PushClipRect(canvas_pos, ImVec2(canvas_pos.x+canvas_size.x, canvas_pos.y+canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.)
|
|
||||||
for (int i = 0; i < points.Size - 1; i += 2)
|
|
||||||
draw_list->AddLine(ImVec2(canvas_pos.x + points[i].x, canvas_pos.y + points[i].y), ImVec2(canvas_pos.x + points[i+1].x, canvas_pos.y + points[i+1].y), IM_COL32(255,255,0,255), 2.0f);
|
|
||||||
draw_list->PopClipRect();
|
|
||||||
if (adding_preview)
|
|
||||||
points.pop_back();
|
|
||||||
}
|
|
||||||
ImGui::End();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Demonstrating creating a simple console window, with scrolling, filtering, completion and history.
|
// Demonstrating creating a simple console window, with scrolling, filtering, completion and history.
|
||||||
// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions.
|
// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions.
|
||||||
@ -2855,7 +2634,7 @@ struct ExampleAppConsole
|
|||||||
Commands.push_back("HELP");
|
Commands.push_back("HELP");
|
||||||
Commands.push_back("HISTORY");
|
Commands.push_back("HISTORY");
|
||||||
Commands.push_back("CLEAR");
|
Commands.push_back("CLEAR");
|
||||||
Commands.push_back("CLASSIFY"); // "classify" is here to provide an example of "C"+[tab] completing to "CL" and displaying matches.
|
Commands.push_back("CLASSIFY"); // "classify" is only here to provide an example of "C"+[tab] completing to "CL" and displaying matches.
|
||||||
AddLog("Welcome to Dear ImGui!");
|
AddLog("Welcome to Dear ImGui!");
|
||||||
}
|
}
|
||||||
~ExampleAppConsole()
|
~ExampleAppConsole()
|
||||||
@ -3143,6 +2922,10 @@ static void ShowExampleAppConsole(bool* p_open)
|
|||||||
console.Draw("Example: Console", p_open);
|
console.Draw("Example: Console", p_open);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// EXAMPLE APP CODE: LOG
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
// Usage:
|
// Usage:
|
||||||
// static ExampleAppLog my_log;
|
// static ExampleAppLog my_log;
|
||||||
// my_log.AddLog("Hello %d world\n", 123);
|
// my_log.AddLog("Hello %d world\n", 123);
|
||||||
@ -3229,6 +3012,10 @@ static void ShowExampleAppLog(bool* p_open)
|
|||||||
log.Draw("Example: Log", p_open);
|
log.Draw("Example: Log", p_open);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// EXAMPLE APP CODE: SIMPLE LAYOUT
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
// Demonstrate create a window with multiple child windows.
|
// Demonstrate create a window with multiple child windows.
|
||||||
static void ShowExampleAppLayout(bool* p_open)
|
static void ShowExampleAppLayout(bool* p_open)
|
||||||
{
|
{
|
||||||
@ -3273,6 +3060,10 @@ static void ShowExampleAppLayout(bool* p_open)
|
|||||||
ImGui::End();
|
ImGui::End();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// EXAMPLE APP CODE: PROPERTY EDITOR
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
// Demonstrate create a simple property editor.
|
// Demonstrate create a simple property editor.
|
||||||
static void ShowExampleAppPropertyEditor(bool* p_open)
|
static void ShowExampleAppPropertyEditor(bool* p_open)
|
||||||
{
|
{
|
||||||
@ -3342,6 +3133,10 @@ static void ShowExampleAppPropertyEditor(bool* p_open)
|
|||||||
ImGui::End();
|
ImGui::End();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// EXAMPLE APP CODE: LONG TEXT
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
// Demonstrate/test rendering huge amount of text, and the incidence of clipping.
|
// Demonstrate/test rendering huge amount of text, and the incidence of clipping.
|
||||||
static void ShowExampleAppLongText(bool* p_open)
|
static void ShowExampleAppLongText(bool* p_open)
|
||||||
{
|
{
|
||||||
@ -3396,6 +3191,256 @@ static void ShowExampleAppLongText(bool* p_open)
|
|||||||
ImGui::End();
|
ImGui::End();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// EXAMPLE APP CODE: AUTO RESIZE
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Demonstrate creating a window which gets auto-resized according to its content.
|
||||||
|
static void ShowExampleAppAutoResize(bool* p_open)
|
||||||
|
{
|
||||||
|
if (!ImGui::Begin("Example: Auto-resizing window", p_open, ImGuiWindowFlags_AlwaysAutoResize))
|
||||||
|
{
|
||||||
|
ImGui::End();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lines = 10;
|
||||||
|
ImGui::Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop.");
|
||||||
|
ImGui::SliderInt("Number of lines", &lines, 1, 20);
|
||||||
|
for (int i = 0; i < lines; i++)
|
||||||
|
ImGui::Text("%*sThis is line %d", i * 4, "", i); // Pad with space to extend size horizontally
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// EXAMPLE APP CODE: CONSTRAINED RESIZE
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Demonstrate creating a window with custom resize constraints.
|
||||||
|
static void ShowExampleAppConstrainedResize(bool* p_open)
|
||||||
|
{
|
||||||
|
struct CustomConstraints // Helper functions to demonstrate programmatic constraints
|
||||||
|
{
|
||||||
|
static void Square(ImGuiSizeCallbackData* data) { data->DesiredSize = ImVec2(IM_MAX(data->DesiredSize.x, data->DesiredSize.y), IM_MAX(data->DesiredSize.x, data->DesiredSize.y)); }
|
||||||
|
static void Step(ImGuiSizeCallbackData* data) { float step = (float)(int)(intptr_t)data->UserData; data->DesiredSize = ImVec2((int)(data->DesiredSize.x / step + 0.5f) * step, (int)(data->DesiredSize.y / step + 0.5f) * step); }
|
||||||
|
};
|
||||||
|
|
||||||
|
static bool auto_resize = false;
|
||||||
|
static int type = 0;
|
||||||
|
static int display_lines = 10;
|
||||||
|
if (type == 0) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 0), ImVec2(-1, FLT_MAX)); // Vertical only
|
||||||
|
if (type == 1) ImGui::SetNextWindowSizeConstraints(ImVec2(0, -1), ImVec2(FLT_MAX, -1)); // Horizontal only
|
||||||
|
if (type == 2) ImGui::SetNextWindowSizeConstraints(ImVec2(100, 100), ImVec2(FLT_MAX, FLT_MAX)); // Width > 100, Height > 100
|
||||||
|
if (type == 3) ImGui::SetNextWindowSizeConstraints(ImVec2(400, -1), ImVec2(500, -1)); // Width 400-500
|
||||||
|
if (type == 4) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 400), ImVec2(-1, 500)); // Height 400-500
|
||||||
|
if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square); // Always Square
|
||||||
|
if (type == 6) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)100);// Fixed Step
|
||||||
|
|
||||||
|
ImGuiWindowFlags flags = auto_resize ? ImGuiWindowFlags_AlwaysAutoResize : 0;
|
||||||
|
if (ImGui::Begin("Example: Constrained Resize", p_open, flags))
|
||||||
|
{
|
||||||
|
const char* desc[] =
|
||||||
|
{
|
||||||
|
"Resize vertical only",
|
||||||
|
"Resize horizontal only",
|
||||||
|
"Width > 100, Height > 100",
|
||||||
|
"Width 400-500",
|
||||||
|
"Height 400-500",
|
||||||
|
"Custom: Always Square",
|
||||||
|
"Custom: Fixed Steps (100)",
|
||||||
|
};
|
||||||
|
if (ImGui::Button("200x200")) { ImGui::SetWindowSize(ImVec2(200, 200)); } ImGui::SameLine();
|
||||||
|
if (ImGui::Button("500x500")) { ImGui::SetWindowSize(ImVec2(500, 500)); } ImGui::SameLine();
|
||||||
|
if (ImGui::Button("800x200")) { ImGui::SetWindowSize(ImVec2(800, 200)); }
|
||||||
|
ImGui::PushItemWidth(200);
|
||||||
|
ImGui::Combo("Constraint", &type, desc, IM_ARRAYSIZE(desc));
|
||||||
|
ImGui::DragInt("Lines", &display_lines, 0.2f, 1, 100);
|
||||||
|
ImGui::PopItemWidth();
|
||||||
|
ImGui::Checkbox("Auto-resize", &auto_resize);
|
||||||
|
for (int i = 0; i < display_lines; i++)
|
||||||
|
ImGui::Text("%*sHello, sailor! Making this line long enough for the example.", i * 4, "");
|
||||||
|
}
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// EXAMPLE APP CODE: SIMPLE OVERLAY
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use.
|
||||||
|
static void ShowExampleAppSimpleOverlay(bool* p_open)
|
||||||
|
{
|
||||||
|
const float DISTANCE = 10.0f;
|
||||||
|
static int corner = 0;
|
||||||
|
ImVec2 window_pos = ImVec2((corner & 1) ? ImGui::GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner & 2) ? ImGui::GetIO().DisplaySize.y - DISTANCE : DISTANCE);
|
||||||
|
ImVec2 window_pos_pivot = ImVec2((corner & 1) ? 1.0f : 0.0f, (corner & 2) ? 1.0f : 0.0f);
|
||||||
|
if (corner != -1)
|
||||||
|
ImGui::SetNextWindowPos(window_pos, ImGuiCond_Always, window_pos_pivot);
|
||||||
|
ImGui::SetNextWindowBgAlpha(0.3f); // Transparent background
|
||||||
|
if (ImGui::Begin("Example: Simple Overlay", p_open, (corner != -1 ? ImGuiWindowFlags_NoMove : 0) | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav))
|
||||||
|
{
|
||||||
|
ImGui::Text("Simple overlay\n" "in the corner of the screen.\n" "(right-click to change position)");
|
||||||
|
ImGui::Separator();
|
||||||
|
if (ImGui::IsMousePosValid())
|
||||||
|
ImGui::Text("Mouse Position: (%.1f,%.1f)", ImGui::GetIO().MousePos.x, ImGui::GetIO().MousePos.y);
|
||||||
|
else
|
||||||
|
ImGui::Text("Mouse Position: <invalid>");
|
||||||
|
if (ImGui::BeginPopupContextWindow())
|
||||||
|
{
|
||||||
|
if (ImGui::MenuItem("Custom", NULL, corner == -1)) corner = -1;
|
||||||
|
if (ImGui::MenuItem("Top-left", NULL, corner == 0)) corner = 0;
|
||||||
|
if (ImGui::MenuItem("Top-right", NULL, corner == 1)) corner = 1;
|
||||||
|
if (ImGui::MenuItem("Bottom-left", NULL, corner == 2)) corner = 2;
|
||||||
|
if (ImGui::MenuItem("Bottom-right", NULL, corner == 3)) corner = 3;
|
||||||
|
if (p_open && ImGui::MenuItem("Close")) *p_open = false;
|
||||||
|
ImGui::EndPopup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// EXAMPLE APP CODE: WINDOW TITLES
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Demonstrate using "##" and "###" in identifiers to manipulate ID generation.
|
||||||
|
// This apply to all regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details.
|
||||||
|
static void ShowExampleAppWindowTitles(bool*)
|
||||||
|
{
|
||||||
|
// By default, Windows are uniquely identified by their title.
|
||||||
|
// You can use the "##" and "###" markers to manipulate the display/ID.
|
||||||
|
|
||||||
|
// Using "##" to display same title but have unique identifier.
|
||||||
|
ImGui::SetNextWindowPos(ImVec2(100, 100), ImGuiCond_FirstUseEver);
|
||||||
|
ImGui::Begin("Same title as another window##1");
|
||||||
|
ImGui::Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique.");
|
||||||
|
ImGui::End();
|
||||||
|
|
||||||
|
ImGui::SetNextWindowPos(ImVec2(100, 200), ImGuiCond_FirstUseEver);
|
||||||
|
ImGui::Begin("Same title as another window##2");
|
||||||
|
ImGui::Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique.");
|
||||||
|
ImGui::End();
|
||||||
|
|
||||||
|
// Using "###" to display a changing title but keep a static identifier "AnimatedTitle"
|
||||||
|
char buf[128];
|
||||||
|
sprintf(buf, "Animated title %c %d###AnimatedTitle", "|/-\\"[(int)(ImGui::GetTime() / 0.25f) & 3], ImGui::GetFrameCount());
|
||||||
|
ImGui::SetNextWindowPos(ImVec2(100, 300), ImGuiCond_FirstUseEver);
|
||||||
|
ImGui::Begin(buf);
|
||||||
|
ImGui::Text("This window has a changing title.");
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// EXAMPLE APP CODE: CUSTOM RENDERING
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Demonstrate using the low-level ImDrawList to draw custom shapes.
|
||||||
|
static void ShowExampleAppCustomRendering(bool* p_open)
|
||||||
|
{
|
||||||
|
ImGui::SetNextWindowSize(ImVec2(350, 560), ImGuiCond_FirstUseEver);
|
||||||
|
if (!ImGui::Begin("Example: Custom rendering", p_open))
|
||||||
|
{
|
||||||
|
ImGui::End();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc.
|
||||||
|
// Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4.
|
||||||
|
// ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types)
|
||||||
|
// In this example we are not using the maths operators!
|
||||||
|
ImDrawList* draw_list = ImGui::GetWindowDrawList();
|
||||||
|
|
||||||
|
// Primitives
|
||||||
|
ImGui::Text("Primitives");
|
||||||
|
static float sz = 36.0f;
|
||||||
|
static float thickness = 4.0f;
|
||||||
|
static ImVec4 col = ImVec4(1.0f, 1.0f, 0.4f, 1.0f);
|
||||||
|
ImGui::DragFloat("Size", &sz, 0.2f, 2.0f, 72.0f, "%.0f");
|
||||||
|
ImGui::DragFloat("Thickness", &thickness, 0.05f, 1.0f, 8.0f, "%.02f");
|
||||||
|
ImGui::ColorEdit3("Color", &col.x);
|
||||||
|
{
|
||||||
|
const ImVec2 p = ImGui::GetCursorScreenPos();
|
||||||
|
const ImU32 col32 = ImColor(col);
|
||||||
|
float x = p.x + 4.0f, y = p.y + 4.0f, spacing = 8.0f;
|
||||||
|
for (int n = 0; n < 2; n++)
|
||||||
|
{
|
||||||
|
float curr_thickness = (n == 0) ? 1.0f : thickness;
|
||||||
|
draw_list->AddCircle(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col32, 20, curr_thickness); x += sz + spacing;
|
||||||
|
draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col32, 0.0f, ImDrawCornerFlags_All, curr_thickness); x += sz + spacing;
|
||||||
|
draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col32, 10.0f, ImDrawCornerFlags_All, curr_thickness); x += sz + spacing;
|
||||||
|
draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col32, 10.0f, ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotRight, curr_thickness); x += sz + spacing;
|
||||||
|
draw_list->AddTriangle(ImVec2(x + sz*0.5f, y), ImVec2(x + sz, y + sz - 0.5f), ImVec2(x, y + sz - 0.5f), col32, curr_thickness); x += sz + spacing;
|
||||||
|
draw_list->AddLine(ImVec2(x, y), ImVec2(x + sz, y), col32, curr_thickness); x += sz + spacing; // Horizontal line (note: drawing a filled rectangle will be faster!)
|
||||||
|
draw_list->AddLine(ImVec2(x, y), ImVec2(x, y + sz), col32, curr_thickness); x += spacing; // Vertical line (note: drawing a filled rectangle will be faster!)
|
||||||
|
draw_list->AddLine(ImVec2(x, y), ImVec2(x + sz, y + sz), col32, curr_thickness); x += sz + spacing; // Diagonal line
|
||||||
|
draw_list->AddBezierCurve(ImVec2(x, y), ImVec2(x + sz*1.3f, y + sz*0.3f), ImVec2(x + sz - sz*1.3f, y + sz - sz*0.3f), ImVec2(x + sz, y + sz), col32, curr_thickness);
|
||||||
|
x = p.x + 4;
|
||||||
|
y += sz + spacing;
|
||||||
|
}
|
||||||
|
draw_list->AddCircleFilled(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col32, 32); x += sz + spacing;
|
||||||
|
draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col32); x += sz + spacing;
|
||||||
|
draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col32, 10.0f); x += sz + spacing;
|
||||||
|
draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col32, 10.0f, ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotRight); x += sz + spacing;
|
||||||
|
draw_list->AddTriangleFilled(ImVec2(x + sz*0.5f, y), ImVec2(x + sz, y + sz - 0.5f), ImVec2(x, y + sz - 0.5f), col32); x += sz + spacing;
|
||||||
|
draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + thickness), col32); x += sz + spacing; // Horizontal line (faster than AddLine, but only handle integer thickness)
|
||||||
|
draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + thickness, y + sz), col32); x += spacing + spacing; // Vertical line (faster than AddLine, but only handle integer thickness)
|
||||||
|
draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + 1, y + 1), col32); x += sz; // Pixel (faster than AddLine)
|
||||||
|
draw_list->AddRectFilledMultiColor(ImVec2(x, y), ImVec2(x + sz, y + sz), IM_COL32(0, 0, 0, 255), IM_COL32(255, 0, 0, 255), IM_COL32(255, 255, 0, 255), IM_COL32(0, 255, 0, 255));
|
||||||
|
ImGui::Dummy(ImVec2((sz + spacing) * 8, (sz + spacing) * 3));
|
||||||
|
}
|
||||||
|
ImGui::Separator();
|
||||||
|
{
|
||||||
|
static ImVector<ImVec2> points;
|
||||||
|
static bool adding_line = false;
|
||||||
|
ImGui::Text("Canvas example");
|
||||||
|
if (ImGui::Button("Clear")) points.clear();
|
||||||
|
if (points.Size >= 2) { ImGui::SameLine(); if (ImGui::Button("Undo")) { points.pop_back(); points.pop_back(); } }
|
||||||
|
ImGui::Text("Left-click and drag to add lines,\nRight-click to undo");
|
||||||
|
|
||||||
|
// Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered()
|
||||||
|
// But you can also draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos().
|
||||||
|
// If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max).
|
||||||
|
ImVec2 canvas_pos = ImGui::GetCursorScreenPos(); // ImDrawList API uses screen coordinates!
|
||||||
|
ImVec2 canvas_size = ImGui::GetContentRegionAvail(); // Resize canvas to what's available
|
||||||
|
if (canvas_size.x < 50.0f) canvas_size.x = 50.0f;
|
||||||
|
if (canvas_size.y < 50.0f) canvas_size.y = 50.0f;
|
||||||
|
draw_list->AddRectFilledMultiColor(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(50, 50, 50, 255), IM_COL32(50, 50, 60, 255), IM_COL32(60, 60, 70, 255), IM_COL32(50, 50, 60, 255));
|
||||||
|
draw_list->AddRect(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(255, 255, 255, 255));
|
||||||
|
|
||||||
|
bool adding_preview = false;
|
||||||
|
ImGui::InvisibleButton("canvas", canvas_size);
|
||||||
|
ImVec2 mouse_pos_in_canvas = ImVec2(ImGui::GetIO().MousePos.x - canvas_pos.x, ImGui::GetIO().MousePos.y - canvas_pos.y);
|
||||||
|
if (adding_line)
|
||||||
|
{
|
||||||
|
adding_preview = true;
|
||||||
|
points.push_back(mouse_pos_in_canvas);
|
||||||
|
if (!ImGui::IsMouseDown(0))
|
||||||
|
adding_line = adding_preview = false;
|
||||||
|
}
|
||||||
|
if (ImGui::IsItemHovered())
|
||||||
|
{
|
||||||
|
if (!adding_line && ImGui::IsMouseClicked(0))
|
||||||
|
{
|
||||||
|
points.push_back(mouse_pos_in_canvas);
|
||||||
|
adding_line = true;
|
||||||
|
}
|
||||||
|
if (ImGui::IsMouseClicked(1) && !points.empty())
|
||||||
|
{
|
||||||
|
adding_line = adding_preview = false;
|
||||||
|
points.pop_back();
|
||||||
|
points.pop_back();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
draw_list->PushClipRect(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.)
|
||||||
|
for (int i = 0; i < points.Size - 1; i += 2)
|
||||||
|
draw_list->AddLine(ImVec2(canvas_pos.x + points[i].x, canvas_pos.y + points[i].y), ImVec2(canvas_pos.x + points[i + 1].x, canvas_pos.y + points[i + 1].y), IM_COL32(255, 255, 0, 255), 2.0f);
|
||||||
|
draw_list->PopClipRect();
|
||||||
|
if (adding_preview)
|
||||||
|
points.pop_back();
|
||||||
|
}
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
|
|
||||||
// End of Demo code
|
// End of Demo code
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
13
3rdparty/dear-imgui/imgui_draw.cpp
vendored
13
3rdparty/dear-imgui/imgui_draw.cpp
vendored
@ -98,6 +98,7 @@ namespace IMGUI_STB_NAMESPACE
|
|||||||
#ifndef IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION
|
#ifndef IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION
|
||||||
#define STBRP_STATIC
|
#define STBRP_STATIC
|
||||||
#define STBRP_ASSERT(x) IM_ASSERT(x)
|
#define STBRP_ASSERT(x) IM_ASSERT(x)
|
||||||
|
#define STBRP_SORT ImQsort
|
||||||
#define STB_RECT_PACK_IMPLEMENTATION
|
#define STB_RECT_PACK_IMPLEMENTATION
|
||||||
#endif
|
#endif
|
||||||
#ifdef IMGUI_STB_RECT_PACK_FILENAME
|
#ifdef IMGUI_STB_RECT_PACK_FILENAME
|
||||||
@ -196,8 +197,8 @@ void ImGui::StyleColorsDark(ImGuiStyle* dst)
|
|||||||
colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
|
colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
|
||||||
colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
|
colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
|
||||||
colors[ImGuiCol_NavHighlight] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
|
colors[ImGuiCol_NavHighlight] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
|
||||||
colors[ImGuiCol_NavWindowListHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
|
colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
|
||||||
colors[ImGuiCol_NavWindowListDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
|
colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
|
||||||
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f);
|
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -246,8 +247,8 @@ void ImGui::StyleColorsClassic(ImGuiStyle* dst)
|
|||||||
colors[ImGuiCol_TextSelectedBg] = ImVec4(0.00f, 0.00f, 1.00f, 0.35f);
|
colors[ImGuiCol_TextSelectedBg] = ImVec4(0.00f, 0.00f, 1.00f, 0.35f);
|
||||||
colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
|
colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
|
||||||
colors[ImGuiCol_NavHighlight] = colors[ImGuiCol_HeaderHovered];
|
colors[ImGuiCol_NavHighlight] = colors[ImGuiCol_HeaderHovered];
|
||||||
colors[ImGuiCol_NavWindowListHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
|
colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
|
||||||
colors[ImGuiCol_NavWindowListDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
|
colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
|
||||||
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
|
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,8 +298,8 @@ void ImGui::StyleColorsLight(ImGuiStyle* dst)
|
|||||||
colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
|
colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
|
||||||
colors[ImGuiCol_DragDropTarget] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
|
colors[ImGuiCol_DragDropTarget] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
|
||||||
colors[ImGuiCol_NavHighlight] = colors[ImGuiCol_HeaderHovered];
|
colors[ImGuiCol_NavHighlight] = colors[ImGuiCol_HeaderHovered];
|
||||||
colors[ImGuiCol_NavWindowListHighlight] = ImVec4(0.70f, 0.70f, 0.70f, 0.70f);
|
colors[ImGuiCol_NavWindowingHighlight] = ImVec4(0.70f, 0.70f, 0.70f, 0.70f);
|
||||||
colors[ImGuiCol_NavWindowListDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.20f);
|
colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.20f);
|
||||||
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
|
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
7
3rdparty/dear-imgui/imgui_internal.h
vendored
7
3rdparty/dear-imgui/imgui_internal.h
vendored
@ -120,6 +120,7 @@ static inline bool ImCharIsBlankA(char c) { return c == ' ' || c =
|
|||||||
static inline bool ImCharIsBlankW(unsigned int c) { return c == ' ' || c == '\t' || c == 0x3000; }
|
static inline bool ImCharIsBlankW(unsigned int c) { return c == ' ' || c == '\t' || c == 0x3000; }
|
||||||
static inline bool ImIsPowerOfTwo(int v) { return v != 0 && (v & (v - 1)) == 0; }
|
static inline bool ImIsPowerOfTwo(int v) { return v != 0 && (v & (v - 1)) == 0; }
|
||||||
static inline int ImUpperPowerOfTwo(int v) { v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; }
|
static inline int ImUpperPowerOfTwo(int v) { v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; }
|
||||||
|
#define ImQsort qsort
|
||||||
|
|
||||||
// Helpers: Geometry
|
// Helpers: Geometry
|
||||||
IMGUI_API ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p);
|
IMGUI_API ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p);
|
||||||
@ -1081,6 +1082,9 @@ namespace ImGui
|
|||||||
IMGUI_API bool IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent);
|
IMGUI_API bool IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent);
|
||||||
IMGUI_API bool IsWindowNavFocusable(ImGuiWindow* window);
|
IMGUI_API bool IsWindowNavFocusable(ImGuiWindow* window);
|
||||||
|
|
||||||
|
IMGUI_API void SetCurrentFont(ImFont* font);
|
||||||
|
inline ImFont* GetDefaultFont() { ImGuiContext& g = *GImGui; return g.IO.FontDefault ? g.IO.FontDefault : g.IO.Fonts->Fonts[0]; }
|
||||||
|
|
||||||
IMGUI_API void Initialize(ImGuiContext* context);
|
IMGUI_API void Initialize(ImGuiContext* context);
|
||||||
IMGUI_API void Shutdown(ImGuiContext* context); // Since 1.60 this is a _private_ function. You can call DestroyContext() to destroy the context created by CreateContext().
|
IMGUI_API void Shutdown(ImGuiContext* context); // Since 1.60 this is a _private_ function. You can call DestroyContext() to destroy the context created by CreateContext().
|
||||||
|
|
||||||
@ -1117,10 +1121,9 @@ namespace ImGui
|
|||||||
IMGUI_API void PushItemFlag(ImGuiItemFlags option, bool enabled);
|
IMGUI_API void PushItemFlag(ImGuiItemFlags option, bool enabled);
|
||||||
IMGUI_API void PopItemFlag();
|
IMGUI_API void PopItemFlag();
|
||||||
|
|
||||||
IMGUI_API void SetCurrentFont(ImFont* font);
|
|
||||||
|
|
||||||
IMGUI_API void OpenPopupEx(ImGuiID id);
|
IMGUI_API void OpenPopupEx(ImGuiID id);
|
||||||
IMGUI_API void ClosePopup(ImGuiID id);
|
IMGUI_API void ClosePopup(ImGuiID id);
|
||||||
|
IMGUI_API void ClosePopupToLevel(int remaining);
|
||||||
IMGUI_API void ClosePopupsOverWindow(ImGuiWindow* ref_window);
|
IMGUI_API void ClosePopupsOverWindow(ImGuiWindow* ref_window);
|
||||||
IMGUI_API bool IsPopupOpen(ImGuiID id);
|
IMGUI_API bool IsPopupOpen(ImGuiID id);
|
||||||
IMGUI_API bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags);
|
IMGUI_API bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags);
|
||||||
|
Loading…
Reference in New Issue
Block a user