mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 15:11:05 +01:00 
			
		
		
		
	Added a way to replace the internal state pointer so that we can optionally share it between modules (e.g. multiple DLLs)
This commit is contained in:
		
							
								
								
									
										250
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										250
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -1029,7 +1029,8 @@ struct ImGuiState
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static ImGuiState   GImGui;
 | 
					static ImGuiState	GImDefaultState;
 | 
				
			||||||
 | 
					static ImGuiState*  GImGui = &GImDefaultState;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct ImGuiWindow
 | 
					struct ImGuiWindow
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -1084,27 +1085,27 @@ public:
 | 
				
			|||||||
    void        FocusItemUnregister();
 | 
					    void        FocusItemUnregister();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImGuiAabb   Aabb() const                            { return ImGuiAabb(Pos, Pos+Size); }
 | 
					    ImGuiAabb   Aabb() const                            { return ImGuiAabb(Pos, Pos+Size); }
 | 
				
			||||||
    ImFont*     Font() const                            { return GImGui.Font; }
 | 
					    ImFont*     Font() const                            { return GImGui->Font; }
 | 
				
			||||||
    float       FontSize() const                        { return GImGui.FontSize * FontWindowScale; }
 | 
					    float       FontSize() const                        { return GImGui->FontSize * FontWindowScale; }
 | 
				
			||||||
    ImVec2      CursorPos() const                       { return DC.CursorPos; }
 | 
					    ImVec2      CursorPos() const                       { return DC.CursorPos; }
 | 
				
			||||||
    float       TitleBarHeight() const                  { return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0 : FontSize() + GImGui.Style.FramePadding.y * 2.0f; }
 | 
					    float       TitleBarHeight() const                  { return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0 : FontSize() + GImGui->Style.FramePadding.y * 2.0f; }
 | 
				
			||||||
    ImGuiAabb   TitleBarAabb() const                    { return ImGuiAabb(Pos, Pos + ImVec2(SizeFull.x, TitleBarHeight())); }
 | 
					    ImGuiAabb   TitleBarAabb() const                    { return ImGuiAabb(Pos, Pos + ImVec2(SizeFull.x, TitleBarHeight())); }
 | 
				
			||||||
    ImVec2      WindowPadding() const                   { return ((Flags & ImGuiWindowFlags_ChildWindow) && !(Flags & ImGuiWindowFlags_ShowBorders)) ? ImVec2(1,1) : GImGui.Style.WindowPadding; }
 | 
					    ImVec2      WindowPadding() const                   { return ((Flags & ImGuiWindowFlags_ChildWindow) && !(Flags & ImGuiWindowFlags_ShowBorders)) ? ImVec2(1,1) : GImGui->Style.WindowPadding; }
 | 
				
			||||||
    ImU32       Color(ImGuiCol idx, float a=1.f) const  { ImVec4 c = GImGui.Style.Colors[idx]; c.w *= GImGui.Style.Alpha * a; return ImGui::ColorConvertFloat4ToU32(c); }
 | 
					    ImU32       Color(ImGuiCol idx, float a=1.f) const  { ImVec4 c = GImGui->Style.Colors[idx]; c.w *= GImGui->Style.Alpha * a; return ImGui::ColorConvertFloat4ToU32(c); }
 | 
				
			||||||
    ImU32       Color(const ImVec4& col) const          { ImVec4 c = col; c.w *= GImGui.Style.Alpha; return ImGui::ColorConvertFloat4ToU32(c); }
 | 
					    ImU32       Color(const ImVec4& col) const          { ImVec4 c = col; c.w *= GImGui->Style.Alpha; return ImGui::ColorConvertFloat4ToU32(c); }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static ImGuiWindow* GetCurrentWindow()
 | 
					static ImGuiWindow* GetCurrentWindow()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    IM_ASSERT(GImGui.CurrentWindow != NULL);    // ImGui::NewFrame() hasn't been called yet?
 | 
					    IM_ASSERT(GImGui->CurrentWindow != NULL);    // ImGui::NewFrame() hasn't been called yet?
 | 
				
			||||||
    GImGui.CurrentWindow->Accessed = true;
 | 
					    GImGui->CurrentWindow->Accessed = true;
 | 
				
			||||||
    return GImGui.CurrentWindow;
 | 
					    return GImGui->CurrentWindow;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void RegisterAliveId(const ImGuiID& id)
 | 
					static void RegisterAliveId(const ImGuiID& id)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (GImGui.ActiveId == id)
 | 
					    if (GImGui->ActiveId == id)
 | 
				
			||||||
        GImGui.ActiveIdIsAlive = true;
 | 
					        GImGui->ActiveIdIsAlive = true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//-----------------------------------------------------------------------------
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
@@ -1235,7 +1236,7 @@ void ImGuiTextFilter::Draw(const char* label, float width)
 | 
				
			|||||||
    if (width < 0.0f)
 | 
					    if (width < 0.0f)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ImVec2 label_size = ImGui::CalcTextSize(label, NULL, true);
 | 
					        ImVec2 label_size = ImGui::CalcTextSize(label, NULL, true);
 | 
				
			||||||
        width = ImMax(window->Pos.x + ImGui::GetContentRegionMax().x - window->DC.CursorPos.x - (label_size.x + GImGui.Style.ItemSpacing.x*4), 10.0f);
 | 
					        width = ImMax(window->Pos.x + ImGui::GetContentRegionMax().x - window->DC.CursorPos.x - (label_size.x + GImGui->Style.ItemSpacing.x*4), 10.0f);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    ImGui::PushItemWidth(width);
 | 
					    ImGui::PushItemWidth(width);
 | 
				
			||||||
    ImGui::InputText(label, InputBuf, IM_ARRAYSIZE(InputBuf));
 | 
					    ImGui::InputText(label, InputBuf, IM_ARRAYSIZE(InputBuf));
 | 
				
			||||||
@@ -1417,7 +1418,7 @@ ImGuiID ImGuiWindow::GetID(const void* ptr)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool ImGuiWindow::FocusItemRegister(bool is_active, bool tab_stop)
 | 
					bool ImGuiWindow::FocusItemRegister(bool is_active, bool tab_stop)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const bool allow_keyboard_focus = window->DC.AllowKeyboardFocus.back();
 | 
					    const bool allow_keyboard_focus = window->DC.AllowKeyboardFocus.back();
 | 
				
			||||||
@@ -1451,7 +1452,7 @@ void ImGuiWindow::FocusItemUnregister()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGuiWindow::AddToRenderList()
 | 
					void ImGuiWindow::AddToRenderList()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!DrawList->commands.empty() && !DrawList->vtx_buffer.empty())
 | 
					    if (!DrawList->commands.empty() && !DrawList->vtx_buffer.empty())
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -1471,17 +1472,17 @@ void ImGuiWindow::AddToRenderList()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void* ImGui::MemAlloc(size_t sz)
 | 
					void* ImGui::MemAlloc(size_t sz)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return GImGui.IO.MemAllocFn(sz);
 | 
					    return GImGui->IO.MemAllocFn(sz);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui::MemFree(void* ptr)
 | 
					void ImGui::MemFree(void* ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return GImGui.IO.MemFreeFn(ptr);
 | 
					    return GImGui->IO.MemFreeFn(ptr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
static ImGuiIniData* FindWindowSettings(const char* name)
 | 
					static ImGuiIniData* FindWindowSettings(const char* name)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    for (size_t i = 0; i != g.Settings.size(); i++)
 | 
					    for (size_t i = 0; i != g.Settings.size(); i++)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ImGuiIniData* ini = g.Settings[i];
 | 
					        ImGuiIniData* ini = g.Settings[i];
 | 
				
			||||||
@@ -1499,7 +1500,7 @@ static ImGuiIniData* AddWindowSettings(const char* name)
 | 
				
			|||||||
    ini->Collapsed = false;
 | 
					    ini->Collapsed = false;
 | 
				
			||||||
    ini->Pos = ImVec2(FLT_MAX,FLT_MAX);
 | 
					    ini->Pos = ImVec2(FLT_MAX,FLT_MAX);
 | 
				
			||||||
    ini->Size = ImVec2(0,0);
 | 
					    ini->Size = ImVec2(0,0);
 | 
				
			||||||
    GImGui.Settings.push_back(ini);
 | 
					    GImGui->Settings.push_back(ini);
 | 
				
			||||||
    return ini;
 | 
					    return ini;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1507,7 +1508,7 @@ static ImGuiIniData* AddWindowSettings(const char* name)
 | 
				
			|||||||
// FIXME: Write something less rubbish
 | 
					// FIXME: Write something less rubbish
 | 
				
			||||||
static void LoadSettings()
 | 
					static void LoadSettings()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    const char* filename = g.IO.IniFilename;
 | 
					    const char* filename = g.IO.IniFilename;
 | 
				
			||||||
    if (!filename)
 | 
					    if (!filename)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@@ -1553,7 +1554,7 @@ static void LoadSettings()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void SaveSettings()
 | 
					static void SaveSettings()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    const char* filename = g.IO.IniFilename;
 | 
					    const char* filename = g.IO.IniFilename;
 | 
				
			||||||
    if (!filename)
 | 
					    if (!filename)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@@ -1592,25 +1593,36 @@ static void SaveSettings()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void MarkSettingsDirty()
 | 
					static void MarkSettingsDirty()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (g.SettingsDirtyTimer <= 0.0f)
 | 
					    if (g.SettingsDirtyTimer <= 0.0f)
 | 
				
			||||||
        g.SettingsDirtyTimer = g.IO.IniSavingRate;
 | 
					        g.SettingsDirtyTimer = g.IO.IniSavingRate;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void* ImGui::GetInternalState()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return GImGui;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ImGui::SetInternalState(void* state)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						GImGui = (ImGuiState*)state;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ImGuiIO& ImGui::GetIO()
 | 
					ImGuiIO& ImGui::GetIO()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return GImGui.IO;
 | 
					    return GImGui->IO;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ImGuiStyle& ImGui::GetStyle()
 | 
					ImGuiStyle& ImGui::GetStyle()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return GImGui.Style;
 | 
					    return GImGui->Style;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui::NewFrame()
 | 
					void ImGui::NewFrame()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Check user data
 | 
					    // Check user data
 | 
				
			||||||
    IM_ASSERT(g.IO.DeltaTime > 0.0f);
 | 
					    IM_ASSERT(g.IO.DeltaTime > 0.0f);
 | 
				
			||||||
@@ -1752,7 +1764,7 @@ void ImGui::NewFrame()
 | 
				
			|||||||
// NB: behaviour of ImGui after Shutdown() is not tested/guaranteed at the moment. This function is merely here to free heap allocations.
 | 
					// NB: behaviour of ImGui after Shutdown() is not tested/guaranteed at the moment. This function is merely here to free heap allocations.
 | 
				
			||||||
void ImGui::Shutdown()
 | 
					void ImGui::Shutdown()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    if (!g.Initialized)
 | 
					    if (!g.Initialized)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1840,7 +1852,7 @@ static void PopClipRect()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::Render()
 | 
					void ImGui::Render()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    IM_ASSERT(g.Initialized);                       // Forgot to call ImGui::NewFrame()
 | 
					    IM_ASSERT(g.Initialized);                       // Forgot to call ImGui::NewFrame()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const bool first_render_of_the_frame = (g.FrameCountRendered != g.FrameCount);
 | 
					    const bool first_render_of_the_frame = (g.FrameCountRendered != g.FrameCount);
 | 
				
			||||||
@@ -1940,7 +1952,7 @@ static const char*  FindTextDisplayEnd(const char* text, const char* text_end =
 | 
				
			|||||||
// Pass text data straight to log (without being displayed)
 | 
					// Pass text data straight to log (without being displayed)
 | 
				
			||||||
void ImGui::LogText(const char* fmt, ...)
 | 
					void ImGui::LogText(const char* fmt, ...)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    if (!g.LogEnabled)
 | 
					    if (!g.LogEnabled)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1960,7 +1972,7 @@ void ImGui::LogText(const char* fmt, ...)
 | 
				
			|||||||
// Internal version that takes a position to decide on newline placement and pad items according to their depth.
 | 
					// Internal version that takes a position to decide on newline placement and pad items according to their depth.
 | 
				
			||||||
static void LogText(const ImVec2& ref_pos, const char* text, const char* text_end)
 | 
					static void LogText(const ImVec2& ref_pos, const char* text, const char* text_end)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!text_end)
 | 
					    if (!text_end)
 | 
				
			||||||
@@ -2026,7 +2038,7 @@ static float CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x)
 | 
				
			|||||||
// RenderText() calls ImDrawList::AddText() calls ImBitmapFont::RenderText()
 | 
					// RenderText() calls ImDrawList::AddText() calls ImBitmapFont::RenderText()
 | 
				
			||||||
static void RenderText(ImVec2 pos, const char* text, const char* text_end, bool hide_text_after_hash, float wrap_width)
 | 
					static void RenderText(ImVec2 pos, const char* text, const char* text_end, bool hide_text_after_hash, float wrap_width)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Hide anything after a '##' string
 | 
					    // Hide anything after a '##' string
 | 
				
			||||||
@@ -2098,7 +2110,7 @@ static void RenderCollapseTriangle(ImVec2 p_min, bool opened, float scale, bool
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Calculate text size. Text can be multi-line. Optionally ignore text after a ## marker.
 | 
					// Calculate text size. Text can be multi-line. Optionally ignore text after a ## marker.
 | 
				
			||||||
// CalcTextSize("") should return ImVec2(0.0f, GImGui.FontSize)
 | 
					// CalcTextSize("") should return ImVec2(0.0f, GImGui->FontSize)
 | 
				
			||||||
ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool hide_text_after_double_hash, float wrap_width)
 | 
					ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool hide_text_after_double_hash, float wrap_width)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
@@ -2125,7 +2137,7 @@ ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool hide_tex
 | 
				
			|||||||
// Find window given position, search front-to-back
 | 
					// Find window given position, search front-to-back
 | 
				
			||||||
static ImGuiWindow* FindHoveredWindow(ImVec2 pos, bool excluding_childs)
 | 
					static ImGuiWindow* FindHoveredWindow(ImVec2 pos, bool excluding_childs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    for (int i = (int)g.Windows.size()-1; i >= 0; i--)
 | 
					    for (int i = (int)g.Windows.size()-1; i >= 0; i--)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ImGuiWindow* window = g.Windows[(size_t)i];
 | 
					        ImGuiWindow* window = g.Windows[(size_t)i];
 | 
				
			||||||
@@ -2145,7 +2157,7 @@ static ImGuiWindow* FindHoveredWindow(ImVec2 pos, bool excluding_childs)
 | 
				
			|||||||
// NB- Expand the aabb to be generous on imprecise inputs systems (g.Style.TouchExtraPadding)
 | 
					// NB- Expand the aabb to be generous on imprecise inputs systems (g.Style.TouchExtraPadding)
 | 
				
			||||||
static bool IsMouseHoveringBox(const ImGuiAabb& box)
 | 
					static bool IsMouseHoveringBox(const ImGuiAabb& box)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Clip
 | 
					    // Clip
 | 
				
			||||||
@@ -2168,14 +2180,14 @@ bool ImGui::IsMouseHoveringBox(const ImVec2& box_min, const ImVec2& box_max)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool ImGui::IsMouseHoveringWindow()
 | 
					bool ImGui::IsMouseHoveringWindow()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    return g.HoveredWindow == window;
 | 
					    return g.HoveredWindow == window;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ImGui::IsMouseHoveringAnyWindow()
 | 
					bool ImGui::IsMouseHoveringAnyWindow()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    return g.HoveredWindow != NULL;
 | 
					    return g.HoveredWindow != NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2186,14 +2198,14 @@ bool ImGui::IsPosHoveringAnyWindow(const ImVec2& pos)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static bool IsKeyPressedMap(ImGuiKey key, bool repeat)
 | 
					static bool IsKeyPressedMap(ImGuiKey key, bool repeat)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    const int key_index = g.IO.KeyMap[key];
 | 
					    const int key_index = g.IO.KeyMap[key];
 | 
				
			||||||
    return ImGui::IsKeyPressed(key_index, repeat);
 | 
					    return ImGui::IsKeyPressed(key_index, repeat);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ImGui::IsKeyPressed(int key_index, bool repeat)
 | 
					bool ImGui::IsKeyPressed(int key_index, bool repeat)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    IM_ASSERT(key_index >= 0 && key_index < IM_ARRAYSIZE(g.IO.KeysDown));
 | 
					    IM_ASSERT(key_index >= 0 && key_index < IM_ARRAYSIZE(g.IO.KeysDown));
 | 
				
			||||||
    const float t = g.IO.KeysDownTime[key_index];
 | 
					    const float t = g.IO.KeysDownTime[key_index];
 | 
				
			||||||
    if (t == 0.0f)
 | 
					    if (t == 0.0f)
 | 
				
			||||||
@@ -2211,7 +2223,7 @@ bool ImGui::IsKeyPressed(int key_index, bool repeat)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool ImGui::IsMouseClicked(int button, bool repeat)
 | 
					bool ImGui::IsMouseClicked(int button, bool repeat)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
 | 
					    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
 | 
				
			||||||
    const float t = g.IO.MouseDownTime[button];
 | 
					    const float t = g.IO.MouseDownTime[button];
 | 
				
			||||||
    if (t == 0.0f)
 | 
					    if (t == 0.0f)
 | 
				
			||||||
@@ -2229,14 +2241,14 @@ bool ImGui::IsMouseClicked(int button, bool repeat)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool ImGui::IsMouseDoubleClicked(int button)
 | 
					bool ImGui::IsMouseDoubleClicked(int button)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
 | 
					    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
 | 
				
			||||||
    return g.IO.MouseDoubleClicked[button];
 | 
					    return g.IO.MouseDoubleClicked[button];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ImVec2 ImGui::GetMousePos()
 | 
					ImVec2 ImGui::GetMousePos()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return GImGui.IO.MousePos;
 | 
					    return GImGui->IO.MousePos;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ImGui::IsItemHovered()
 | 
					bool ImGui::IsItemHovered()
 | 
				
			||||||
@@ -2247,7 +2259,7 @@ bool ImGui::IsItemHovered()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool ImGui::IsItemActive()
 | 
					bool ImGui::IsItemActive()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    if (g.ActiveId)
 | 
					    if (g.ActiveId)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ImGuiWindow* window = GetCurrentWindow();
 | 
					        ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
@@ -2271,7 +2283,7 @@ ImVec2 ImGui::GetItemBoxMax()
 | 
				
			|||||||
// Tooltip is stored and turned into a BeginTooltip()/EndTooltip() sequence at the end of the frame. Each call override previous value.
 | 
					// Tooltip is stored and turned into a BeginTooltip()/EndTooltip() sequence at the end of the frame. Each call override previous value.
 | 
				
			||||||
void ImGui::SetTooltipV(const char* fmt, va_list args)
 | 
					void ImGui::SetTooltipV(const char* fmt, va_list args)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImFormatStringV(g.Tooltip, IM_ARRAYSIZE(g.Tooltip), fmt, args);
 | 
					    ImFormatStringV(g.Tooltip, IM_ARRAYSIZE(g.Tooltip), fmt, args);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2285,17 +2297,17 @@ void ImGui::SetTooltip(const char* fmt, ...)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
float ImGui::GetTime()
 | 
					float ImGui::GetTime()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return GImGui.Time;
 | 
					    return GImGui->Time;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int ImGui::GetFrameCount()
 | 
					int ImGui::GetFrameCount()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return GImGui.FrameCount;
 | 
					    return GImGui->FrameCount;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui::BeginTooltip()
 | 
					void ImGui::BeginTooltip()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_Tooltip;
 | 
					    ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_Tooltip;
 | 
				
			||||||
    ImGui::Begin("##Tooltip", NULL, ImVec2(0,0), g.Style.Colors[ImGuiCol_TooltipBg].w, window_flags);
 | 
					    ImGui::Begin("##Tooltip", NULL, ImVec2(0,0), g.Style.Colors[ImGuiCol_TooltipBg].w, window_flags);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -2308,7 +2320,7 @@ void ImGui::EndTooltip()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::BeginChild(const char* str_id, ImVec2 size, bool border, ImGuiWindowFlags extra_flags)
 | 
					void ImGui::BeginChild(const char* str_id, ImVec2 size, bool border, ImGuiWindowFlags extra_flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImGuiWindowFlags flags = ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_ChildWindow;
 | 
					    ImGuiWindowFlags flags = ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_ChildWindow;
 | 
				
			||||||
@@ -2367,7 +2379,7 @@ void ImGui::EndChild()
 | 
				
			|||||||
static ImGuiWindow* FindWindowByName(const char* name)
 | 
					static ImGuiWindow* FindWindowByName(const char* name)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // FIXME-OPT: Consider optimizing this (e.g. sorted hashes to window pointers)
 | 
					    // FIXME-OPT: Consider optimizing this (e.g. sorted hashes to window pointers)
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    for (size_t i = 0; i != g.Windows.size(); i++)
 | 
					    for (size_t i = 0; i != g.Windows.size(); i++)
 | 
				
			||||||
        if (strcmp(g.Windows[i]->Name, name) == 0)
 | 
					        if (strcmp(g.Windows[i]->Name, name) == 0)
 | 
				
			||||||
            return g.Windows[i];
 | 
					            return g.Windows[i];
 | 
				
			||||||
@@ -2376,7 +2388,7 @@ static ImGuiWindow* FindWindowByName(const char* name)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags)
 | 
					static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Create window the first time
 | 
					    // Create window the first time
 | 
				
			||||||
    ImGuiWindow* window = (ImGuiWindow*)ImGui::MemAlloc(sizeof(ImGuiWindow));
 | 
					    ImGuiWindow* window = (ImGuiWindow*)ImGui::MemAlloc(sizeof(ImGuiWindow));
 | 
				
			||||||
@@ -2431,7 +2443,7 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFl
 | 
				
			|||||||
// - Passing non-zero 'size' is roughly equivalent to calling SetNextWindowSize(size, ImGuiSetCondition_FirstUseEver) prior to calling Begin().
 | 
					// - Passing non-zero 'size' is roughly equivalent to calling SetNextWindowSize(size, ImGuiSetCondition_FirstUseEver) prior to calling Begin().
 | 
				
			||||||
bool ImGui::Begin(const char* name, bool* p_opened, ImVec2 size, float fill_alpha, ImGuiWindowFlags flags)
 | 
					bool ImGui::Begin(const char* name, bool* p_opened, ImVec2 size, float fill_alpha, ImGuiWindowFlags flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    const ImGuiStyle& style = g.Style;
 | 
					    const ImGuiStyle& style = g.Style;
 | 
				
			||||||
    IM_ASSERT(g.Initialized);                       // Forgot to call ImGui::NewFrame()
 | 
					    IM_ASSERT(g.Initialized);                       // Forgot to call ImGui::NewFrame()
 | 
				
			||||||
    IM_ASSERT(name != NULL);                        // Must pass a name
 | 
					    IM_ASSERT(name != NULL);                        // Must pass a name
 | 
				
			||||||
@@ -2846,7 +2858,7 @@ bool ImGui::Begin(const char* name, bool* p_opened, ImVec2 size, float fill_alph
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::End()
 | 
					void ImGui::End()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = g.CurrentWindow;
 | 
					    ImGuiWindow* window = g.CurrentWindow;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImGui::Columns(1, "#CloseColumns");
 | 
					    ImGui::Columns(1, "#CloseColumns");
 | 
				
			||||||
@@ -2867,7 +2879,7 @@ void ImGui::End()
 | 
				
			|||||||
// Moving window to front of display (which happens to be back of our sorted list)
 | 
					// Moving window to front of display (which happens to be back of our sorted list)
 | 
				
			||||||
static void FocusWindow(ImGuiWindow* window)
 | 
					static void FocusWindow(ImGuiWindow* window)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    g.FocusedWindow = window;
 | 
					    g.FocusedWindow = window;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (g.Windows.back() == window)
 | 
					    if (g.Windows.back() == window)
 | 
				
			||||||
@@ -2903,7 +2915,7 @@ float ImGui::GetItemWidth()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void SetFont(ImFont* font)
 | 
					static void SetFont(ImFont* font)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    IM_ASSERT(font && font->IsLoaded());
 | 
					    IM_ASSERT(font && font->IsLoaded());
 | 
				
			||||||
    IM_ASSERT(font->Scale > 0.0f);
 | 
					    IM_ASSERT(font->Scale > 0.0f);
 | 
				
			||||||
@@ -2916,7 +2928,7 @@ static void SetFont(ImFont* font)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::PushFont(ImFont* font)
 | 
					void ImGui::PushFont(ImFont* font)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!font)
 | 
					    if (!font)
 | 
				
			||||||
        font = g.IO.Fonts->Fonts[0];
 | 
					        font = g.IO.Fonts->Fonts[0];
 | 
				
			||||||
@@ -2928,7 +2940,7 @@ void ImGui::PushFont(ImFont* font)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void  ImGui::PopFont()
 | 
					void  ImGui::PopFont()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g.CurrentWindow->DrawList->PopTextureID();
 | 
					    g.CurrentWindow->DrawList->PopTextureID();
 | 
				
			||||||
    g.FontStack.pop_back();
 | 
					    g.FontStack.pop_back();
 | 
				
			||||||
@@ -2961,7 +2973,7 @@ void ImGui::PopTextWrapPos()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::PushStyleColor(ImGuiCol idx, const ImVec4& col)
 | 
					void ImGui::PushStyleColor(ImGuiCol idx, const ImVec4& col)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImGuiColMod backup;
 | 
					    ImGuiColMod backup;
 | 
				
			||||||
    backup.Col = idx;
 | 
					    backup.Col = idx;
 | 
				
			||||||
@@ -2972,7 +2984,7 @@ void ImGui::PushStyleColor(ImGuiCol idx, const ImVec4& col)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::PopStyleColor(int count)
 | 
					void ImGui::PopStyleColor(int count)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    while (count > 0)
 | 
					    while (count > 0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -2985,7 +2997,7 @@ void ImGui::PopStyleColor(int count)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static float* GetStyleVarFloatAddr(ImGuiStyleVar idx)
 | 
					static float* GetStyleVarFloatAddr(ImGuiStyleVar idx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    switch (idx)
 | 
					    switch (idx)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    case ImGuiStyleVar_Alpha: return &g.Style.Alpha;
 | 
					    case ImGuiStyleVar_Alpha: return &g.Style.Alpha;
 | 
				
			||||||
@@ -2998,7 +3010,7 @@ static float* GetStyleVarFloatAddr(ImGuiStyleVar idx)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static ImVec2* GetStyleVarVec2Addr(ImGuiStyleVar idx)
 | 
					static ImVec2* GetStyleVarVec2Addr(ImGuiStyleVar idx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    switch (idx)
 | 
					    switch (idx)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    case ImGuiStyleVar_WindowPadding: return &g.Style.WindowPadding;
 | 
					    case ImGuiStyleVar_WindowPadding: return &g.Style.WindowPadding;
 | 
				
			||||||
@@ -3011,7 +3023,7 @@ static ImVec2* GetStyleVarVec2Addr(ImGuiStyleVar idx)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::PushStyleVar(ImGuiStyleVar idx, float val)
 | 
					void ImGui::PushStyleVar(ImGuiStyleVar idx, float val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    float* pvar = GetStyleVarFloatAddr(idx);
 | 
					    float* pvar = GetStyleVarFloatAddr(idx);
 | 
				
			||||||
    IM_ASSERT(pvar != NULL); // Called function with wrong-type? Variable is not a float.
 | 
					    IM_ASSERT(pvar != NULL); // Called function with wrong-type? Variable is not a float.
 | 
				
			||||||
@@ -3025,7 +3037,7 @@ void ImGui::PushStyleVar(ImGuiStyleVar idx, float val)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::PushStyleVar(ImGuiStyleVar idx, const ImVec2& val)
 | 
					void ImGui::PushStyleVar(ImGuiStyleVar idx, const ImVec2& val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImVec2* pvar = GetStyleVarVec2Addr(idx);
 | 
					    ImVec2* pvar = GetStyleVarVec2Addr(idx);
 | 
				
			||||||
    IM_ASSERT(pvar != NULL); // Called function with wrong-type? Varialble is not a ImVec2.
 | 
					    IM_ASSERT(pvar != NULL); // Called function with wrong-type? Varialble is not a ImVec2.
 | 
				
			||||||
@@ -3038,7 +3050,7 @@ void ImGui::PushStyleVar(ImGuiStyleVar idx, const ImVec2& val)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::PopStyleVar(int count)
 | 
					void ImGui::PopStyleVar(int count)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    while (count > 0)
 | 
					    while (count > 0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -3102,7 +3114,7 @@ const char* ImGui::GetStyleColName(ImGuiCol idx)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool ImGui::GetWindowIsFocused()
 | 
					bool ImGui::GetWindowIsFocused()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    return g.FocusedWindow == window;
 | 
					    return g.FocusedWindow == window;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -3179,21 +3191,21 @@ void ImGui::SetWindowCollapsed(bool collapsed, ImGuiSetCondition cond)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::SetNextWindowPos(const ImVec2& pos, ImGuiSetCondition cond)
 | 
					void ImGui::SetNextWindowPos(const ImVec2& pos, ImGuiSetCondition cond)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    g.SetNextWindowPosVal = pos;
 | 
					    g.SetNextWindowPosVal = pos;
 | 
				
			||||||
    g.SetNextWindowPosCond = cond ? cond : ImGuiSetCondition_Always;
 | 
					    g.SetNextWindowPosCond = cond ? cond : ImGuiSetCondition_Always;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiSetCondition cond)
 | 
					void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiSetCondition cond)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    g.SetNextWindowSizeVal = size;
 | 
					    g.SetNextWindowSizeVal = size;
 | 
				
			||||||
    g.SetNextWindowSizeCond = cond ? cond : ImGuiSetCondition_Always;
 | 
					    g.SetNextWindowSizeCond = cond ? cond : ImGuiSetCondition_Always;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui::SetNextWindowCollapsed(bool collapsed, ImGuiSetCondition cond)
 | 
					void ImGui::SetNextWindowCollapsed(bool collapsed, ImGuiSetCondition cond)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    g.SetNextWindowCollapsedVal = collapsed;
 | 
					    g.SetNextWindowCollapsedVal = collapsed;
 | 
				
			||||||
    g.SetNextWindowCollapsedCond = cond ? cond : ImGuiSetCondition_Always;
 | 
					    g.SetNextWindowCollapsedCond = cond ? cond : ImGuiSetCondition_Always;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -3206,12 +3218,12 @@ ImVec2 ImGui::GetContentRegionMax()
 | 
				
			|||||||
    if (window->DC.ColumnsCount != 1)
 | 
					    if (window->DC.ColumnsCount != 1)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        m.x = GetColumnOffset(window->DC.ColumnsCurrent + 1);
 | 
					        m.x = GetColumnOffset(window->DC.ColumnsCurrent + 1);
 | 
				
			||||||
        m.x -= GImGui.Style.WindowPadding.x;
 | 
					        m.x -= GImGui->Style.WindowPadding.x;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (window->ScrollbarY)
 | 
					        if (window->ScrollbarY)
 | 
				
			||||||
            m.x -= GImGui.Style.ScrollBarWidth;
 | 
					            m.x -= GImGui->Style.ScrollBarWidth;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return m;
 | 
					    return m;
 | 
				
			||||||
@@ -3228,7 +3240,7 @@ ImVec2 ImGui::GetWindowContentRegionMax()
 | 
				
			|||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    ImVec2 m = window->Size - window->WindowPadding();
 | 
					    ImVec2 m = window->Size - window->WindowPadding();
 | 
				
			||||||
    if (window->ScrollbarY)
 | 
					    if (window->ScrollbarY)
 | 
				
			||||||
        m.x -= GImGui.Style.ScrollBarWidth;
 | 
					        m.x -= GImGui->Style.ScrollBarWidth;
 | 
				
			||||||
    return m;
 | 
					    return m;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3240,7 +3252,7 @@ float ImGui::GetTextLineHeight()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
float ImGui::GetTextLineSpacing()
 | 
					float ImGui::GetTextLineSpacing()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    return window->FontSize() + g.Style.ItemSpacing.y;
 | 
					    return window->FontSize() + g.Style.ItemSpacing.y;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -3383,7 +3395,7 @@ void ImGui::TextWrapped(const char* fmt, ...)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::TextUnformatted(const char* text, const char* text_end)
 | 
					void ImGui::TextUnformatted(const char* text, const char* text_end)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@@ -3485,7 +3497,7 @@ void ImGui::TextUnformatted(const char* text, const char* text_end)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::AlignFirstTextHeightToWidgets()
 | 
					void ImGui::AlignFirstTextHeightToWidgets()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@@ -3498,7 +3510,7 @@ void ImGui::AlignFirstTextHeightToWidgets()
 | 
				
			|||||||
// Add a label+text combo aligned to other label+value widgets
 | 
					// Add a label+text combo aligned to other label+value widgets
 | 
				
			||||||
void ImGui::LabelTextV(const char* label, const char* fmt, va_list args)
 | 
					void ImGui::LabelTextV(const char* label, const char* fmt, va_list args)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@@ -3531,7 +3543,7 @@ void ImGui::LabelText(const char* label, const char* fmt, ...)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static bool IsHovered(const ImGuiAabb& bb, const ImGuiID& id)
 | 
					static bool IsHovered(const ImGuiAabb& bb, const ImGuiID& id)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    if (g.HoveredId == 0)
 | 
					    if (g.HoveredId == 0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ImGuiWindow* window = GetCurrentWindow();
 | 
					        ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
@@ -3543,7 +3555,7 @@ static bool IsHovered(const ImGuiAabb& bb, const ImGuiID& id)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static bool ButtonBehaviour(const ImGuiAabb& bb, const ImGuiID& id, bool* out_hovered, bool* out_held, bool allow_key_modifiers, bool repeat)
 | 
					static bool ButtonBehaviour(const ImGuiAabb& bb, const ImGuiID& id, bool* out_hovered, bool* out_held, bool allow_key_modifiers, bool repeat)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const bool hovered = IsHovered(bb, id);
 | 
					    const bool hovered = IsHovered(bb, id);
 | 
				
			||||||
@@ -3588,7 +3600,7 @@ static bool ButtonBehaviour(const ImGuiAabb& bb, const ImGuiID& id, bool* out_ho
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool ImGui::Button(const char* label, const ImVec2& size_arg, bool repeat_when_held)
 | 
					bool ImGui::Button(const char* label, const ImVec2& size_arg, bool repeat_when_held)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@@ -3624,7 +3636,7 @@ bool ImGui::Button(const char* label, const ImVec2& size_arg, bool repeat_when_h
 | 
				
			|||||||
// Small buttons fits within text without additional spacing.
 | 
					// Small buttons fits within text without additional spacing.
 | 
				
			||||||
bool ImGui::SmallButton(const char* label)
 | 
					bool ImGui::SmallButton(const char* label)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@@ -3729,7 +3741,7 @@ void ImGui::Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2&
 | 
				
			|||||||
// The color used are the button colors.
 | 
					// The color used are the button colors.
 | 
				
			||||||
bool ImGui::ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, int frame_padding, const ImVec4& bg_col)
 | 
					bool ImGui::ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, int frame_padding, const ImVec4& bg_col)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@@ -3766,7 +3778,7 @@ bool ImGui::ImageButton(ImTextureID user_texture_id, const ImVec2& size, const I
 | 
				
			|||||||
// Start logging ImGui output to TTY
 | 
					// Start logging ImGui output to TTY
 | 
				
			||||||
void ImGui::LogToTTY(int max_depth)
 | 
					void ImGui::LogToTTY(int max_depth)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (g.LogEnabled)
 | 
					    if (g.LogEnabled)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@@ -3781,7 +3793,7 @@ void ImGui::LogToTTY(int max_depth)
 | 
				
			|||||||
// Start logging ImGui output to given file
 | 
					// Start logging ImGui output to given file
 | 
				
			||||||
void ImGui::LogToFile(int max_depth, const char* filename)
 | 
					void ImGui::LogToFile(int max_depth, const char* filename)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (g.LogEnabled)
 | 
					    if (g.LogEnabled)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@@ -3804,7 +3816,7 @@ void ImGui::LogToFile(int max_depth, const char* filename)
 | 
				
			|||||||
void ImGui::LogToClipboard(int max_depth)
 | 
					void ImGui::LogToClipboard(int max_depth)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    if (g.LogEnabled)
 | 
					    if (g.LogEnabled)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3817,7 +3829,7 @@ void ImGui::LogToClipboard(int max_depth)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::LogFinish()
 | 
					void ImGui::LogFinish()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    if (!g.LogEnabled)
 | 
					    if (!g.LogEnabled)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3842,7 +3854,7 @@ void ImGui::LogFinish()
 | 
				
			|||||||
// Helper to display logging buttons
 | 
					// Helper to display logging buttons
 | 
				
			||||||
void ImGui::LogButtons()
 | 
					void ImGui::LogButtons()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImGui::PushID("LogButtons");
 | 
					    ImGui::PushID("LogButtons");
 | 
				
			||||||
    const bool log_to_tty = ImGui::Button("Log To TTY");
 | 
					    const bool log_to_tty = ImGui::Button("Log To TTY");
 | 
				
			||||||
@@ -3870,7 +3882,7 @@ void ImGui::LogButtons()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool ImGui::CollapsingHeader(const char* label, const char* str_id, const bool display_frame, const bool default_open)
 | 
					bool ImGui::CollapsingHeader(const char* label, const char* str_id, const bool display_frame, const bool default_open)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@@ -3968,7 +3980,7 @@ bool ImGui::CollapsingHeader(const char* label, const char* str_id, const bool d
 | 
				
			|||||||
// Text with a little bullet aligned to the typical tree node.
 | 
					// Text with a little bullet aligned to the typical tree node.
 | 
				
			||||||
void ImGui::BulletTextV(const char* fmt, va_list args)
 | 
					void ImGui::BulletTextV(const char* fmt, va_list args)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@@ -4129,7 +4141,7 @@ static void ApplyNumericalTextInput(const char* buf, float *v)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    float ref_v = *v;
 | 
					    float ref_v = *v;
 | 
				
			||||||
    if (op)
 | 
					    if (op)
 | 
				
			||||||
        if (sscanf(GImGui.InputTextState.InitialText, "%f", &ref_v) < 1)
 | 
					        if (sscanf(GImGui->InputTextState.InitialText, "%f", &ref_v) < 1)
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    float op_v = 0.0f;
 | 
					    float op_v = 0.0f;
 | 
				
			||||||
@@ -4154,7 +4166,7 @@ static void ApplyNumericalTextInput(const char* buf, float *v)
 | 
				
			|||||||
// Adjust display_format to decorate the value with a prefix or a suffix.
 | 
					// Adjust display_format to decorate the value with a prefix or a suffix.
 | 
				
			||||||
bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format, float power)
 | 
					bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format, float power)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@@ -4391,7 +4403,7 @@ bool ImGui::SliderInt(const char* label, int* v, int v_min, int v_max, const cha
 | 
				
			|||||||
// Add multiple sliders on 1 line for compact edition of multiple components
 | 
					// Add multiple sliders on 1 line for compact edition of multiple components
 | 
				
			||||||
static bool SliderFloatN(const char* label, float v[3], int components, float v_min, float v_max, const char* display_format, float power)
 | 
					static bool SliderFloatN(const char* label, float v[3], int components, float v_min, float v_max, const char* display_format, float power)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@@ -4441,7 +4453,7 @@ bool ImGui::SliderFloat4(const char* label, float v[4], float v_min, float v_max
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static bool SliderIntN(const char* label, int v[3], int components, int v_min, int v_max, const char* display_format)
 | 
					static bool SliderIntN(const char* label, int v[3], int components, int v_min, int v_max, const char* display_format)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@@ -4497,7 +4509,7 @@ enum ImGuiPlotType
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void Plot(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size)
 | 
					static void Plot(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@@ -4630,7 +4642,7 @@ void ImGui::PlotHistogram(const char* label, float (*values_getter)(void* data,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool ImGui::Checkbox(const char* label, bool* v)
 | 
					bool ImGui::Checkbox(const char* label, bool* v)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@@ -4688,7 +4700,7 @@ bool ImGui::CheckboxFlags(const char* label, unsigned int* flags, unsigned int f
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool ImGui::RadioButton(const char* label, bool active)
 | 
					bool ImGui::RadioButton(const char* label, bool active)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@@ -4898,7 +4910,7 @@ void ImGuiTextEditState::RenderTextScrolledClipped(ImFont* font, float font_size
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool ImGui::InputFloat(const char* label, float *v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags)
 | 
					bool ImGui::InputFloat(const char* label, float *v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@@ -5024,7 +5036,7 @@ static bool InputTextFilterCharacter(ImWchar c, ImGuiInputTextFlags flags)
 | 
				
			|||||||
// Edit a string of text
 | 
					// Edit a string of text
 | 
				
			||||||
bool ImGui::InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags, void (*callback)(ImGuiTextEditCallbackData*), void* user_data)
 | 
					bool ImGui::InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags, void (*callback)(ImGuiTextEditCallbackData*), void* user_data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@@ -5316,7 +5328,7 @@ bool ImGui::InputText(const char* label, char* buf, size_t buf_size, ImGuiInputT
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static bool InputFloatN(const char* label, float* v, int components, int decimal_precision)
 | 
					static bool InputFloatN(const char* label, float* v, int components, int decimal_precision)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@@ -5416,7 +5428,7 @@ bool ImGui::Combo(const char* label, int* current_item, const char* items_separa
 | 
				
			|||||||
// Combo box function.
 | 
					// Combo box function.
 | 
				
			||||||
bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int popup_height_items)
 | 
					bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int popup_height_items)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@@ -5538,7 +5550,7 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
 | 
				
			|||||||
// A little colored square. Return true when clicked.
 | 
					// A little colored square. Return true when clicked.
 | 
				
			||||||
bool ImGui::ColorButton(const ImVec4& col, bool small_height, bool outline_border)
 | 
					bool ImGui::ColorButton(const ImVec4& col, bool small_height, bool outline_border)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@@ -5585,7 +5597,7 @@ bool ImGui::ColorEdit3(const char* label, float col[3])
 | 
				
			|||||||
// Use CTRL-Click to input value and TAB to go to next item.
 | 
					// Use CTRL-Click to input value and TAB to go to next item.
 | 
				
			||||||
bool ImGui::ColorEdit4(const char* label, float col[4], bool alpha)
 | 
					bool ImGui::ColorEdit4(const char* label, float col[4], bool alpha)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@@ -5768,7 +5780,7 @@ void ImGui::Spacing()
 | 
				
			|||||||
// Advance cursor given item size.
 | 
					// Advance cursor given item size.
 | 
				
			||||||
static void ItemSize(ImVec2 size, ImVec2* adjust_vertical_offset)
 | 
					static void ItemSize(ImVec2 size, ImVec2* adjust_vertical_offset)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@@ -5794,7 +5806,7 @@ static void ItemSize(const ImGuiAabb& aabb, ImVec2* adjust_start_offset)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static bool IsClipped(const ImGuiAabb& bb)
 | 
					static bool IsClipped(const ImGuiAabb& bb)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!bb.Overlaps(ImGuiAabb(window->ClipRectStack.back())) && !g.LogEnabled)
 | 
					    if (!bb.Overlaps(ImGuiAabb(window->ClipRectStack.back())) && !g.LogEnabled)
 | 
				
			||||||
@@ -5829,7 +5841,7 @@ static bool ItemAdd(const ImGuiAabb& bb, const ImGuiID* id)
 | 
				
			|||||||
//      spacing_w >= 0  : enforce spacing
 | 
					//      spacing_w >= 0  : enforce spacing
 | 
				
			||||||
void ImGui::SameLine(int column_x, int spacing_w)
 | 
					void ImGui::SameLine(int column_x, int spacing_w)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@@ -5853,7 +5865,7 @@ void ImGui::SameLine(int column_x, int spacing_w)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::NextColumn()
 | 
					void ImGui::NextColumn()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@@ -5885,7 +5897,7 @@ void ImGui::NextColumn()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
float ImGui::GetColumnOffset(int column_index)
 | 
					float ImGui::GetColumnOffset(int column_index)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (column_index < 0)
 | 
					    if (column_index < 0)
 | 
				
			||||||
        column_index = window->DC.ColumnsCurrent;
 | 
					        column_index = window->DC.ColumnsCurrent;
 | 
				
			||||||
@@ -5901,7 +5913,7 @@ float ImGui::GetColumnOffset(int column_index)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::SetColumnOffset(int column_index, float offset)
 | 
					void ImGui::SetColumnOffset(int column_index, float offset)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (column_index < 0)
 | 
					    if (column_index < 0)
 | 
				
			||||||
        column_index = window->DC.ColumnsCurrent;
 | 
					        column_index = window->DC.ColumnsCurrent;
 | 
				
			||||||
@@ -5934,7 +5946,7 @@ static void PushColumnClipRect(int column_index)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::Columns(int columns_count, const char* id, bool border)
 | 
					void ImGui::Columns(int columns_count, const char* id, bool border)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@@ -6002,7 +6014,7 @@ void ImGui::Columns(int columns_count, const char* id, bool border)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::TreePush(const char* str_id)
 | 
					void ImGui::TreePush(const char* str_id)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    window->DC.ColumnsStartX += g.Style.TreeNodeSpacing;
 | 
					    window->DC.ColumnsStartX += g.Style.TreeNodeSpacing;
 | 
				
			||||||
    window->DC.CursorPos.x = window->Pos.x + window->DC.ColumnsStartX + window->DC.ColumnsOffsetX;
 | 
					    window->DC.CursorPos.x = window->Pos.x + window->DC.ColumnsStartX + window->DC.ColumnsOffsetX;
 | 
				
			||||||
@@ -6012,7 +6024,7 @@ void ImGui::TreePush(const char* str_id)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::TreePush(const void* ptr_id)
 | 
					void ImGui::TreePush(const void* ptr_id)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    window->DC.ColumnsStartX += g.Style.TreeNodeSpacing;
 | 
					    window->DC.ColumnsStartX += g.Style.TreeNodeSpacing;
 | 
				
			||||||
    window->DC.CursorPos.x = window->Pos.x + window->DC.ColumnsStartX + window->DC.ColumnsOffsetX;
 | 
					    window->DC.CursorPos.x = window->Pos.x + window->DC.ColumnsStartX + window->DC.ColumnsOffsetX;
 | 
				
			||||||
@@ -6022,7 +6034,7 @@ void ImGui::TreePush(const void* ptr_id)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::TreePop()
 | 
					void ImGui::TreePop()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    window->DC.ColumnsStartX -= g.Style.TreeNodeSpacing;
 | 
					    window->DC.ColumnsStartX -= g.Style.TreeNodeSpacing;
 | 
				
			||||||
    window->DC.CursorPos.x = window->Pos.x + window->DC.ColumnsStartX + window->DC.ColumnsOffsetX;
 | 
					    window->DC.CursorPos.x = window->Pos.x + window->DC.ColumnsStartX + window->DC.ColumnsOffsetX;
 | 
				
			||||||
@@ -6189,7 +6201,7 @@ void ImDrawList::AddVtx(const ImVec2& pos, ImU32 col)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    vtx_write->pos = pos;
 | 
					    vtx_write->pos = pos;
 | 
				
			||||||
    vtx_write->col = col;
 | 
					    vtx_write->col = col;
 | 
				
			||||||
    vtx_write->uv = GImGui.FontTexUvWhitePixel;
 | 
					    vtx_write->uv = GImGui->FontTexUvWhitePixel;
 | 
				
			||||||
    vtx_write++;
 | 
					    vtx_write++;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -7513,21 +7525,21 @@ static void SetClipboardTextFn_DefaultImpl(const char* text)
 | 
				
			|||||||
// Local ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers
 | 
					// Local ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers
 | 
				
			||||||
static const char*  GetClipboardTextFn_DefaultImpl()
 | 
					static const char*  GetClipboardTextFn_DefaultImpl()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return GImGui.PrivateClipboard;
 | 
					    return GImGui->PrivateClipboard;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Local ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers
 | 
					// Local ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers
 | 
				
			||||||
static void SetClipboardTextFn_DefaultImpl(const char* text)
 | 
					static void SetClipboardTextFn_DefaultImpl(const char* text)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (GImGui.PrivateClipboard)
 | 
					    if (GImGui->PrivateClipboard)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ImGui::MemFree(GImGui.PrivateClipboard);
 | 
					        ImGui::MemFree(GImGui->PrivateClipboard);
 | 
				
			||||||
        GImGui.PrivateClipboard = NULL;
 | 
					        GImGui->PrivateClipboard = NULL;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    const char* text_end = text + strlen(text);
 | 
					    const char* text_end = text + strlen(text);
 | 
				
			||||||
    GImGui.PrivateClipboard = (char*)ImGui::MemAlloc((size_t)(text_end - text) + 1);
 | 
					    GImGui->PrivateClipboard = (char*)ImGui::MemAlloc((size_t)(text_end - text) + 1);
 | 
				
			||||||
    memcpy(GImGui.PrivateClipboard, text, (size_t)(text_end - text));
 | 
					    memcpy(GImGui->PrivateClipboard, text, (size_t)(text_end - text));
 | 
				
			||||||
    GImGui.PrivateClipboard[(size_t)(text_end - text)] = 0;
 | 
					    GImGui->PrivateClipboard[(size_t)(text_end - text)] = 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -7538,7 +7550,7 @@ static void SetClipboardTextFn_DefaultImpl(const char* text)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::ShowUserGuide()
 | 
					void ImGui::ShowUserGuide()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImGui::BulletText("Double-click on title bar to collapse window.");
 | 
					    ImGui::BulletText("Double-click on title bar to collapse window.");
 | 
				
			||||||
    ImGui::BulletText("Click and drag on lower right corner to resize window.");
 | 
					    ImGui::BulletText("Click and drag on lower right corner to resize window.");
 | 
				
			||||||
@@ -7562,7 +7574,7 @@ void ImGui::ShowUserGuide()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::ShowStyleEditor(ImGuiStyle* ref)
 | 
					void ImGui::ShowStyleEditor(ImGuiStyle* ref)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiState& g = GImGui;
 | 
					    ImGuiState& g = *GImGui;
 | 
				
			||||||
    ImGuiStyle& style = g.Style;
 | 
					    ImGuiStyle& style = g.Style;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const ImGuiStyle def; // Default style
 | 
					    const ImGuiStyle def; // Default style
 | 
				
			||||||
@@ -7682,8 +7694,8 @@ void ImGui::ShowTestWindow(bool* opened)
 | 
				
			|||||||
    ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.65f);
 | 
					    ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.65f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImGui::Text("ImGui says hello.");
 | 
					    ImGui::Text("ImGui says hello.");
 | 
				
			||||||
    //ImGui::Text("MousePos (%g, %g)", ImGui::GetIO().MousePos.x, ImGui::GetIO().MousePos.y);
 | 
						ImGui::Text("MousePos (%g, %g)", ImGui::GetIO().MousePos.x, ImGui::GetIO().MousePos.y);
 | 
				
			||||||
    //ImGui::Text("MouseWheel %d", ImGui::GetIO().MouseWheel);
 | 
					    ImGui::Text("MouseWheel %d", ImGui::GetIO().MouseWheel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImGui::Spacing();
 | 
					    ImGui::Spacing();
 | 
				
			||||||
    if (ImGui::CollapsingHeader("Help"))
 | 
					    if (ImGui::CollapsingHeader("Help"))
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								imgui.h
									
									
									
									
									
								
							@@ -143,6 +143,8 @@ public:
 | 
				
			|||||||
namespace ImGui
 | 
					namespace ImGui
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // Main
 | 
					    // Main
 | 
				
			||||||
 | 
						IMGUI_API void*         GetInternalState();
 | 
				
			||||||
 | 
						IMGUI_API void          SetInternalState(void* state);
 | 
				
			||||||
    IMGUI_API ImGuiIO&      GetIO();
 | 
					    IMGUI_API ImGuiIO&      GetIO();
 | 
				
			||||||
    IMGUI_API ImGuiStyle&   GetStyle();
 | 
					    IMGUI_API ImGuiStyle&   GetStyle();
 | 
				
			||||||
    IMGUI_API void          NewFrame();
 | 
					    IMGUI_API void          NewFrame();
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user