| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -924,17 +924,18 @@ static void ShowDemoWindowWidgets() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (ImGui::TreeNode("Grid")) | 
					 | 
					 | 
					 | 
					        if (ImGui::TreeNode("Grid")) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        { | 
					 | 
					 | 
					 | 
					        { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            static bool selected[16] = { true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true }; | 
					 | 
					 | 
					 | 
					            static bool selected[4*4] = { true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true }; | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            for (int i = 0; i < 16; i++) | 
					 | 
					 | 
					 | 
					            for (int i = 0; i < 4*4; i++) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            { | 
					 | 
					 | 
					 | 
					            { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                ImGui::PushID(i); | 
					 | 
					 | 
					 | 
					                ImGui::PushID(i); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                if (ImGui::Selectable("Sailor", &selected[i], 0, ImVec2(50,50))) | 
					 | 
					 | 
					 | 
					                if (ImGui::Selectable("Sailor", &selected[i], 0, ImVec2(50,50))) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                { | 
					 | 
					 | 
					 | 
					                { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    int x = i % 4, y = i / 4; | 
					 | 
					 | 
					 | 
					                    int x = i % 4; | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    if (x > 0) selected[i - 1] ^= 1; | 
					 | 
					 | 
					 | 
					                    int y = i / 4; | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    if (x < 3) selected[i + 1] ^= 1; | 
					 | 
					 | 
					 | 
					                    if (x > 0) { selected[i - 1] ^= 1; } | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    if (y > 0) selected[i - 4] ^= 1; | 
					 | 
					 | 
					 | 
					                    if (x < 3) { selected[i + 1] ^= 1; } | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    if (y < 3) selected[i + 4] ^= 1; | 
					 | 
					 | 
					 | 
					                    if (y > 0) { selected[i - 4] ^= 1; } | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    if (y < 3) { selected[i + 4] ^= 1; } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                } | 
					 | 
					 | 
					 | 
					                } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                if ((i % 4) < 3) ImGui::SameLine(); | 
					 | 
					 | 
					 | 
					                if ((i % 4) < 3) ImGui::SameLine(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                ImGui::PopID(); | 
					 | 
					 | 
					 | 
					                ImGui::PopID(); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1000,7 +1001,7 @@ static void ShowDemoWindowWidgets() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        static float values[90] = { 0 }; | 
					 | 
					 | 
					 | 
					        static float values[90] = { 0 }; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        static int values_offset = 0; | 
					 | 
					 | 
					 | 
					        static int values_offset = 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        static double refresh_time = 0.0; | 
					 | 
					 | 
					 | 
					        static double refresh_time = 0.0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (!animate || refresh_time == 0.0f) | 
					 | 
					 | 
					 | 
					        if (!animate || refresh_time == 0.0) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            refresh_time = ImGui::GetTime(); | 
					 | 
					 | 
					 | 
					            refresh_time = ImGui::GetTime(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        while (refresh_time < ImGui::GetTime()) // Create dummy data at fixed 60 hz rate for the demo
 | 
					 | 
					 | 
					 | 
					        while (refresh_time < ImGui::GetTime()) // Create dummy data at fixed 60 hz rate for the demo
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        { | 
					 | 
					 | 
					 | 
					        { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2032,9 +2033,9 @@ static void ShowDemoWindowLayout() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ImGui::EndChild(); | 
					 | 
					 | 
					 | 
					        ImGui::EndChild(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ImGui::PopStyleVar(2); | 
					 | 
					 | 
					 | 
					        ImGui::PopStyleVar(2); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        float scroll_x_delta = 0.0f; | 
					 | 
					 | 
					 | 
					        float scroll_x_delta = 0.0f; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ImGui::SmallButton("<<"); if (ImGui::IsItemActive()) scroll_x_delta = -ImGui::GetIO().DeltaTime * 1000.0f; ImGui::SameLine(); | 
					 | 
					 | 
					 | 
					        ImGui::SmallButton("<<"); if (ImGui::IsItemActive()) { scroll_x_delta = -ImGui::GetIO().DeltaTime * 1000.0f; } ImGui::SameLine(); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ImGui::Text("Scroll from code"); ImGui::SameLine(); | 
					 | 
					 | 
					 | 
					        ImGui::Text("Scroll from code"); ImGui::SameLine(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ImGui::SmallButton(">>"); if (ImGui::IsItemActive()) scroll_x_delta = +ImGui::GetIO().DeltaTime * 1000.0f; ImGui::SameLine(); | 
					 | 
					 | 
					 | 
					        ImGui::SmallButton(">>"); if (ImGui::IsItemActive()) { scroll_x_delta = +ImGui::GetIO().DeltaTime * 1000.0f; } ImGui::SameLine(); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ImGui::Text("%.0f/%.0f", scroll_x, scroll_max_x); | 
					 | 
					 | 
					 | 
					        ImGui::Text("%.0f/%.0f", scroll_x, scroll_max_x); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (scroll_x_delta != 0.0f) | 
					 | 
					 | 
					 | 
					        if (scroll_x_delta != 0.0f) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        { | 
					 | 
					 | 
					 | 
					        { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2562,9 +2563,9 @@ static void ShowDemoWindowMisc() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            // Use >= 0 parameter to SetKeyboardFocusHere() to focus an upcoming item
 | 
					 | 
					 | 
					 | 
					            // Use >= 0 parameter to SetKeyboardFocusHere() to focus an upcoming item
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            static float f3[3] = { 0.0f, 0.0f, 0.0f }; | 
					 | 
					 | 
					 | 
					            static float f3[3] = { 0.0f, 0.0f, 0.0f }; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            int focus_ahead = -1; | 
					 | 
					 | 
					 | 
					            int focus_ahead = -1; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (ImGui::Button("Focus on X")) focus_ahead = 0; ImGui::SameLine(); | 
					 | 
					 | 
					 | 
					            if (ImGui::Button("Focus on X")) { focus_ahead = 0; } ImGui::SameLine(); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (ImGui::Button("Focus on Y")) focus_ahead = 1; ImGui::SameLine(); | 
					 | 
					 | 
					 | 
					            if (ImGui::Button("Focus on Y")) { focus_ahead = 1; } ImGui::SameLine(); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (ImGui::Button("Focus on Z")) focus_ahead = 2; | 
					 | 
					 | 
					 | 
					            if (ImGui::Button("Focus on Z")) { focus_ahead = 2; } | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (focus_ahead != -1) ImGui::SetKeyboardFocusHere(focus_ahead); | 
					 | 
					 | 
					 | 
					            if (focus_ahead != -1) ImGui::SetKeyboardFocusHere(focus_ahead); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            ImGui::SliderFloat3("Float3", &f3[0], 0.0f, 1.0f); | 
					 | 
					 | 
					 | 
					            ImGui::SliderFloat3("Float3", &f3[0], 0.0f, 1.0f); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -3812,7 +3813,7 @@ static void ShowExampleAppConstrainedResize(bool* p_open) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (type == 3) ImGui::SetNextWindowSizeConstraints(ImVec2(400, -1),  ImVec2(500, -1));          // Width 400-500
 | 
					 | 
					 | 
					 | 
					    if (type == 3) ImGui::SetNextWindowSizeConstraints(ImVec2(400, -1),  ImVec2(500, -1));          // Width 400-500
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (type == 4) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 400),  ImVec2(-1, 500));          // Height 400-500
 | 
					 | 
					 | 
					 | 
					    if (type == 4) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 400),  ImVec2(-1, 500));          // Height 400-500
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0),     ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square);                     // Always Square
 | 
					 | 
					 | 
					 | 
					    if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0),     ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square);                     // Always Square
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (type == 6) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0),     ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)100);// Fixed Step
 | 
					 | 
					 | 
					 | 
					    if (type == 6) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0),     ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)(intptr_t)100); // Fixed Step
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ImGuiWindowFlags flags = auto_resize ? ImGuiWindowFlags_AlwaysAutoResize : 0; | 
					 | 
					 | 
					 | 
					    ImGuiWindowFlags flags = auto_resize ? ImGuiWindowFlags_AlwaysAutoResize : 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (ImGui::Begin("Example: Constrained Resize", p_open, flags)) | 
					 | 
					 | 
					 | 
					    if (ImGui::Begin("Example: Constrained Resize", p_open, flags)) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -3853,6 +3854,7 @@ static void ShowExampleAppSimpleOverlay(bool* p_open) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // FIXME-VIEWPORT-ABS: Select a default viewport
 | 
					 | 
					 | 
					 | 
					    // FIXME-VIEWPORT-ABS: Select a default viewport
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    const float DISTANCE = 10.0f; | 
					 | 
					 | 
					 | 
					    const float DISTANCE = 10.0f; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    static int corner = 0; | 
					 | 
					 | 
					 | 
					    static int corner = 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    ImGuiIO& io = ImGui::GetIO(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (corner != -1) | 
					 | 
					 | 
					 | 
					    if (corner != -1) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    { | 
					 | 
					 | 
					 | 
					    { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ImGuiViewport* viewport = ImGui::GetMainViewport(); | 
					 | 
					 | 
					 | 
					        ImGuiViewport* viewport = ImGui::GetMainViewport(); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -3867,7 +3869,7 @@ static void ShowExampleAppSimpleOverlay(bool* p_open) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ImGui::Text("Simple overlay\n" "in the corner of the screen.\n" "(right-click to change position)"); | 
					 | 
					 | 
					 | 
					        ImGui::Text("Simple overlay\n" "in the corner of the screen.\n" "(right-click to change position)"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ImGui::Separator(); | 
					 | 
					 | 
					 | 
					        ImGui::Separator(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (ImGui::IsMousePosValid()) | 
					 | 
					 | 
					 | 
					        if (ImGui::IsMousePosValid()) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            ImGui::Text("Mouse Position: (%.1f,%.1f)", ImGui::GetIO().MousePos.x, ImGui::GetIO().MousePos.y); | 
					 | 
					 | 
					 | 
					            ImGui::Text("Mouse Position: (%.1f,%.1f)", io.MousePos.x, io.MousePos.y); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        else | 
					 | 
					 | 
					 | 
					        else | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            ImGui::Text("Mouse Position: <invalid>"); | 
					 | 
					 | 
					 | 
					            ImGui::Text("Mouse Position: <invalid>"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (ImGui::BeginPopupContextWindow()) | 
					 | 
					 | 
					 | 
					        if (ImGui::BeginPopupContextWindow()) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |