mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-11-04 09:44:29 +00:00 
			
		
		
		
	Merge branch 'master' into navigation
# Conflicts: # imgui.cpp # imgui_internal.h
This commit is contained in:
		
							
								
								
									
										3
									
								
								TODO.txt
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								TODO.txt
									
									
									
									
									
								
							@@ -99,6 +99,7 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i
 | 
				
			|||||||
 - plot: add a helper e.g. Plot(char* label, float value, float time_span=2.0f) that stores values and Plot them for you - probably another function name. and/or automatically allow to plot ANY displayed value (more reliance on stable ID)
 | 
					 - plot: add a helper e.g. Plot(char* label, float value, float time_span=2.0f) that stores values and Plot them for you - probably another function name. and/or automatically allow to plot ANY displayed value (more reliance on stable ID)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 - clipper: ability to force display 1 item in the list would be convenient. 
 | 
					 - clipper: ability to force display 1 item in the list would be convenient. 
 | 
				
			||||||
 | 
					 - clipper: ability to run without knowing full count in advance.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 - splitter/separator: formalize the splitter idiom into an official api (we want to handle n-way split) (#319)
 | 
					 - splitter/separator: formalize the splitter idiom into an official api (we want to handle n-way split) (#319)
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -156,6 +157,7 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 - text: proper alignment options in imgui_internal.h
 | 
					 - text: proper alignment options in imgui_internal.h
 | 
				
			||||||
 - text wrapped: figure out better way to use TextWrapped() in an always auto-resize context (tooltip, etc.) (#249)
 | 
					 - text wrapped: figure out better way to use TextWrapped() in an always auto-resize context (tooltip, etc.) (#249)
 | 
				
			||||||
 | 
					 - text: it's currently impossible to have a window title with "##". perhaps an official workaround would be nice. \ style inhibitor? non-visible ascii code to insert between #?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 - tree node / optimization: avoid formatting when clipped.
 | 
					 - tree node / optimization: avoid formatting when clipped.
 | 
				
			||||||
 - tree node: tree-node/header right-most side doesn't take account of horizontal scrolling.
 | 
					 - tree node: tree-node/header right-most side doesn't take account of horizontal scrolling.
 | 
				
			||||||
@@ -215,6 +217,7 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i
 | 
				
			|||||||
 - keyboard: full keyboard navigation and focus. (#323)
 | 
					 - keyboard: full keyboard navigation and focus. (#323)
 | 
				
			||||||
 - focus: preserve ActiveId/focus stack state, e.g. when opening a menu and close it, previously selected InputText() focus gets restored (#622)
 | 
					 - focus: preserve ActiveId/focus stack state, e.g. when opening a menu and close it, previously selected InputText() focus gets restored (#622)
 | 
				
			||||||
 - focus: SetKeyboardFocusHere() on with >= 0 offset could be done on same frame (else latch and modulate on beginning of next frame)
 | 
					 - focus: SetKeyboardFocusHere() on with >= 0 offset could be done on same frame (else latch and modulate on beginning of next frame)
 | 
				
			||||||
 | 
					 - focus: unable to use SetKeyboardFocusHere() on clipped widgets. (#343)
 | 
				
			||||||
 - inputs: rework IO system to be able to pass actual ordered/timestamped events. use an event queue? (~#335, #71)
 | 
					 - inputs: rework IO system to be able to pass actual ordered/timestamped events. use an event queue? (~#335, #71)
 | 
				
			||||||
 - inputs: allow to decide and pass explicit double-clicks (e.g. for windows by the CS_DBLCLKS style).
 | 
					 - inputs: allow to decide and pass explicit double-clicks (e.g. for windows by the CS_DBLCLKS style).
 | 
				
			||||||
 - inputs: support track pad style scrolling & slider edit.
 | 
					 - inputs: support track pad style scrolling & slider edit.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -72,9 +72,8 @@ int main(int, char**)
 | 
				
			|||||||
        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
					        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
				
			||||||
        if (show_another_window)
 | 
					        if (show_another_window)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ImGui::SetNextWindowSize(ImVec2(200, 100), ImGuiCond_FirstUseEver);
 | 
					 | 
				
			||||||
            ImGui::Begin("Another Window", &show_another_window);
 | 
					            ImGui::Begin("Another Window", &show_another_window);
 | 
				
			||||||
            ImGui::Text("Hello");
 | 
					            ImGui::Text("Hello from another window!");
 | 
				
			||||||
            ImGui::End();
 | 
					            ImGui::End();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,8 +34,8 @@ void DebugHUD_DoInterface(DebugHUD *hud)
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    if (hud->show_example_window)
 | 
					    if (hud->show_example_window)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ImGui::SetNextWindowSize(ImVec2(350, 200), ImGuiCond_FirstUseEver);
 | 
					 | 
				
			||||||
        ImGui::Begin("Another Window", &hud->show_example_window);
 | 
					        ImGui::Begin("Another Window", &hud->show_example_window);
 | 
				
			||||||
 | 
					        ImGui::Text("Hello from another window!");
 | 
				
			||||||
        ImGui::ColorEdit3("Cube 1 Color", hud->cubeColor1);
 | 
					        ImGui::ColorEdit3("Cube 1 Color", hud->cubeColor1);
 | 
				
			||||||
        ImGui::ColorEdit3("Cube 2 Color", hud->cubeColor2);
 | 
					        ImGui::ColorEdit3("Cube 2 Color", hud->cubeColor2);
 | 
				
			||||||
        ImGui::SliderFloat("Rotation Speed", &hud->rotation_speed, 0.0f, 200.0f);
 | 
					        ImGui::SliderFloat("Rotation Speed", &hud->rotation_speed, 0.0f, 200.0f);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -167,9 +167,8 @@ int main(int, char**)
 | 
				
			|||||||
        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
					        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
				
			||||||
        if (show_another_window)
 | 
					        if (show_another_window)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ImGui::SetNextWindowSize(ImVec2(200,100), ImGuiCond_FirstUseEver);
 | 
					 | 
				
			||||||
            ImGui::Begin("Another Window", &show_another_window);
 | 
					            ImGui::Begin("Another Window", &show_another_window);
 | 
				
			||||||
            ImGui::Text("Hello");
 | 
					            ImGui::Text("Hello from another window!");
 | 
				
			||||||
            ImGui::End();
 | 
					            ImGui::End();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -170,9 +170,8 @@ int main(int, char**)
 | 
				
			|||||||
        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
					        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
				
			||||||
        if (show_another_window)
 | 
					        if (show_another_window)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ImGui::SetNextWindowSize(ImVec2(200,100), ImGuiCond_FirstUseEver);
 | 
					 | 
				
			||||||
            ImGui::Begin("Another Window", &show_another_window);
 | 
					            ImGui::Begin("Another Window", &show_another_window);
 | 
				
			||||||
            ImGui::Text("Hello");
 | 
					            ImGui::Text("Hello from another window!");
 | 
				
			||||||
            ImGui::End();
 | 
					            ImGui::End();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -121,9 +121,8 @@ int main(int, char**)
 | 
				
			|||||||
        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
					        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
				
			||||||
        if (show_another_window)
 | 
					        if (show_another_window)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ImGui::SetNextWindowSize(ImVec2(200,100), ImGuiCond_FirstUseEver);
 | 
					 | 
				
			||||||
            ImGui::Begin("Another Window", &show_another_window);
 | 
					            ImGui::Begin("Another Window", &show_another_window);
 | 
				
			||||||
            ImGui::Text("Hello");
 | 
					            ImGui::Text("Hello from another window!");
 | 
				
			||||||
            ImGui::End();
 | 
					            ImGui::End();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,9 +56,8 @@ int main(int, char**)
 | 
				
			|||||||
        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
					        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
				
			||||||
        if (show_another_window)
 | 
					        if (show_another_window)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ImGui::SetNextWindowSize(ImVec2(200,100), ImGuiCond_FirstUseEver);
 | 
					 | 
				
			||||||
            ImGui::Begin("Another Window", &show_another_window);
 | 
					            ImGui::Begin("Another Window", &show_another_window);
 | 
				
			||||||
            ImGui::Text("Hello");
 | 
					            ImGui::Text("Hello from another window!");
 | 
				
			||||||
            ImGui::End();
 | 
					            ImGui::End();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,9 +31,9 @@ static float        g_MouseWheel = 0.0f;
 | 
				
			|||||||
static GLuint       g_FontTexture = 0;
 | 
					static GLuint       g_FontTexture = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure)
 | 
					// This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure)
 | 
				
			||||||
// If text or lines are blurry when integrating ImGui in your engine:
 | 
					void ImGui_ImplGlfwGL2_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			||||||
// - in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f)
 | 
					// Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. 
 | 
				
			||||||
void ImGui_ImplGlfw_RenderDrawLists(ImDrawData* draw_data)
 | 
					// If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates)
 | 
					    // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates)
 | 
				
			||||||
    ImGuiIO& io = ImGui::GetIO();
 | 
					    ImGuiIO& io = ImGui::GetIO();
 | 
				
			||||||
@@ -44,8 +44,9 @@ void ImGui_ImplGlfw_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    draw_data->ScaleClipRects(io.DisplayFramebufferScale);
 | 
					    draw_data->ScaleClipRects(io.DisplayFramebufferScale);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // We are using the OpenGL fixed pipeline to make the example code simpler to read!
 | 
					    // We are using the OpenGL fixed pipeline to make the example code simpler to read!
 | 
				
			||||||
    // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, vertex/texcoord/color pointers.
 | 
					    // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, vertex/texcoord/color pointers, polygon fill.
 | 
				
			||||||
    GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
 | 
					    GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
 | 
				
			||||||
 | 
					    GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode);
 | 
				
			||||||
    GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport);
 | 
					    GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport);
 | 
				
			||||||
    GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box); 
 | 
					    GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box); 
 | 
				
			||||||
    glPushAttrib(GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT | GL_TRANSFORM_BIT);
 | 
					    glPushAttrib(GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT | GL_TRANSFORM_BIT);
 | 
				
			||||||
@@ -58,6 +59,7 @@ void ImGui_ImplGlfw_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 | 
					    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 | 
				
			||||||
    glEnableClientState(GL_COLOR_ARRAY);
 | 
					    glEnableClientState(GL_COLOR_ARRAY);
 | 
				
			||||||
    glEnable(GL_TEXTURE_2D);
 | 
					    glEnable(GL_TEXTURE_2D);
 | 
				
			||||||
 | 
					    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
 | 
				
			||||||
    //glUseProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound
 | 
					    //glUseProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Setup viewport, orthographic projection matrix
 | 
					    // Setup viewport, orthographic projection matrix
 | 
				
			||||||
@@ -109,32 +111,33 @@ void ImGui_ImplGlfw_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    glMatrixMode(GL_PROJECTION);
 | 
					    glMatrixMode(GL_PROJECTION);
 | 
				
			||||||
    glPopMatrix();
 | 
					    glPopMatrix();
 | 
				
			||||||
    glPopAttrib();
 | 
					    glPopAttrib();
 | 
				
			||||||
 | 
					    glPolygonMode(GL_FRONT, last_polygon_mode[0]); glPolygonMode(GL_BACK, last_polygon_mode[1]);
 | 
				
			||||||
    glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]);
 | 
					    glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]);
 | 
				
			||||||
    glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]);
 | 
					    glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char* ImGui_ImplGlfw_GetClipboardText(void* user_data)
 | 
					static const char* ImGui_ImplGlfwGL2_GetClipboardText(void* user_data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return glfwGetClipboardString((GLFWwindow*)user_data);
 | 
					    return glfwGetClipboardString((GLFWwindow*)user_data);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void ImGui_ImplGlfw_SetClipboardText(void* user_data, const char* text)
 | 
					static void ImGui_ImplGlfwGL2_SetClipboardText(void* user_data, const char* text)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    glfwSetClipboardString((GLFWwindow*)user_data, text);
 | 
					    glfwSetClipboardString((GLFWwindow*)user_data, text);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow*, int button, int action, int /*mods*/)
 | 
					void ImGui_ImplGlfwGL2_MouseButtonCallback(GLFWwindow*, int button, int action, int /*mods*/)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (action == GLFW_PRESS && button >= 0 && button < 3)
 | 
					    if (action == GLFW_PRESS && button >= 0 && button < 3)
 | 
				
			||||||
        g_MousePressed[button] = true;
 | 
					        g_MousePressed[button] = true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui_ImplGlfw_ScrollCallback(GLFWwindow*, double /*xoffset*/, double yoffset)
 | 
					void ImGui_ImplGlfwGL2_ScrollCallback(GLFWwindow*, double /*xoffset*/, double yoffset)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    g_MouseWheel += (float)yoffset; // Use fractional mouse wheel, 1.0 unit 5 lines.
 | 
					    g_MouseWheel += (float)yoffset; // Use fractional mouse wheel, 1.0 unit 5 lines.
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui_ImplGlFw_KeyCallback(GLFWwindow*, int key, int, int action, int mods)
 | 
					void ImGui_ImplGlfwGL2_KeyCallback(GLFWwindow*, int key, int, int action, int mods)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiIO& io = ImGui::GetIO();
 | 
					    ImGuiIO& io = ImGui::GetIO();
 | 
				
			||||||
    if (action == GLFW_PRESS)
 | 
					    if (action == GLFW_PRESS)
 | 
				
			||||||
@@ -149,14 +152,14 @@ void ImGui_ImplGlFw_KeyCallback(GLFWwindow*, int key, int, int action, int mods)
 | 
				
			|||||||
    io.KeySuper = io.KeysDown[GLFW_KEY_LEFT_SUPER] || io.KeysDown[GLFW_KEY_RIGHT_SUPER];
 | 
					    io.KeySuper = io.KeysDown[GLFW_KEY_LEFT_SUPER] || io.KeysDown[GLFW_KEY_RIGHT_SUPER];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui_ImplGlfw_CharCallback(GLFWwindow*, unsigned int c)
 | 
					void ImGui_ImplGlfwGL2_CharCallback(GLFWwindow*, unsigned int c)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiIO& io = ImGui::GetIO();
 | 
					    ImGuiIO& io = ImGui::GetIO();
 | 
				
			||||||
    if (c > 0 && c < 0x10000)
 | 
					    if (c > 0 && c < 0x10000)
 | 
				
			||||||
        io.AddInputCharacter((unsigned short)c);
 | 
					        io.AddInputCharacter((unsigned short)c);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ImGui_ImplGlfw_CreateDeviceObjects()
 | 
					bool ImGui_ImplGlfwGL2_CreateDeviceObjects()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // Build texture atlas
 | 
					    // Build texture atlas
 | 
				
			||||||
    ImGuiIO& io = ImGui::GetIO();
 | 
					    ImGuiIO& io = ImGui::GetIO();
 | 
				
			||||||
@@ -182,7 +185,7 @@ bool ImGui_ImplGlfw_CreateDeviceObjects()
 | 
				
			|||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void    ImGui_ImplGlfw_InvalidateDeviceObjects()
 | 
					void    ImGui_ImplGlfwGL2_InvalidateDeviceObjects()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (g_FontTexture)
 | 
					    if (g_FontTexture)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -192,7 +195,7 @@ void    ImGui_ImplGlfw_InvalidateDeviceObjects()
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool    ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks)
 | 
					bool    ImGui_ImplGlfwGL2_Init(GLFWwindow* window, bool install_callbacks)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    g_Window = window;
 | 
					    g_Window = window;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -217,9 +220,9 @@ bool    ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks)
 | 
				
			|||||||
    io.KeyMap[ImGuiKey_Y] = GLFW_KEY_Y;
 | 
					    io.KeyMap[ImGuiKey_Y] = GLFW_KEY_Y;
 | 
				
			||||||
    io.KeyMap[ImGuiKey_Z] = GLFW_KEY_Z;
 | 
					    io.KeyMap[ImGuiKey_Z] = GLFW_KEY_Z;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    io.RenderDrawListsFn = ImGui_ImplGlfw_RenderDrawLists;      // Alternatively you can set this to NULL and call ImGui::GetDrawData() after ImGui::Render() to get the same ImDrawData pointer.
 | 
					    io.RenderDrawListsFn = ImGui_ImplGlfwGL2_RenderDrawLists;      // Alternatively you can set this to NULL and call ImGui::GetDrawData() after ImGui::Render() to get the same ImDrawData pointer.
 | 
				
			||||||
    io.SetClipboardTextFn = ImGui_ImplGlfw_SetClipboardText;
 | 
					    io.SetClipboardTextFn = ImGui_ImplGlfwGL2_SetClipboardText;
 | 
				
			||||||
    io.GetClipboardTextFn = ImGui_ImplGlfw_GetClipboardText;
 | 
					    io.GetClipboardTextFn = ImGui_ImplGlfwGL2_GetClipboardText;
 | 
				
			||||||
    io.ClipboardUserData = g_Window;
 | 
					    io.ClipboardUserData = g_Window;
 | 
				
			||||||
#ifdef _WIN32
 | 
					#ifdef _WIN32
 | 
				
			||||||
    io.ImeWindowHandle = glfwGetWin32Window(g_Window);
 | 
					    io.ImeWindowHandle = glfwGetWin32Window(g_Window);
 | 
				
			||||||
@@ -227,25 +230,25 @@ bool    ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (install_callbacks)
 | 
					    if (install_callbacks)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        glfwSetMouseButtonCallback(window, ImGui_ImplGlfw_MouseButtonCallback);
 | 
					        glfwSetMouseButtonCallback(window, ImGui_ImplGlfwGL2_MouseButtonCallback);
 | 
				
			||||||
        glfwSetScrollCallback(window, ImGui_ImplGlfw_ScrollCallback);
 | 
					        glfwSetScrollCallback(window, ImGui_ImplGlfwGL2_ScrollCallback);
 | 
				
			||||||
        glfwSetKeyCallback(window, ImGui_ImplGlFw_KeyCallback);
 | 
					        glfwSetKeyCallback(window, ImGui_ImplGlfwGL2_KeyCallback);
 | 
				
			||||||
        glfwSetCharCallback(window, ImGui_ImplGlfw_CharCallback);
 | 
					        glfwSetCharCallback(window, ImGui_ImplGlfwGL2_CharCallback);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui_ImplGlfw_Shutdown()
 | 
					void ImGui_ImplGlfwGL2_Shutdown()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGui_ImplGlfw_InvalidateDeviceObjects();
 | 
					    ImGui_ImplGlfwGL2_InvalidateDeviceObjects();
 | 
				
			||||||
    ImGui::Shutdown();
 | 
					    ImGui::Shutdown();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui_ImplGlfw_NewFrame()
 | 
					void ImGui_ImplGlfwGL2_NewFrame()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (!g_FontTexture)
 | 
					    if (!g_FontTexture)
 | 
				
			||||||
        ImGui_ImplGlfw_CreateDeviceObjects();
 | 
					        ImGui_ImplGlfwGL2_CreateDeviceObjects();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImGuiIO& io = ImGui::GetIO();
 | 
					    ImGuiIO& io = ImGui::GetIO();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,18 +12,17 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
struct GLFWwindow;
 | 
					struct GLFWwindow;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IMGUI_API bool        ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks);
 | 
					IMGUI_API bool        ImGui_ImplGlfwGL2_Init(GLFWwindow* window, bool install_callbacks);
 | 
				
			||||||
IMGUI_API void        ImGui_ImplGlfw_Shutdown();
 | 
					IMGUI_API void        ImGui_ImplGlfwGL2_Shutdown();
 | 
				
			||||||
IMGUI_API void        ImGui_ImplGlfw_NewFrame();
 | 
					IMGUI_API void        ImGui_ImplGlfwGL2_NewFrame();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Use if you want to reset your rendering device without losing ImGui state.
 | 
					// Use if you want to reset your rendering device without losing ImGui state.
 | 
				
			||||||
IMGUI_API void        ImGui_ImplGlfw_InvalidateDeviceObjects();
 | 
					IMGUI_API void        ImGui_ImplGlfwGL2_InvalidateDeviceObjects();
 | 
				
			||||||
IMGUI_API bool        ImGui_ImplGlfw_CreateDeviceObjects();
 | 
					IMGUI_API bool        ImGui_ImplGlfwGL2_CreateDeviceObjects();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GLFW callbacks (installed by default if you enable 'install_callbacks' during initialization)
 | 
					// GLFW callbacks (registered by default to GLFW if you enable 'install_callbacks' during initialization)
 | 
				
			||||||
// Provided here if you want to chain callbacks.
 | 
					// Provided here if you want to chain callbacks yourself. You may also handle inputs yourself and use those as a reference.
 | 
				
			||||||
// You can also handle inputs yourself and use those as a reference.
 | 
					IMGUI_API void        ImGui_ImplGlfwGL2_MouseButtonCallback(GLFWwindow* window, int button, int action, int mods);
 | 
				
			||||||
IMGUI_API void        ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window, int button, int action, int mods);
 | 
					IMGUI_API void        ImGui_ImplGlfwGL2_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset);
 | 
				
			||||||
IMGUI_API void        ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset);
 | 
					IMGUI_API void        ImGui_ImplGlfwGL2_KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods);
 | 
				
			||||||
IMGUI_API void        ImGui_ImplGlFw_KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods);
 | 
					IMGUI_API void        ImGui_ImplGlfwGL2_CharCallback(GLFWwindow* window, unsigned int c);
 | 
				
			||||||
IMGUI_API void        ImGui_ImplGlfw_CharCallback(GLFWwindow* window, unsigned int c);
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ int main(int, char**)
 | 
				
			|||||||
    glfwSwapInterval(1); // Enable vsync
 | 
					    glfwSwapInterval(1); // Enable vsync
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Setup ImGui binding
 | 
					    // Setup ImGui binding
 | 
				
			||||||
    ImGui_ImplGlfw_Init(window, true);
 | 
					    ImGui_ImplGlfwGL2_Init(window, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Load Fonts
 | 
					    // Load Fonts
 | 
				
			||||||
    // (there is a default font, this is only if you want to change it. see extra_fonts/README.txt for more details)
 | 
					    // (there is a default font, this is only if you want to change it. see extra_fonts/README.txt for more details)
 | 
				
			||||||
@@ -42,7 +42,7 @@ int main(int, char**)
 | 
				
			|||||||
    while (!glfwWindowShouldClose(window))
 | 
					    while (!glfwWindowShouldClose(window))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        glfwPollEvents();
 | 
					        glfwPollEvents();
 | 
				
			||||||
        ImGui_ImplGlfw_NewFrame();
 | 
					        ImGui_ImplGlfwGL2_NewFrame();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // 1. Show a simple window
 | 
					        // 1. Show a simple window
 | 
				
			||||||
        // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug"
 | 
					        // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug"
 | 
				
			||||||
@@ -59,9 +59,8 @@ int main(int, char**)
 | 
				
			|||||||
        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
					        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
				
			||||||
        if (show_another_window)
 | 
					        if (show_another_window)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ImGui::SetNextWindowSize(ImVec2(200,100), ImGuiCond_FirstUseEver);
 | 
					 | 
				
			||||||
            ImGui::Begin("Another Window", &show_another_window);
 | 
					            ImGui::Begin("Another Window", &show_another_window);
 | 
				
			||||||
            ImGui::Text("Hello");
 | 
					            ImGui::Text("Hello from another window!");
 | 
				
			||||||
            ImGui::End();
 | 
					            ImGui::End();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -84,7 +83,7 @@ int main(int, char**)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Cleanup
 | 
					    // Cleanup
 | 
				
			||||||
    ImGui_ImplGlfw_Shutdown();
 | 
					    ImGui_ImplGlfwGL2_Shutdown();
 | 
				
			||||||
    glfwTerminate();
 | 
					    glfwTerminate();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,8 +31,8 @@ static int          g_AttribLocationPosition = 0, g_AttribLocationUV = 0, g_Attr
 | 
				
			|||||||
static unsigned int g_VboHandle = 0, g_VaoHandle = 0, g_ElementsHandle = 0;
 | 
					static unsigned int g_VboHandle = 0, g_VaoHandle = 0, g_ElementsHandle = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure)
 | 
					// This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure)
 | 
				
			||||||
// If text or lines are blurry when integrating ImGui in your engine:
 | 
					// Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. 
 | 
				
			||||||
// - in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f)
 | 
					// If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f)
 | 
				
			||||||
void ImGui_ImplGlfwGL3_RenderDrawLists(ImDrawData* draw_data)
 | 
					void ImGui_ImplGlfwGL3_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates)
 | 
					    // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates)
 | 
				
			||||||
@@ -48,9 +48,11 @@ void ImGui_ImplGlfwGL3_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    glActiveTexture(GL_TEXTURE0);
 | 
					    glActiveTexture(GL_TEXTURE0);
 | 
				
			||||||
    GLint last_program; glGetIntegerv(GL_CURRENT_PROGRAM, &last_program);
 | 
					    GLint last_program; glGetIntegerv(GL_CURRENT_PROGRAM, &last_program);
 | 
				
			||||||
    GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
 | 
					    GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
 | 
				
			||||||
 | 
					    GLint last_sampler; glGetIntegerv(GL_SAMPLER_BINDING, &last_sampler);
 | 
				
			||||||
    GLint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer);
 | 
					    GLint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer);
 | 
				
			||||||
    GLint last_element_array_buffer; glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &last_element_array_buffer);
 | 
					    GLint last_element_array_buffer; glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &last_element_array_buffer);
 | 
				
			||||||
    GLint last_vertex_array; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array);
 | 
					    GLint last_vertex_array; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array);
 | 
				
			||||||
 | 
					    GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode);
 | 
				
			||||||
    GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport);
 | 
					    GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport);
 | 
				
			||||||
    GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box);
 | 
					    GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box);
 | 
				
			||||||
    GLenum last_blend_src_rgb; glGetIntegerv(GL_BLEND_SRC_RGB, (GLint*)&last_blend_src_rgb);
 | 
					    GLenum last_blend_src_rgb; glGetIntegerv(GL_BLEND_SRC_RGB, (GLint*)&last_blend_src_rgb);
 | 
				
			||||||
@@ -64,13 +66,14 @@ void ImGui_ImplGlfwGL3_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    GLboolean last_enable_depth_test = glIsEnabled(GL_DEPTH_TEST);
 | 
					    GLboolean last_enable_depth_test = glIsEnabled(GL_DEPTH_TEST);
 | 
				
			||||||
    GLboolean last_enable_scissor_test = glIsEnabled(GL_SCISSOR_TEST);
 | 
					    GLboolean last_enable_scissor_test = glIsEnabled(GL_SCISSOR_TEST);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled
 | 
					    // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill
 | 
				
			||||||
    glEnable(GL_BLEND);
 | 
					    glEnable(GL_BLEND);
 | 
				
			||||||
    glBlendEquation(GL_FUNC_ADD);
 | 
					    glBlendEquation(GL_FUNC_ADD);
 | 
				
			||||||
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 | 
					    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 | 
				
			||||||
    glDisable(GL_CULL_FACE);
 | 
					    glDisable(GL_CULL_FACE);
 | 
				
			||||||
    glDisable(GL_DEPTH_TEST);
 | 
					    glDisable(GL_DEPTH_TEST);
 | 
				
			||||||
    glEnable(GL_SCISSOR_TEST);
 | 
					    glEnable(GL_SCISSOR_TEST);
 | 
				
			||||||
 | 
					    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Setup viewport, orthographic projection matrix
 | 
					    // Setup viewport, orthographic projection matrix
 | 
				
			||||||
    glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height);
 | 
					    glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height);
 | 
				
			||||||
@@ -85,6 +88,7 @@ void ImGui_ImplGlfwGL3_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    glUniform1i(g_AttribLocationTex, 0);
 | 
					    glUniform1i(g_AttribLocationTex, 0);
 | 
				
			||||||
    glUniformMatrix4fv(g_AttribLocationProjMtx, 1, GL_FALSE, &ortho_projection[0][0]);
 | 
					    glUniformMatrix4fv(g_AttribLocationProjMtx, 1, GL_FALSE, &ortho_projection[0][0]);
 | 
				
			||||||
    glBindVertexArray(g_VaoHandle);
 | 
					    glBindVertexArray(g_VaoHandle);
 | 
				
			||||||
 | 
					    glBindSampler(0, 0); // Rely on combined texture/sampler state.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (int n = 0; n < draw_data->CmdListsCount; n++)
 | 
					    for (int n = 0; n < draw_data->CmdListsCount; n++)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -117,6 +121,7 @@ void ImGui_ImplGlfwGL3_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    // Restore modified GL state
 | 
					    // Restore modified GL state
 | 
				
			||||||
    glUseProgram(last_program);
 | 
					    glUseProgram(last_program);
 | 
				
			||||||
    glBindTexture(GL_TEXTURE_2D, last_texture);
 | 
					    glBindTexture(GL_TEXTURE_2D, last_texture);
 | 
				
			||||||
 | 
					    glBindSampler(0, last_sampler);
 | 
				
			||||||
    glActiveTexture(last_active_texture);
 | 
					    glActiveTexture(last_active_texture);
 | 
				
			||||||
    glBindVertexArray(last_vertex_array);
 | 
					    glBindVertexArray(last_vertex_array);
 | 
				
			||||||
    glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer);
 | 
					    glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer);
 | 
				
			||||||
@@ -127,6 +132,7 @@ void ImGui_ImplGlfwGL3_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    if (last_enable_cull_face) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE);
 | 
					    if (last_enable_cull_face) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE);
 | 
				
			||||||
    if (last_enable_depth_test) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST);
 | 
					    if (last_enable_depth_test) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST);
 | 
				
			||||||
    if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST);
 | 
					    if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST);
 | 
				
			||||||
 | 
					    glPolygonMode(GL_FRONT_AND_BACK, last_polygon_mode[0]);
 | 
				
			||||||
    glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]);
 | 
					    glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]);
 | 
				
			||||||
    glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]);
 | 
					    glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,9 +67,8 @@ int main(int, char**)
 | 
				
			|||||||
        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
					        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
				
			||||||
        if (show_another_window)
 | 
					        if (show_another_window)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ImGui::SetNextWindowSize(ImVec2(200,100), ImGuiCond_FirstUseEver);
 | 
					 | 
				
			||||||
            ImGui::Begin("Another Window", &show_another_window);
 | 
					            ImGui::Begin("Another Window", &show_another_window);
 | 
				
			||||||
            ImGui::Text("Hello");
 | 
					            ImGui::Text("Hello from another window!");
 | 
				
			||||||
            ImGui::End();
 | 
					            ImGui::End();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,8 +22,8 @@ static float        g_MouseWheel = 0.0f;
 | 
				
			|||||||
static GLuint       g_FontTexture = 0;
 | 
					static GLuint       g_FontTexture = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure)
 | 
					// This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure)
 | 
				
			||||||
// If text or lines are blurry when integrating ImGui in your engine:
 | 
					// Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. 
 | 
				
			||||||
// - in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f)
 | 
					// If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f)
 | 
				
			||||||
void ImGui_ImplSdl_RenderDrawLists(ImDrawData* draw_data)
 | 
					void ImGui_ImplSdl_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates)
 | 
					    // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates)
 | 
				
			||||||
@@ -35,8 +35,9 @@ void ImGui_ImplSdl_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    draw_data->ScaleClipRects(io.DisplayFramebufferScale);
 | 
					    draw_data->ScaleClipRects(io.DisplayFramebufferScale);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // We are using the OpenGL fixed pipeline to make the example code simpler to read!
 | 
					    // We are using the OpenGL fixed pipeline to make the example code simpler to read!
 | 
				
			||||||
    // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, vertex/texcoord/color pointers.
 | 
					    // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, vertex/texcoord/color pointers, polygon fill.
 | 
				
			||||||
    GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
 | 
					    GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
 | 
				
			||||||
 | 
					    GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode);
 | 
				
			||||||
    GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport);
 | 
					    GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport);
 | 
				
			||||||
    GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box); 
 | 
					    GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box); 
 | 
				
			||||||
    glPushAttrib(GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT | GL_TRANSFORM_BIT);
 | 
					    glPushAttrib(GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT | GL_TRANSFORM_BIT);
 | 
				
			||||||
@@ -49,6 +50,7 @@ void ImGui_ImplSdl_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 | 
					    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 | 
				
			||||||
    glEnableClientState(GL_COLOR_ARRAY);
 | 
					    glEnableClientState(GL_COLOR_ARRAY);
 | 
				
			||||||
    glEnable(GL_TEXTURE_2D);
 | 
					    glEnable(GL_TEXTURE_2D);
 | 
				
			||||||
 | 
					    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
 | 
				
			||||||
    //glUseProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound
 | 
					    //glUseProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Setup viewport, orthographic projection matrix
 | 
					    // Setup viewport, orthographic projection matrix
 | 
				
			||||||
@@ -100,6 +102,7 @@ void ImGui_ImplSdl_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    glMatrixMode(GL_PROJECTION);
 | 
					    glMatrixMode(GL_PROJECTION);
 | 
				
			||||||
    glPopMatrix();
 | 
					    glPopMatrix();
 | 
				
			||||||
    glPopAttrib();
 | 
					    glPopAttrib();
 | 
				
			||||||
 | 
					    glPolygonMode(GL_FRONT, last_polygon_mode[0]); glPolygonMode(GL_BACK, last_polygon_mode[1]);
 | 
				
			||||||
    glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]);
 | 
					    glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]);
 | 
				
			||||||
    glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]);
 | 
					    glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -114,7 +117,7 @@ static void ImGui_ImplSdl_SetClipboardText(void*, const char* text)
 | 
				
			|||||||
    SDL_SetClipboardText(text);
 | 
					    SDL_SetClipboardText(text);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ImGui_ImplSdl_ProcessEvent(SDL_Event* event)
 | 
					bool ImGui_ImplSdlGL2_ProcessEvent(SDL_Event* event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiIO& io = ImGui::GetIO();
 | 
					    ImGuiIO& io = ImGui::GetIO();
 | 
				
			||||||
    switch (event->type)
 | 
					    switch (event->type)
 | 
				
			||||||
@@ -154,7 +157,7 @@ bool ImGui_ImplSdl_ProcessEvent(SDL_Event* event)
 | 
				
			|||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ImGui_ImplSdl_CreateDeviceObjects()
 | 
					bool ImGui_ImplSdlGL2_CreateDeviceObjects()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // Build texture atlas
 | 
					    // Build texture atlas
 | 
				
			||||||
    ImGuiIO& io = ImGui::GetIO();
 | 
					    ImGuiIO& io = ImGui::GetIO();
 | 
				
			||||||
@@ -181,7 +184,7 @@ bool ImGui_ImplSdl_CreateDeviceObjects()
 | 
				
			|||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void    ImGui_ImplSdl_InvalidateDeviceObjects()
 | 
					void    ImGui_ImplSdlGL2_InvalidateDeviceObjects()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (g_FontTexture)
 | 
					    if (g_FontTexture)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -191,7 +194,7 @@ void    ImGui_ImplSdl_InvalidateDeviceObjects()
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool    ImGui_ImplSdl_Init(SDL_Window* window)
 | 
					bool    ImGui_ImplSdlGL2_Init(SDL_Window* window)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiIO& io = ImGui::GetIO();
 | 
					    ImGuiIO& io = ImGui::GetIO();
 | 
				
			||||||
    io.KeyMap[ImGuiKey_Tab] = SDLK_TAB;                     // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array.
 | 
					    io.KeyMap[ImGuiKey_Tab] = SDLK_TAB;                     // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array.
 | 
				
			||||||
@@ -231,16 +234,16 @@ bool    ImGui_ImplSdl_Init(SDL_Window* window)
 | 
				
			|||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui_ImplSdl_Shutdown()
 | 
					void ImGui_ImplSdlGL2_Shutdown()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGui_ImplSdl_InvalidateDeviceObjects();
 | 
					    ImGui_ImplSdlGL2_InvalidateDeviceObjects();
 | 
				
			||||||
    ImGui::Shutdown();
 | 
					    ImGui::Shutdown();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui_ImplSdl_NewFrame(SDL_Window *window)
 | 
					void ImGui_ImplSdlGL2_NewFrame(SDL_Window *window)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (!g_FontTexture)
 | 
					    if (!g_FontTexture)
 | 
				
			||||||
        ImGui_ImplSdl_CreateDeviceObjects();
 | 
					        ImGui_ImplSdlGL2_CreateDeviceObjects();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImGuiIO& io = ImGui::GetIO();
 | 
					    ImGuiIO& io = ImGui::GetIO();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,11 +9,11 @@
 | 
				
			|||||||
struct SDL_Window;
 | 
					struct SDL_Window;
 | 
				
			||||||
typedef union SDL_Event SDL_Event;
 | 
					typedef union SDL_Event SDL_Event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IMGUI_API bool        ImGui_ImplSdl_Init(SDL_Window* window);
 | 
					IMGUI_API bool        ImGui_ImplSdlGL2_Init(SDL_Window* window);
 | 
				
			||||||
IMGUI_API void        ImGui_ImplSdl_Shutdown();
 | 
					IMGUI_API void        ImGui_ImplSdlGL2_Shutdown();
 | 
				
			||||||
IMGUI_API void        ImGui_ImplSdl_NewFrame(SDL_Window* window);
 | 
					IMGUI_API void        ImGui_ImplSdlGL2_NewFrame(SDL_Window* window);
 | 
				
			||||||
IMGUI_API bool        ImGui_ImplSdl_ProcessEvent(SDL_Event* event);
 | 
					IMGUI_API bool        ImGui_ImplSdlGL2_ProcessEvent(SDL_Event* event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Use if you want to reset your rendering device without losing ImGui state.
 | 
					// Use if you want to reset your rendering device without losing ImGui state.
 | 
				
			||||||
IMGUI_API void        ImGui_ImplSdl_InvalidateDeviceObjects();
 | 
					IMGUI_API void        ImGui_ImplSdlGL2_InvalidateDeviceObjects();
 | 
				
			||||||
IMGUI_API bool        ImGui_ImplSdl_CreateDeviceObjects();
 | 
					IMGUI_API bool        ImGui_ImplSdlGL2_CreateDeviceObjects();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,7 @@ int main(int, char**)
 | 
				
			|||||||
    SDL_GLContext glcontext = SDL_GL_CreateContext(window);
 | 
					    SDL_GLContext glcontext = SDL_GL_CreateContext(window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Setup ImGui binding
 | 
					    // Setup ImGui binding
 | 
				
			||||||
    ImGui_ImplSdl_Init(window);
 | 
					    ImGui_ImplSdlGL2_Init(window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Load Fonts
 | 
					    // Load Fonts
 | 
				
			||||||
    // (there is a default font, this is only if you want to change it. see extra_fonts/README.txt for more details)
 | 
					    // (there is a default font, this is only if you want to change it. see extra_fonts/README.txt for more details)
 | 
				
			||||||
@@ -51,11 +51,11 @@ int main(int, char**)
 | 
				
			|||||||
        SDL_Event event;
 | 
					        SDL_Event event;
 | 
				
			||||||
        while (SDL_PollEvent(&event))
 | 
					        while (SDL_PollEvent(&event))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ImGui_ImplSdl_ProcessEvent(&event);
 | 
					            ImGui_ImplSdlGL2_ProcessEvent(&event);
 | 
				
			||||||
            if (event.type == SDL_QUIT)
 | 
					            if (event.type == SDL_QUIT)
 | 
				
			||||||
                done = true;
 | 
					                done = true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        ImGui_ImplSdl_NewFrame(window);
 | 
					        ImGui_ImplSdlGL2_NewFrame(window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // 1. Show a simple window
 | 
					        // 1. Show a simple window
 | 
				
			||||||
        // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug"
 | 
					        // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug"
 | 
				
			||||||
@@ -72,9 +72,8 @@ int main(int, char**)
 | 
				
			|||||||
        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
					        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
				
			||||||
        if (show_another_window)
 | 
					        if (show_another_window)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ImGui::SetNextWindowSize(ImVec2(200,100), ImGuiCond_FirstUseEver);
 | 
					 | 
				
			||||||
            ImGui::Begin("Another Window", &show_another_window);
 | 
					            ImGui::Begin("Another Window", &show_another_window);
 | 
				
			||||||
            ImGui::Text("Hello");
 | 
					            ImGui::Text("Hello from another window!");
 | 
				
			||||||
            ImGui::End();
 | 
					            ImGui::End();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -95,7 +94,7 @@ int main(int, char**)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Cleanup
 | 
					    // Cleanup
 | 
				
			||||||
    ImGui_ImplSdl_Shutdown();
 | 
					    ImGui_ImplSdlGL2_Shutdown();
 | 
				
			||||||
    SDL_GL_DeleteContext(glcontext);
 | 
					    SDL_GL_DeleteContext(glcontext);
 | 
				
			||||||
    SDL_DestroyWindow(window);
 | 
					    SDL_DestroyWindow(window);
 | 
				
			||||||
    SDL_Quit();
 | 
					    SDL_Quit();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,8 +25,8 @@ static int          g_AttribLocationPosition = 0, g_AttribLocationUV = 0, g_Attr
 | 
				
			|||||||
static unsigned int g_VboHandle = 0, g_VaoHandle = 0, g_ElementsHandle = 0;
 | 
					static unsigned int g_VboHandle = 0, g_VaoHandle = 0, g_ElementsHandle = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure)
 | 
					// This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure)
 | 
				
			||||||
// If text or lines are blurry when integrating ImGui in your engine:
 | 
					// Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. 
 | 
				
			||||||
// - in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f)
 | 
					// If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f)
 | 
				
			||||||
void ImGui_ImplSdlGL3_RenderDrawLists(ImDrawData* draw_data)
 | 
					void ImGui_ImplSdlGL3_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates)
 | 
					    // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates)
 | 
				
			||||||
@@ -42,9 +42,11 @@ void ImGui_ImplSdlGL3_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    glActiveTexture(GL_TEXTURE0);
 | 
					    glActiveTexture(GL_TEXTURE0);
 | 
				
			||||||
    GLint last_program; glGetIntegerv(GL_CURRENT_PROGRAM, &last_program);
 | 
					    GLint last_program; glGetIntegerv(GL_CURRENT_PROGRAM, &last_program);
 | 
				
			||||||
    GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
 | 
					    GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
 | 
				
			||||||
 | 
					    GLint last_sampler; glGetIntegerv(GL_SAMPLER_BINDING, &last_sampler);
 | 
				
			||||||
    GLint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer);
 | 
					    GLint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer);
 | 
				
			||||||
    GLint last_element_array_buffer; glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &last_element_array_buffer);
 | 
					    GLint last_element_array_buffer; glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &last_element_array_buffer);
 | 
				
			||||||
    GLint last_vertex_array; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array);
 | 
					    GLint last_vertex_array; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array);
 | 
				
			||||||
 | 
					    GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode);
 | 
				
			||||||
    GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport);
 | 
					    GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport);
 | 
				
			||||||
    GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box);
 | 
					    GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box);
 | 
				
			||||||
    GLenum last_blend_src_rgb; glGetIntegerv(GL_BLEND_SRC_RGB, (GLint*)&last_blend_src_rgb);
 | 
					    GLenum last_blend_src_rgb; glGetIntegerv(GL_BLEND_SRC_RGB, (GLint*)&last_blend_src_rgb);
 | 
				
			||||||
@@ -58,13 +60,14 @@ void ImGui_ImplSdlGL3_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    GLboolean last_enable_depth_test = glIsEnabled(GL_DEPTH_TEST);
 | 
					    GLboolean last_enable_depth_test = glIsEnabled(GL_DEPTH_TEST);
 | 
				
			||||||
    GLboolean last_enable_scissor_test = glIsEnabled(GL_SCISSOR_TEST);
 | 
					    GLboolean last_enable_scissor_test = glIsEnabled(GL_SCISSOR_TEST);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled
 | 
					    // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill
 | 
				
			||||||
    glEnable(GL_BLEND);
 | 
					    glEnable(GL_BLEND);
 | 
				
			||||||
    glBlendEquation(GL_FUNC_ADD);
 | 
					    glBlendEquation(GL_FUNC_ADD);
 | 
				
			||||||
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 | 
					    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 | 
				
			||||||
    glDisable(GL_CULL_FACE);
 | 
					    glDisable(GL_CULL_FACE);
 | 
				
			||||||
    glDisable(GL_DEPTH_TEST);
 | 
					    glDisable(GL_DEPTH_TEST);
 | 
				
			||||||
    glEnable(GL_SCISSOR_TEST);
 | 
					    glEnable(GL_SCISSOR_TEST);
 | 
				
			||||||
 | 
					    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Setup viewport, orthographic projection matrix
 | 
					    // Setup viewport, orthographic projection matrix
 | 
				
			||||||
    glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height);
 | 
					    glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height);
 | 
				
			||||||
@@ -79,6 +82,7 @@ void ImGui_ImplSdlGL3_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    glUniform1i(g_AttribLocationTex, 0);
 | 
					    glUniform1i(g_AttribLocationTex, 0);
 | 
				
			||||||
    glUniformMatrix4fv(g_AttribLocationProjMtx, 1, GL_FALSE, &ortho_projection[0][0]);
 | 
					    glUniformMatrix4fv(g_AttribLocationProjMtx, 1, GL_FALSE, &ortho_projection[0][0]);
 | 
				
			||||||
    glBindVertexArray(g_VaoHandle);
 | 
					    glBindVertexArray(g_VaoHandle);
 | 
				
			||||||
 | 
					    glBindSampler(0, 0); // Rely on combined texture/sampler state.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (int n = 0; n < draw_data->CmdListsCount; n++)
 | 
					    for (int n = 0; n < draw_data->CmdListsCount; n++)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -111,6 +115,7 @@ void ImGui_ImplSdlGL3_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    // Restore modified GL state
 | 
					    // Restore modified GL state
 | 
				
			||||||
    glUseProgram(last_program);
 | 
					    glUseProgram(last_program);
 | 
				
			||||||
    glBindTexture(GL_TEXTURE_2D, last_texture);
 | 
					    glBindTexture(GL_TEXTURE_2D, last_texture);
 | 
				
			||||||
 | 
					    glBindSampler(0, last_sampler);
 | 
				
			||||||
    glActiveTexture(last_active_texture);
 | 
					    glActiveTexture(last_active_texture);
 | 
				
			||||||
    glBindVertexArray(last_vertex_array);
 | 
					    glBindVertexArray(last_vertex_array);
 | 
				
			||||||
    glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer);
 | 
					    glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer);
 | 
				
			||||||
@@ -121,6 +126,7 @@ void ImGui_ImplSdlGL3_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    if (last_enable_cull_face) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE);
 | 
					    if (last_enable_cull_face) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE);
 | 
				
			||||||
    if (last_enable_depth_test) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST);
 | 
					    if (last_enable_depth_test) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST);
 | 
				
			||||||
    if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST);
 | 
					    if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST);
 | 
				
			||||||
 | 
					    glPolygonMode(GL_FRONT_AND_BACK, last_polygon_mode[0]);
 | 
				
			||||||
    glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]);
 | 
					    glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]);
 | 
				
			||||||
    glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]);
 | 
					    glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -75,9 +75,8 @@ int main(int, char**)
 | 
				
			|||||||
        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
					        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
				
			||||||
        if (show_another_window)
 | 
					        if (show_another_window)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ImGui::SetNextWindowSize(ImVec2(200,100), ImGuiCond_FirstUseEver);
 | 
					 | 
				
			||||||
            ImGui::Begin("Another Window", &show_another_window);
 | 
					            ImGui::Begin("Another Window", &show_another_window);
 | 
				
			||||||
            ImGui::Text("Hello");
 | 
					            ImGui::Text("Hello from another window!");
 | 
				
			||||||
            ImGui::End();
 | 
					            ImGui::End();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -698,9 +698,8 @@ int main(int, char**)
 | 
				
			|||||||
        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
					        // 2. Show another simple window, this time using an explicit Begin/End pair
 | 
				
			||||||
        if (show_another_window)
 | 
					        if (show_another_window)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ImGui::SetNextWindowSize(ImVec2(200,100), ImGuiCond_FirstUseEver);
 | 
					 | 
				
			||||||
            ImGui::Begin("Another Window", &show_another_window);
 | 
					            ImGui::Begin("Another Window", &show_another_window);
 | 
				
			||||||
            ImGui::Text("Hello");
 | 
					            ImGui::Text("Hello from another window!");
 | 
				
			||||||
            ImGui::End();
 | 
					            ImGui::End();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										147
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										147
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -1831,6 +1831,7 @@ ImGuiWindow::ImGuiWindow(const char* name)
 | 
				
			|||||||
    Collapsed = false;
 | 
					    Collapsed = false;
 | 
				
			||||||
    CollapseToggleWanted = false;
 | 
					    CollapseToggleWanted = false;
 | 
				
			||||||
    SkipItems = false;
 | 
					    SkipItems = false;
 | 
				
			||||||
 | 
					    Appearing = false;
 | 
				
			||||||
    BeginCount = 0;
 | 
					    BeginCount = 0;
 | 
				
			||||||
    PopupId = 0;
 | 
					    PopupId = 0;
 | 
				
			||||||
    NavLastId = 0;
 | 
					    NavLastId = 0;
 | 
				
			||||||
@@ -2220,7 +2221,7 @@ bool ImGui::IsClippedEx(const ImRect& bb, const ImGuiID* id, bool clip_even_when
 | 
				
			|||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindowRead();
 | 
					    ImGuiWindow* window = GetCurrentWindowRead();
 | 
				
			||||||
    if (!bb.Overlaps(window->ClipRect))
 | 
					    if (!bb.Overlaps(window->ClipRect))
 | 
				
			||||||
        if (!id || *id != GImGui->ActiveId)
 | 
					        if (!id || *id != g.ActiveId)
 | 
				
			||||||
            if (clip_even_when_logged || !g.LogEnabled)
 | 
					            if (clip_even_when_logged || !g.LogEnabled)
 | 
				
			||||||
                return true;
 | 
					                return true;
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
@@ -2957,14 +2958,14 @@ void ImGui::NewFrame()
 | 
				
			|||||||
                mouse_earliest_button_down = i;
 | 
					                mouse_earliest_button_down = i;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    bool mouse_avail_to_imgui = (mouse_earliest_button_down == -1) || g.IO.MouseDownOwned[mouse_earliest_button_down];
 | 
					    bool mouse_avail_to_imgui = (mouse_earliest_button_down == -1) || g.IO.MouseDownOwned[mouse_earliest_button_down];
 | 
				
			||||||
    if (g.CaptureMouseNextFrame != -1)
 | 
					    if (g.WantCaptureMouseNextFrame != -1)
 | 
				
			||||||
        g.IO.WantCaptureMouse = (g.CaptureMouseNextFrame != 0);
 | 
					        g.IO.WantCaptureMouse = (g.WantCaptureMouseNextFrame != 0);
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
        g.IO.WantCaptureMouse = (mouse_avail_to_imgui && (g.HoveredWindow != NULL || mouse_any_down)) || (g.ActiveId != 0) || (!g.OpenPopupStack.empty());
 | 
					        g.IO.WantCaptureMouse = (mouse_avail_to_imgui && (g.HoveredWindow != NULL || mouse_any_down)) || (g.ActiveId != 0) || (!g.OpenPopupStack.empty());
 | 
				
			||||||
    g.IO.WantCaptureKeyboard = (g.CaptureKeyboardNextFrame != -1) ? (g.CaptureKeyboardNextFrame != 0) : (g.ActiveId != 0);
 | 
					    g.IO.WantCaptureKeyboard = (g.WantCaptureKeyboardNextFrame != -1) ? (g.WantCaptureKeyboardNextFrame != 0) : (g.ActiveId != 0);
 | 
				
			||||||
    g.IO.WantTextInput = (g.ActiveId != 0 && g.InputTextState.Id == g.ActiveId);
 | 
					    g.IO.WantTextInput = (g.WantTextInputNextFrame != -1) ? (g.WantTextInputNextFrame != 0) : 0;
 | 
				
			||||||
    g.MouseCursor = ImGuiMouseCursor_Arrow;
 | 
					    g.MouseCursor = ImGuiMouseCursor_Arrow;
 | 
				
			||||||
    g.CaptureMouseNextFrame = g.CaptureKeyboardNextFrame = -1;
 | 
					    g.WantCaptureMouseNextFrame = g.WantCaptureKeyboardNextFrame = g.WantTextInputNextFrame = -1;
 | 
				
			||||||
    g.OsImePosRequest = ImVec2(1.0f, 1.0f); // OS Input Method Editor showing on top-left of our window by default
 | 
					    g.OsImePosRequest = ImVec2(1.0f, 1.0f); // OS Input Method Editor showing on top-left of our window by default
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // If mouse was first clicked outside of ImGui bounds we also cancel out hovering.
 | 
					    // If mouse was first clicked outside of ImGui bounds we also cancel out hovering.
 | 
				
			||||||
@@ -4001,12 +4002,12 @@ void ImGui::SetMouseCursor(ImGuiMouseCursor cursor_type)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::CaptureKeyboardFromApp(bool capture)
 | 
					void ImGui::CaptureKeyboardFromApp(bool capture)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    GImGui->CaptureKeyboardNextFrame = capture ? 1 : 0;
 | 
					    GImGui->WantCaptureKeyboardNextFrame = capture ? 1 : 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui::CaptureMouseFromApp(bool capture)
 | 
					void ImGui::CaptureMouseFromApp(bool capture)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    GImGui->CaptureMouseNextFrame = capture ? 1 : 0;
 | 
					    GImGui->WantCaptureMouseNextFrame = capture ? 1 : 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ImGui::IsItemHovered()
 | 
					bool ImGui::IsItemHovered()
 | 
				
			||||||
@@ -4697,7 +4698,7 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
 | 
				
			|||||||
        window_is_new = true;
 | 
					        window_is_new = true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const int current_frame = ImGui::GetFrameCount();
 | 
					    const int current_frame = g.FrameCount;
 | 
				
			||||||
    const bool first_begin_of_the_frame = (window->LastFrameActive != current_frame);
 | 
					    const bool first_begin_of_the_frame = (window->LastFrameActive != current_frame);
 | 
				
			||||||
    if (first_begin_of_the_frame)
 | 
					    if (first_begin_of_the_frame)
 | 
				
			||||||
        window->Flags = (ImGuiWindowFlags)flags;
 | 
					        window->Flags = (ImGuiWindowFlags)flags;
 | 
				
			||||||
@@ -4711,27 +4712,28 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
 | 
				
			|||||||
    CheckStacksSize(window, true);
 | 
					    CheckStacksSize(window, true);
 | 
				
			||||||
    IM_ASSERT(parent_window != NULL || !(flags & ImGuiWindowFlags_ChildWindow));
 | 
					    IM_ASSERT(parent_window != NULL || !(flags & ImGuiWindowFlags_ChildWindow));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool window_was_active = (window->LastFrameActive == current_frame - 1);   // Not using !WasActive because the implicit "Debug" window would always toggle off->on
 | 
					    bool window_just_activated_by_user = (window->LastFrameActive < current_frame - 1);   // Not using !WasActive because the implicit "Debug" window would always toggle off->on
 | 
				
			||||||
    if (flags & ImGuiWindowFlags_Popup)
 | 
					    if (flags & ImGuiWindowFlags_Popup)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ImGuiPopupRef& popup_ref = g.OpenPopupStack[g.CurrentPopupStack.Size];
 | 
					        ImGuiPopupRef& popup_ref = g.OpenPopupStack[g.CurrentPopupStack.Size];
 | 
				
			||||||
        window_was_active &= (window->PopupId == popup_ref.PopupId);
 | 
					        window_just_activated_by_user |= (window->PopupId != popup_ref.PopupId); // We recycle popups so treat window as activated if popup id changed
 | 
				
			||||||
        window_was_active &= (window == popup_ref.Window);
 | 
					        window_just_activated_by_user |= (window != popup_ref.Window);
 | 
				
			||||||
        popup_ref.Window = window;
 | 
					        popup_ref.Window = window;
 | 
				
			||||||
        g.CurrentPopupStack.push_back(popup_ref);
 | 
					        g.CurrentPopupStack.push_back(popup_ref);
 | 
				
			||||||
        window->PopupId = popup_ref.PopupId;
 | 
					        window->PopupId = popup_ref.PopupId;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const bool window_appearing_after_being_hidden = (window->HiddenFrames == 1);
 | 
					    const bool window_just_appearing_after_hidden_for_resize = (window->HiddenFrames == 1);
 | 
				
			||||||
    if (window_appearing_after_being_hidden)
 | 
					    if (window_just_appearing_after_hidden_for_resize)
 | 
				
			||||||
        window->NavLastId = 0;
 | 
					        window->NavLastId = 0;
 | 
				
			||||||
 | 
					    window->Appearing = (window_just_activated_by_user || window_just_appearing_after_hidden_for_resize);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Process SetNextWindow***() calls
 | 
					    // Process SetNextWindow***() calls
 | 
				
			||||||
    bool window_pos_set_by_api = false, window_size_set_by_api = false;
 | 
					    bool window_pos_set_by_api = false, window_size_set_by_api = false;
 | 
				
			||||||
    if (g.SetNextWindowPosCond)
 | 
					    if (g.SetNextWindowPosCond)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        const ImVec2 backup_cursor_pos = window->DC.CursorPos;                  // FIXME: not sure of the exact reason of this saving/restore anymore :( need to look into that.
 | 
					        if (window->Appearing) 
 | 
				
			||||||
        if (!window_was_active || window_appearing_after_being_hidden) window->SetWindowPosAllowFlags |= ImGuiCond_Appearing;
 | 
					            window->SetWindowPosAllowFlags |= ImGuiCond_Appearing;
 | 
				
			||||||
        window_pos_set_by_api = (window->SetWindowPosAllowFlags & g.SetNextWindowPosCond) != 0;
 | 
					        window_pos_set_by_api = (window->SetWindowPosAllowFlags & g.SetNextWindowPosCond) != 0;
 | 
				
			||||||
        if (window_pos_set_by_api && ImLengthSqr(g.SetNextWindowPosVal - ImVec2(-FLT_MAX,-FLT_MAX)) < 0.001f)
 | 
					        if (window_pos_set_by_api && ImLengthSqr(g.SetNextWindowPosVal - ImVec2(-FLT_MAX,-FLT_MAX)) < 0.001f)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -4742,12 +4744,12 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            SetWindowPos(window, g.SetNextWindowPosVal, g.SetNextWindowPosCond);
 | 
					            SetWindowPos(window, g.SetNextWindowPosVal, g.SetNextWindowPosCond);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        window->DC.CursorPos = backup_cursor_pos;
 | 
					 | 
				
			||||||
        g.SetNextWindowPosCond = 0;
 | 
					        g.SetNextWindowPosCond = 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (g.SetNextWindowSizeCond)
 | 
					    if (g.SetNextWindowSizeCond)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (!window_was_active || window_appearing_after_being_hidden) window->SetWindowSizeAllowFlags |= ImGuiCond_Appearing;
 | 
					        if (window->Appearing) 
 | 
				
			||||||
 | 
					            window->SetWindowSizeAllowFlags |= ImGuiCond_Appearing;
 | 
				
			||||||
        window_size_set_by_api = (window->SetWindowSizeAllowFlags & g.SetNextWindowSizeCond) != 0;
 | 
					        window_size_set_by_api = (window->SetWindowSizeAllowFlags & g.SetNextWindowSizeCond) != 0;
 | 
				
			||||||
        SetWindowSize(window, g.SetNextWindowSizeVal, g.SetNextWindowSizeCond);
 | 
					        SetWindowSize(window, g.SetNextWindowSizeVal, g.SetNextWindowSizeCond);
 | 
				
			||||||
        g.SetNextWindowSizeCond = 0;
 | 
					        g.SetNextWindowSizeCond = 0;
 | 
				
			||||||
@@ -4763,13 +4765,14 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    if (g.SetNextWindowCollapsedCond)
 | 
					    if (g.SetNextWindowCollapsedCond)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (!window_was_active || window_appearing_after_being_hidden) window->SetWindowCollapsedAllowFlags |= ImGuiCond_Appearing;
 | 
					        if (window->Appearing)
 | 
				
			||||||
 | 
					            window->SetWindowCollapsedAllowFlags |= ImGuiCond_Appearing;
 | 
				
			||||||
        SetWindowCollapsed(window, g.SetNextWindowCollapsedVal, g.SetNextWindowCollapsedCond);
 | 
					        SetWindowCollapsed(window, g.SetNextWindowCollapsedVal, g.SetNextWindowCollapsedCond);
 | 
				
			||||||
        g.SetNextWindowCollapsedCond = 0;
 | 
					        g.SetNextWindowCollapsedCond = 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (g.SetNextWindowFocus)
 | 
					    if (g.SetNextWindowFocus)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ImGui::SetWindowFocus();
 | 
					        SetWindowFocus();
 | 
				
			||||||
        g.SetNextWindowFocus = false;
 | 
					        g.SetNextWindowFocus = false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -4807,7 +4810,7 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
 | 
				
			|||||||
        else
 | 
					        else
 | 
				
			||||||
            PushClipRect(fullscreen_rect.Min, fullscreen_rect.Max, true);
 | 
					            PushClipRect(fullscreen_rect.Min, fullscreen_rect.Max, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!window_was_active)
 | 
					        if (window_just_activated_by_user)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // Popup first latch mouse position, will position itself when it appears next frame
 | 
					            // Popup first latch mouse position, will position itself when it appears next frame
 | 
				
			||||||
            window->AutoPosLastDirection = -1;
 | 
					            window->AutoPosLastDirection = -1;
 | 
				
			||||||
@@ -4842,7 +4845,7 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
 | 
				
			|||||||
        // Hide popup/tooltip window when first appearing while we measure size (because we recycle them)
 | 
					        // Hide popup/tooltip window when first appearing while we measure size (because we recycle them)
 | 
				
			||||||
        if (window->HiddenFrames > 0)
 | 
					        if (window->HiddenFrames > 0)
 | 
				
			||||||
            window->HiddenFrames--;
 | 
					            window->HiddenFrames--;
 | 
				
			||||||
        if ((flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) != 0 && !window_was_active)
 | 
					        if ((flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) != 0 && window_just_activated_by_user)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            window->HiddenFrames = 1;
 | 
					            window->HiddenFrames = 1;
 | 
				
			||||||
            if (flags & ImGuiWindowFlags_AlwaysAutoResize)
 | 
					            if (flags & ImGuiWindowFlags_AlwaysAutoResize)
 | 
				
			||||||
@@ -4922,7 +4925,7 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        bool window_pos_center = false;
 | 
					        bool window_pos_center = false;
 | 
				
			||||||
        window_pos_center |= (window->SetWindowPosCenterWanted && window->HiddenFrames == 0);
 | 
					        window_pos_center |= (window->SetWindowPosCenterWanted && window->HiddenFrames == 0);
 | 
				
			||||||
        window_pos_center |= ((flags & ImGuiWindowFlags_Modal) && !window_pos_set_by_api && window_appearing_after_being_hidden);
 | 
					        window_pos_center |= ((flags & ImGuiWindowFlags_Modal) && !window_pos_set_by_api && window_just_appearing_after_hidden_for_resize);
 | 
				
			||||||
        if (window_pos_center)
 | 
					        if (window_pos_center)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // Center (any sort of window)
 | 
					            // Center (any sort of window)
 | 
				
			||||||
@@ -4941,7 +4944,7 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
 | 
				
			|||||||
                rect_to_avoid = ImRect(parent_window->Pos.x + horizontal_overlap, -FLT_MAX, parent_window->Pos.x + parent_window->Size.x - horizontal_overlap - parent_window->ScrollbarSizes.x, FLT_MAX);
 | 
					                rect_to_avoid = ImRect(parent_window->Pos.x + horizontal_overlap, -FLT_MAX, parent_window->Pos.x + parent_window->Size.x - horizontal_overlap - parent_window->ScrollbarSizes.x, FLT_MAX);
 | 
				
			||||||
            window->PosFloat = FindBestPopupWindowPos(window->PosFloat, window->Size, &window->AutoPosLastDirection, rect_to_avoid);
 | 
					            window->PosFloat = FindBestPopupWindowPos(window->PosFloat, window->Size, &window->AutoPosLastDirection, rect_to_avoid);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api && window_appearing_after_being_hidden)
 | 
					        else if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api && window_just_appearing_after_hidden_for_resize)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ImRect rect_to_avoid(window->PosFloat.x - 1, window->PosFloat.y - 1, window->PosFloat.x + 1, window->PosFloat.y + 1);
 | 
					            ImRect rect_to_avoid(window->PosFloat.x - 1, window->PosFloat.y - 1, window->PosFloat.x + 1, window->PosFloat.y + 1);
 | 
				
			||||||
            window->PosFloat = FindBestPopupWindowPos(window->PosFloat, window->Size, &window->AutoPosLastDirection, rect_to_avoid);
 | 
					            window->PosFloat = FindBestPopupWindowPos(window->PosFloat, window->Size, &window->AutoPosLastDirection, rect_to_avoid);
 | 
				
			||||||
@@ -5166,7 +5169,7 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
 | 
				
			|||||||
        window->DC.TreeDepth = 0;
 | 
					        window->DC.TreeDepth = 0;
 | 
				
			||||||
        window->DC.StateStorage = &window->StateStorage;
 | 
					        window->DC.StateStorage = &window->StateStorage;
 | 
				
			||||||
        window->DC.GroupStack.resize(0);
 | 
					        window->DC.GroupStack.resize(0);
 | 
				
			||||||
        window->MenuColumns.Update(3, style.ItemSpacing.x, !window_was_active);
 | 
					        window->MenuColumns.Update(3, style.ItemSpacing.x, window_just_activated_by_user);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ((flags & ImGuiWindowFlags_ChildWindow) && (window->DC.ItemFlags != parent_window->DC.ItemFlags))
 | 
					        if ((flags & ImGuiWindowFlags_ChildWindow) && (window->DC.ItemFlags != parent_window->DC.ItemFlags))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -5180,7 +5183,7 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
 | 
				
			|||||||
            window->AutoFitFramesY--;
 | 
					            window->AutoFitFramesY--;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // New windows appears in front (we need to do that AFTER setting DC.CursorStartPos so our initial navigation reference rectangle can start around there)
 | 
					        // New windows appears in front (we need to do that AFTER setting DC.CursorStartPos so our initial navigation reference rectangle can start around there)
 | 
				
			||||||
        if (!window_was_active && !(flags & ImGuiWindowFlags_NoFocusOnAppearing))
 | 
					        if (window_just_activated_by_user && !(flags & ImGuiWindowFlags_NoFocusOnAppearing))
 | 
				
			||||||
            if (!(flags & (ImGuiWindowFlags_ChildWindow|ImGuiWindowFlags_Tooltip)) || (flags & ImGuiWindowFlags_Popup))
 | 
					            if (!(flags & (ImGuiWindowFlags_ChildWindow|ImGuiWindowFlags_Tooltip)) || (flags & ImGuiWindowFlags_Popup))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                FocusWindow(window);
 | 
					                FocusWindow(window);
 | 
				
			||||||
@@ -5914,7 +5917,14 @@ void ImGui::SetWindowCollapsed(bool collapsed, ImGuiCond cond)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool ImGui::IsWindowCollapsed()
 | 
					bool ImGui::IsWindowCollapsed()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return GImGui->CurrentWindow->Collapsed;
 | 
					    ImGuiWindow* window = GetCurrentWindowRead();
 | 
				
			||||||
 | 
					    return window->Collapsed;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool ImGui::IsWindowAppearing()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ImGuiWindow* window = GetCurrentWindowRead();
 | 
				
			||||||
 | 
					    return window->Appearing;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui::SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond)
 | 
					void ImGui::SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond)
 | 
				
			||||||
@@ -7342,6 +7352,7 @@ bool ImGui::InputScalarAsWidgetReplacement(const ImRect& aabb, const char* label
 | 
				
			|||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Our replacement widget will override the focus ID (registered previously to allow for a TAB focus to happen)
 | 
					    // Our replacement widget will override the focus ID (registered previously to allow for a TAB focus to happen)
 | 
				
			||||||
 | 
					    // On the first frame, g.ScalarAsInputTextId == 0, then on subsequent frames it becomes == id
 | 
				
			||||||
    SetActiveIDNoNav(g.ScalarAsInputTextId, window);
 | 
					    SetActiveIDNoNav(g.ScalarAsInputTextId, window);
 | 
				
			||||||
    g.ActiveIdAllowNavDirFlags = (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down);
 | 
					    g.ActiveIdAllowNavDirFlags = (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down);
 | 
				
			||||||
    SetHoveredID(0);
 | 
					    SetHoveredID(0);
 | 
				
			||||||
@@ -8808,6 +8819,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
 | 
				
			|||||||
        // Although we are active we don't prevent mouse from hovering other elements unless we are interacting right now with the widget.
 | 
					        // Although we are active we don't prevent mouse from hovering other elements unless we are interacting right now with the widget.
 | 
				
			||||||
        // Down the line we should have a cleaner library-wide concept of Selected vs Active.
 | 
					        // Down the line we should have a cleaner library-wide concept of Selected vs Active.
 | 
				
			||||||
        g.ActiveIdAllowOverlap = !io.MouseDown[0];
 | 
					        g.ActiveIdAllowOverlap = !io.MouseDown[0];
 | 
				
			||||||
 | 
					        g.WantTextInputNextFrame = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Edit in progress
 | 
					        // Edit in progress
 | 
				
			||||||
        const float mouse_x = (io.MousePos.x - frame_bb.Min.x - style.FramePadding.x) + edit_state.ScrollX;
 | 
					        const float mouse_x = (io.MousePos.x - frame_bb.Min.x - style.FramePadding.x) + edit_state.ScrollX;
 | 
				
			||||||
@@ -9468,8 +9480,7 @@ bool ImGui::Combo(const char* label, int* current_item, const char* items_separa
 | 
				
			|||||||
    return value_changed;
 | 
					    return value_changed;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Combo box function.
 | 
					bool ImGui::BeginCombo(const char* label, const char* preview_value, float popup_opened_height)
 | 
				
			||||||
bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int height_in_items)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    if (window->SkipItems)
 | 
					    if (window->SkipItems)
 | 
				
			||||||
@@ -9498,12 +9509,8 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
 | 
				
			|||||||
    RenderFrame(ImVec2(frame_bb.Max.x-arrow_size, frame_bb.Min.y), frame_bb.Max, GetColorU32(popup_open || hovered || navigated ? ImGuiCol_ButtonHovered : ImGuiCol_Button), true, style.FrameRounding); // FIXME-ROUNDING
 | 
					    RenderFrame(ImVec2(frame_bb.Max.x-arrow_size, frame_bb.Min.y), frame_bb.Max, GetColorU32(popup_open || hovered || navigated ? ImGuiCol_ButtonHovered : ImGuiCol_Button), true, style.FrameRounding); // FIXME-ROUNDING
 | 
				
			||||||
    RenderCollapseTriangle(ImVec2(frame_bb.Max.x-arrow_size, frame_bb.Min.y) + style.FramePadding, true);
 | 
					    RenderCollapseTriangle(ImVec2(frame_bb.Max.x-arrow_size, frame_bb.Min.y) + style.FramePadding, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (*current_item >= 0 && *current_item < items_count)
 | 
					    if (preview_value != NULL)
 | 
				
			||||||
    {
 | 
					        RenderTextClipped(frame_bb.Min + style.FramePadding, value_bb.Max, preview_value, NULL, NULL, ImVec2(0.0f,0.0f));
 | 
				
			||||||
        const char* item_text;
 | 
					 | 
				
			||||||
        if (items_getter(data, *current_item, &item_text))
 | 
					 | 
				
			||||||
            RenderTextClipped(frame_bb.Min + style.FramePadding, value_bb.Max, item_text, NULL, NULL, ImVec2(0.0f,0.0f));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (label_size.x > 0)
 | 
					    if (label_size.x > 0)
 | 
				
			||||||
        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
 | 
					        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
 | 
				
			||||||
@@ -9522,7 +9529,7 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
 | 
				
			|||||||
        popup_toggled = true;
 | 
					        popup_toggled = true;
 | 
				
			||||||
    if (popup_toggled)
 | 
					    if (popup_toggled)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (IsPopupOpen(id))
 | 
					        if (popup_open)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ClosePopup(id);
 | 
					            ClosePopup(id);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -9532,24 +9539,19 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
 | 
				
			|||||||
                window->NavLastId = id;
 | 
					                window->NavLastId = id;
 | 
				
			||||||
            FocusWindow(window);
 | 
					            FocusWindow(window);
 | 
				
			||||||
            OpenPopup(label);
 | 
					            OpenPopup(label);
 | 
				
			||||||
            popup_open = true;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        popup_open = !popup_open;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool value_changed = false;
 | 
					    if (!popup_open)
 | 
				
			||||||
    if (IsPopupOpen(id))
 | 
					        return false;
 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        // Size default to hold ~7 items
 | 
					 | 
				
			||||||
        if (height_in_items < 0)
 | 
					 | 
				
			||||||
            height_in_items = 7;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        float popup_height = (label_size.y + style.ItemSpacing.y) * ImMin(items_count, height_in_items) + (style.FramePadding.y * 3);
 | 
					 | 
				
			||||||
    float popup_y1 = frame_bb.Max.y;
 | 
					    float popup_y1 = frame_bb.Max.y;
 | 
				
			||||||
        float popup_y2 = ImClamp(popup_y1 + popup_height, popup_y1, g.IO.DisplaySize.y - style.DisplaySafeAreaPadding.y);
 | 
					    float popup_y2 = ImClamp(popup_y1 + popup_opened_height, popup_y1, g.IO.DisplaySize.y - style.DisplaySafeAreaPadding.y);
 | 
				
			||||||
        if ((popup_y2 - popup_y1) < ImMin(popup_height, frame_bb.Min.y - style.DisplaySafeAreaPadding.y))
 | 
					    if ((popup_y2 - popup_y1) < ImMin(popup_opened_height, frame_bb.Min.y - style.DisplaySafeAreaPadding.y))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // Position our combo ABOVE because there's more space to fit! (FIXME: Handle in Begin() or use a shared helper. We have similar code in Begin() for popup placement)
 | 
					        // Position our combo ABOVE because there's more space to fit! (FIXME: Handle in Begin() or use a shared helper. We have similar code in Begin() for popup placement)
 | 
				
			||||||
            popup_y1 = ImClamp(frame_bb.Min.y - popup_height, style.DisplaySafeAreaPadding.y, frame_bb.Min.y);
 | 
					        popup_y1 = ImClamp(frame_bb.Min.y - popup_opened_height, style.DisplaySafeAreaPadding.y, frame_bb.Min.y);
 | 
				
			||||||
        popup_y2 = frame_bb.Min.y;
 | 
					        popup_y2 = frame_bb.Min.y;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    ImRect popup_rect(ImVec2(frame_bb.Min.x, popup_y1), ImVec2(frame_bb.Max.x, popup_y2));
 | 
					    ImRect popup_rect(ImVec2(frame_bb.Min.x, popup_y1), ImVec2(frame_bb.Max.x, popup_y2));
 | 
				
			||||||
@@ -9558,11 +9560,43 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
 | 
				
			|||||||
    PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding);
 | 
					    PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const ImGuiWindowFlags flags = ImGuiWindowFlags_ComboBox | ((window->Flags & ImGuiWindowFlags_ShowBorders) ? ImGuiWindowFlags_ShowBorders : 0);
 | 
					    const ImGuiWindowFlags flags = ImGuiWindowFlags_ComboBox | ((window->Flags & ImGuiWindowFlags_ShowBorders) ? ImGuiWindowFlags_ShowBorders : 0);
 | 
				
			||||||
        if (BeginPopupEx(id, flags))
 | 
					    if (!BeginPopupEx(id, flags))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        IM_ASSERT(0);   // This should never happen as we tested for IsPopupOpen() above
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    Spacing();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ImGui::EndCombo()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    EndPopup();
 | 
				
			||||||
 | 
					    PopStyleVar();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 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 height_in_items)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
 | 
					    const ImGuiStyle& style = g.Style;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const char* preview_text = NULL;
 | 
				
			||||||
 | 
					    if (*current_item >= 0 && *current_item < items_count)
 | 
				
			||||||
 | 
					        items_getter(data, *current_item, &preview_text);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Size default to hold ~7 items
 | 
				
			||||||
 | 
					    if (height_in_items < 0)
 | 
				
			||||||
 | 
					        height_in_items = 7;
 | 
				
			||||||
 | 
					    float popup_opened_height = (g.FontSize + style.ItemSpacing.y) * ImMin(items_count, height_in_items) + (style.FramePadding.y * 3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!BeginCombo(label, preview_text, popup_opened_height))
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Display items
 | 
					    // Display items
 | 
				
			||||||
    // FIXME-OPT: Use clipper
 | 
					    // FIXME-OPT: Use clipper
 | 
				
			||||||
            Spacing();
 | 
					    bool value_changed = false;
 | 
				
			||||||
    for (int i = 0; i < items_count; i++)
 | 
					    for (int i = 0; i < items_count; i++)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        PushID((void*)(intptr_t)i);
 | 
					        PushID((void*)(intptr_t)i);
 | 
				
			||||||
@@ -9572,18 +9606,15 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
 | 
				
			|||||||
            item_text = "*Unknown item*";
 | 
					            item_text = "*Unknown item*";
 | 
				
			||||||
        if (Selectable(item_text, item_selected))
 | 
					        if (Selectable(item_text, item_selected))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
                    ClearActiveID();
 | 
					 | 
				
			||||||
            value_changed = true;
 | 
					            value_changed = true;
 | 
				
			||||||
            *current_item = i;
 | 
					            *current_item = i;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
                if (item_selected && popup_toggled)
 | 
					        if (item_selected && IsWindowAppearing())
 | 
				
			||||||
            SetItemDefaultFocus(); //SetScrollHere();
 | 
					            SetItemDefaultFocus(); //SetScrollHere();
 | 
				
			||||||
        PopID();
 | 
					        PopID();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
            EndPopup();
 | 
					
 | 
				
			||||||
        }
 | 
					    EndCombo();
 | 
				
			||||||
        PopStyleVar();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return value_changed;
 | 
					    return value_changed;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -10439,11 +10470,11 @@ static void RenderArrowsForVerticalBar(ImDrawList* draw_list, ImVec2 pos, ImVec2
 | 
				
			|||||||
static void PaintVertsLinearGradientKeepAlpha(ImDrawVert* vert_start, ImDrawVert* vert_end, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1)
 | 
					static void PaintVertsLinearGradientKeepAlpha(ImDrawVert* vert_start, ImDrawVert* vert_end, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImVec2 gradient_extent = gradient_p1 - gradient_p0;
 | 
					    ImVec2 gradient_extent = gradient_p1 - gradient_p0;
 | 
				
			||||||
    float gradient_inv_length = ImInvLength(gradient_extent, 0.0f);
 | 
					    float gradient_inv_length2 = 1.0f / ImLengthSqr(gradient_extent);
 | 
				
			||||||
    for (ImDrawVert* vert = vert_start; vert < vert_end; vert++)
 | 
					    for (ImDrawVert* vert = vert_start; vert < vert_end; vert++)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        float d = ImDot(vert->pos - gradient_p0, gradient_extent);
 | 
					        float d = ImDot(vert->pos - gradient_p0, gradient_extent);
 | 
				
			||||||
        float t = ImMin(sqrtf(ImMax(d, 0.0f)) * gradient_inv_length, 1.0f);
 | 
					        float t = ImClamp(d * gradient_inv_length2, 0.0f, 1.0f);
 | 
				
			||||||
        int r = ImLerp((int)(col0 >> IM_COL32_R_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_R_SHIFT) & 0xFF, t);
 | 
					        int r = ImLerp((int)(col0 >> IM_COL32_R_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_R_SHIFT) & 0xFF, t);
 | 
				
			||||||
        int g = ImLerp((int)(col0 >> IM_COL32_G_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_G_SHIFT) & 0xFF, t);
 | 
					        int g = ImLerp((int)(col0 >> IM_COL32_G_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_G_SHIFT) & 0xFF, t);
 | 
				
			||||||
        int b = ImLerp((int)(col0 >> IM_COL32_B_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_B_SHIFT) & 0xFF, t);
 | 
					        int b = ImLerp((int)(col0 >> IM_COL32_B_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_B_SHIFT) & 0xFF, t);
 | 
				
			||||||
@@ -11337,7 +11368,7 @@ static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
 | 
				
			|||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
    g.PrivateClipboard.clear();
 | 
					    g.PrivateClipboard.clear();
 | 
				
			||||||
    const char* text_end = text + strlen(text);
 | 
					    const char* text_end = text + strlen(text);
 | 
				
			||||||
    g.PrivateClipboard.resize((size_t)(text_end - text) + 1);
 | 
					    g.PrivateClipboard.resize((int)(text_end - text) + 1);
 | 
				
			||||||
    memcpy(&g.PrivateClipboard[0], text, (size_t)(text_end - text));
 | 
					    memcpy(&g.PrivateClipboard[0], text, (size_t)(text_end - text));
 | 
				
			||||||
    g.PrivateClipboard[(int)(text_end - text)] = 0;
 | 
					    g.PrivateClipboard[(int)(text_end - text)] = 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								imgui.h
									
									
									
									
									
								
							@@ -150,6 +150,7 @@ namespace ImGui
 | 
				
			|||||||
    IMGUI_API float         GetWindowWidth();
 | 
					    IMGUI_API float         GetWindowWidth();
 | 
				
			||||||
    IMGUI_API float         GetWindowHeight();
 | 
					    IMGUI_API float         GetWindowHeight();
 | 
				
			||||||
    IMGUI_API bool          IsWindowCollapsed();
 | 
					    IMGUI_API bool          IsWindowCollapsed();
 | 
				
			||||||
 | 
					    IMGUI_API bool          IsWindowAppearing();
 | 
				
			||||||
    IMGUI_API void          SetWindowFontScale(float scale);                                    // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows
 | 
					    IMGUI_API void          SetWindowFontScale(float scale);                                    // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    IMGUI_API void          SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0);            // set next window position. call before Begin()
 | 
					    IMGUI_API void          SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0);            // set next window position. call before Begin()
 | 
				
			||||||
@@ -499,8 +500,6 @@ namespace ImGui
 | 
				
			|||||||
    static inline ImFont*   GetWindowFont() { return GetFont(); }                              // OBSOLETE 1.48+
 | 
					    static inline ImFont*   GetWindowFont() { return GetFont(); }                              // OBSOLETE 1.48+
 | 
				
			||||||
    static inline float     GetWindowFontSize() { return GetFontSize(); }                      // OBSOLETE 1.48+
 | 
					    static inline float     GetWindowFontSize() { return GetFontSize(); }                      // OBSOLETE 1.48+
 | 
				
			||||||
    static inline void      SetScrollPosHere() { SetScrollHere(); }                            // OBSOLETE 1.42+
 | 
					    static inline void      SetScrollPosHere() { SetScrollHere(); }                            // OBSOLETE 1.42+
 | 
				
			||||||
    static inline bool      GetWindowCollapsed() { return ImGui::IsWindowCollapsed(); }        // OBSOLETE 1.39+
 | 
					 | 
				
			||||||
    static inline bool      IsRectClipped(const ImVec2& size) { return !IsRectVisible(size); } // OBSOLETE 1.39+
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // namespace ImGui
 | 
					} // namespace ImGui
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1554,9 +1554,9 @@ void ImGui::ShowTestWindow(bool* p_open)
 | 
				
			|||||||
            ImGui::InputFloat("blue", &bar, 0.05f, 0, 3);
 | 
					            ImGui::InputFloat("blue", &bar, 0.05f, 0, 3);
 | 
				
			||||||
            ImGui::NextColumn();
 | 
					            ImGui::NextColumn();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (ImGui::CollapsingHeader("Category A")) ImGui::Text("Blah blah blah"); ImGui::NextColumn();
 | 
					            if (ImGui::CollapsingHeader("Category A")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
 | 
				
			||||||
            if (ImGui::CollapsingHeader("Category B")) ImGui::Text("Blah blah blah"); ImGui::NextColumn();
 | 
					            if (ImGui::CollapsingHeader("Category B")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
 | 
				
			||||||
            if (ImGui::CollapsingHeader("Category C")) ImGui::Text("Blah blah blah"); ImGui::NextColumn();
 | 
					            if (ImGui::CollapsingHeader("Category C")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
 | 
				
			||||||
            ImGui::Columns(1);
 | 
					            ImGui::Columns(1);
 | 
				
			||||||
            ImGui::Separator();
 | 
					            ImGui::Separator();
 | 
				
			||||||
            ImGui::TreePop();
 | 
					            ImGui::TreePop();
 | 
				
			||||||
@@ -2117,9 +2117,9 @@ static void ShowExampleAppConstrainedResize(bool* p_open)
 | 
				
			|||||||
            "Custom: Fixed Steps (100)",
 | 
					            "Custom: Fixed Steps (100)",
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        ImGui::Combo("Constraint", &type, desc, IM_ARRAYSIZE(desc)); 
 | 
					        ImGui::Combo("Constraint", &type, desc, IM_ARRAYSIZE(desc)); 
 | 
				
			||||||
        if (ImGui::Button("200x200")) ImGui::SetWindowSize(ImVec2(200,200)); ImGui::SameLine();
 | 
					        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("500x500")) { ImGui::SetWindowSize(ImVec2(500,500)); } ImGui::SameLine();
 | 
				
			||||||
        if (ImGui::Button("800x200")) ImGui::SetWindowSize(ImVec2(800,200));
 | 
					        if (ImGui::Button("800x200")) { ImGui::SetWindowSize(ImVec2(800,200)); }
 | 
				
			||||||
        for (int i = 0; i < 10; i++) 
 | 
					        for (int i = 0; i < 10; i++) 
 | 
				
			||||||
            ImGui::Text("Hello, sailor! Making this line long enough for the example.");
 | 
					            ImGui::Text("Hello, sailor! Making this line long enough for the example.");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -2337,8 +2337,8 @@ struct ExampleAppConsole
 | 
				
			|||||||
        // TODO: display items starting from the bottom
 | 
					        // TODO: display items starting from the bottom
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (ImGui::SmallButton("Add Dummy Text")) { AddLog("%d some text", Items.Size); AddLog("some more text"); AddLog("display very important message here!"); } ImGui::SameLine();
 | 
					        if (ImGui::SmallButton("Add Dummy Text")) { AddLog("%d some text", Items.Size); AddLog("some more text"); AddLog("display very important message here!"); } ImGui::SameLine();
 | 
				
			||||||
        if (ImGui::SmallButton("Add Dummy Error")) AddLog("[error] something went wrong"); ImGui::SameLine();
 | 
					        if (ImGui::SmallButton("Add Dummy Error")) { AddLog("[error] something went wrong"); } ImGui::SameLine();
 | 
				
			||||||
        if (ImGui::SmallButton("Clear")) ClearLog(); ImGui::SameLine();
 | 
					        if (ImGui::SmallButton("Clear")) { ClearLog(); } ImGui::SameLine();
 | 
				
			||||||
        bool copy_to_clipboard = ImGui::SmallButton("Copy"); ImGui::SameLine();
 | 
					        bool copy_to_clipboard = ImGui::SmallButton("Copy"); ImGui::SameLine();
 | 
				
			||||||
        if (ImGui::SmallButton("Scroll to bottom")) ScrollToBottom = true;
 | 
					        if (ImGui::SmallButton("Scroll to bottom")) ScrollToBottom = true;
 | 
				
			||||||
        //static float t = 0.0f; if (ImGui::GetTime() - t > 0.02f) { t = ImGui::GetTime(); AddLog("Spam %f", t); }
 | 
					        //static float t = 0.0f; if (ImGui::GetTime() - t > 0.02f) { t = ImGui::GetTime(); AddLog("Spam %f", t); }
 | 
				
			||||||
@@ -2398,7 +2398,7 @@ struct ExampleAppConsole
 | 
				
			|||||||
        if (ImGui::InputText("Input", InputBuf, IM_ARRAYSIZE(InputBuf), ImGuiInputTextFlags_EnterReturnsTrue|ImGuiInputTextFlags_CallbackCompletion|ImGuiInputTextFlags_CallbackHistory, &TextEditCallbackStub, (void*)this))
 | 
					        if (ImGui::InputText("Input", InputBuf, IM_ARRAYSIZE(InputBuf), ImGuiInputTextFlags_EnterReturnsTrue|ImGuiInputTextFlags_CallbackCompletion|ImGuiInputTextFlags_CallbackHistory, &TextEditCallbackStub, (void*)this))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            char* input_end = InputBuf+strlen(InputBuf);
 | 
					            char* input_end = InputBuf+strlen(InputBuf);
 | 
				
			||||||
            while (input_end > InputBuf && input_end[-1] == ' ') input_end--; *input_end = 0;
 | 
					            while (input_end > InputBuf && input_end[-1] == ' ') { input_end--; } *input_end = 0;
 | 
				
			||||||
            if (InputBuf[0])
 | 
					            if (InputBuf[0])
 | 
				
			||||||
                ExecCommand(InputBuf);
 | 
					                ExecCommand(InputBuf);
 | 
				
			||||||
            strcpy(InputBuf, "");
 | 
					            strcpy(InputBuf, "");
 | 
				
			||||||
@@ -2441,7 +2441,8 @@ struct ExampleAppConsole
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (Stricmp(command_line, "HISTORY") == 0)
 | 
					        else if (Stricmp(command_line, "HISTORY") == 0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            for (int i = History.Size >= 10 ? History.Size - 10 : 0; i < History.Size; i++)
 | 
					            int first = History.Size - 10;
 | 
				
			||||||
 | 
					            for (int i = first > 0 ? first : 0; i < History.Size; i++)
 | 
				
			||||||
                AddLog("%3d: %s\n", i, History[i]);
 | 
					                AddLog("%3d: %s\n", i, History[i]);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -526,8 +526,9 @@ struct ImGuiContext
 | 
				
			|||||||
    float                   FramerateSecPerFrame[120];          // calculate estimate of framerate for user
 | 
					    float                   FramerateSecPerFrame[120];          // calculate estimate of framerate for user
 | 
				
			||||||
    int                     FramerateSecPerFrameIdx;
 | 
					    int                     FramerateSecPerFrameIdx;
 | 
				
			||||||
    float                   FramerateSecPerFrameAccum;
 | 
					    float                   FramerateSecPerFrameAccum;
 | 
				
			||||||
    int                     CaptureMouseNextFrame;              // explicit capture via CaptureInputs() sets those flags
 | 
					    int                     WantCaptureMouseNextFrame;          // explicit capture via CaptureInputs() sets those flags
 | 
				
			||||||
    int                     CaptureKeyboardNextFrame;
 | 
					    int                     WantCaptureKeyboardNextFrame;
 | 
				
			||||||
 | 
					    int                     WantTextInputNextFrame;
 | 
				
			||||||
    char                    TempBuffer[1024*3+1];               // temporary text buffer
 | 
					    char                    TempBuffer[1024*3+1];               // temporary text buffer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImGuiContext()
 | 
					    ImGuiContext()
 | 
				
			||||||
@@ -617,7 +618,7 @@ struct ImGuiContext
 | 
				
			|||||||
        memset(FramerateSecPerFrame, 0, sizeof(FramerateSecPerFrame));
 | 
					        memset(FramerateSecPerFrame, 0, sizeof(FramerateSecPerFrame));
 | 
				
			||||||
        FramerateSecPerFrameIdx = 0;
 | 
					        FramerateSecPerFrameIdx = 0;
 | 
				
			||||||
        FramerateSecPerFrameAccum = 0.0f;
 | 
					        FramerateSecPerFrameAccum = 0.0f;
 | 
				
			||||||
        CaptureMouseNextFrame = CaptureKeyboardNextFrame = -1;
 | 
					        WantCaptureMouseNextFrame = WantCaptureKeyboardNextFrame = WantTextInputNextFrame = -1;
 | 
				
			||||||
        memset(TempBuffer, 0, sizeof(TempBuffer));
 | 
					        memset(TempBuffer, 0, sizeof(TempBuffer));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -748,7 +749,8 @@ struct IMGUI_API ImGuiWindow
 | 
				
			|||||||
    bool                    Accessed;                           // Set to true when any widget access the current window
 | 
					    bool                    Accessed;                           // Set to true when any widget access the current window
 | 
				
			||||||
    bool                    Collapsed;                          // Set when collapsing window to become only title-bar
 | 
					    bool                    Collapsed;                          // Set when collapsing window to become only title-bar
 | 
				
			||||||
    bool                    CollapseToggleWanted;
 | 
					    bool                    CollapseToggleWanted;
 | 
				
			||||||
    bool                    SkipItems;                          // == Visible && !Collapsed
 | 
					    bool                    SkipItems;                          // Set when items can safely be all clipped (e.g. window not visible or collapsed)
 | 
				
			||||||
 | 
					    bool                    Appearing;                          // Set during the frame where the window is appearing (or re-appearing)
 | 
				
			||||||
    int                     BeginCount;                         // Number of Begin() during the current frame (generally 0 or 1, 1+ if appending via multiple Begin/End pairs)
 | 
					    int                     BeginCount;                         // Number of Begin() during the current frame (generally 0 or 1, 1+ if appending via multiple Begin/End pairs)
 | 
				
			||||||
    ImGuiID                 PopupId;                            // ID in the popup stack when this window is used as a popup/menu (because we use generic Name/ID for recycling)
 | 
					    ImGuiID                 PopupId;                            // ID in the popup stack when this window is used as a popup/menu (because we use generic Name/ID for recycling)
 | 
				
			||||||
    ImGuiID                 NavLastId;                          // Last known NavId for this window, for nav layer 0 only.
 | 
					    ImGuiID                 NavLastId;                          // Last known NavId for this window, for nav layer 0 only.
 | 
				
			||||||
@@ -846,11 +848,15 @@ namespace ImGui
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    IMGUI_API int           CalcTypematicPressedRepeatAmount(float t, float t_prev, float repeat_delay, float repeat_rate);
 | 
					    IMGUI_API int           CalcTypematicPressedRepeatAmount(float t, float t_prev, float repeat_delay, float repeat_rate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // New Columns API
 | 
					    // FIXME-WIP: New Columns API
 | 
				
			||||||
    IMGUI_API void          BeginColumns(const char* id, int count, ImGuiColumnsFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns().
 | 
					    IMGUI_API void          BeginColumns(const char* id, int count, ImGuiColumnsFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns().
 | 
				
			||||||
    IMGUI_API void          EndColumns();                                                         // close columns
 | 
					    IMGUI_API void          EndColumns();                                                         // close columns
 | 
				
			||||||
    IMGUI_API void          PushColumnClipRect(int column_index = -1);
 | 
					    IMGUI_API void          PushColumnClipRect(int column_index = -1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // FIXME-WIP: New Combo API
 | 
				
			||||||
 | 
					    IMGUI_API bool          BeginCombo(const char* label, const char* preview_value, float popup_opened_height);
 | 
				
			||||||
 | 
					    IMGUI_API void          EndCombo();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // NB: All position are in absolute pixels coordinates (never using window coordinates internally)
 | 
					    // NB: All position are in absolute pixels coordinates (never using window coordinates internally)
 | 
				
			||||||
    // AVOID USING OUTSIDE OF IMGUI.CPP! NOT FOR PUBLIC CONSUMPTION. THOSE FUNCTIONS ARE A MESS. THEIR SIGNATURE AND BEHAVIOR WILL CHANGE, THEY NEED TO BE REFACTORED INTO SOMETHING DECENT.
 | 
					    // AVOID USING OUTSIDE OF IMGUI.CPP! NOT FOR PUBLIC CONSUMPTION. THOSE FUNCTIONS ARE A MESS. THEIR SIGNATURE AND BEHAVIOR WILL CHANGE, THEY NEED TO BE REFACTORED INTO SOMETHING DECENT.
 | 
				
			||||||
    IMGUI_API void          RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true);
 | 
					    IMGUI_API void          RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user