mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Merge branch 'master' into viewport
# Conflicts: # docs/CHANGELOG.txt # examples/imgui_impl_win32.cpp # imgui_demo.cpp
This commit is contained in:
		@@ -892,17 +892,18 @@ static void ShowDemoWindowWidgets()
 | 
			
		||||
        }
 | 
			
		||||
        if (ImGui::TreeNode("Grid"))
 | 
			
		||||
        {
 | 
			
		||||
            static bool selected[16] = { true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true };
 | 
			
		||||
            for (int i = 0; i < 16; i++)
 | 
			
		||||
            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 < 4*4; i++)
 | 
			
		||||
            {
 | 
			
		||||
                ImGui::PushID(i);
 | 
			
		||||
                if (ImGui::Selectable("Sailor", &selected[i], 0, ImVec2(50,50)))
 | 
			
		||||
                {
 | 
			
		||||
                    int x = i % 4, y = i / 4;
 | 
			
		||||
                    if (x > 0) selected[i - 1] ^= 1;
 | 
			
		||||
                    if (x < 3) selected[i + 1] ^= 1;
 | 
			
		||||
                    if (y > 0) selected[i - 4] ^= 1;
 | 
			
		||||
                    if (y < 3) selected[i + 4] ^= 1;
 | 
			
		||||
                    int x = i % 4;
 | 
			
		||||
                    int y = i / 4;
 | 
			
		||||
                    if (x > 0) { selected[i - 1] ^= 1; }
 | 
			
		||||
                    if (x < 3) { selected[i + 1] ^= 1; }
 | 
			
		||||
                    if (y > 0) { selected[i - 4] ^= 1; }
 | 
			
		||||
                    if (y < 3) { selected[i + 4] ^= 1; }
 | 
			
		||||
                }
 | 
			
		||||
                if ((i % 4) < 3) ImGui::SameLine();
 | 
			
		||||
                ImGui::PopID();
 | 
			
		||||
@@ -968,7 +969,7 @@ static void ShowDemoWindowWidgets()
 | 
			
		||||
        static float values[90] = { 0 };
 | 
			
		||||
        static int values_offset = 0;
 | 
			
		||||
        static double refresh_time = 0.0;
 | 
			
		||||
        if (!animate || refresh_time == 0.0f)
 | 
			
		||||
        if (!animate || refresh_time == 0.0)
 | 
			
		||||
            refresh_time = ImGui::GetTime();
 | 
			
		||||
        while (refresh_time < ImGui::GetTime()) // Create dummy data at fixed 60 hz rate for the demo
 | 
			
		||||
        {
 | 
			
		||||
@@ -1996,9 +1997,9 @@ static void ShowDemoWindowLayout()
 | 
			
		||||
        ImGui::EndChild();
 | 
			
		||||
        ImGui::PopStyleVar(2);
 | 
			
		||||
        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::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);
 | 
			
		||||
        if (scroll_x_delta != 0.0f)
 | 
			
		||||
        {
 | 
			
		||||
@@ -2526,9 +2527,9 @@ static void ShowDemoWindowMisc()
 | 
			
		||||
            // Use >= 0 parameter to SetKeyboardFocusHere() to focus an upcoming item
 | 
			
		||||
            static float f3[3] = { 0.0f, 0.0f, 0.0f };
 | 
			
		||||
            int focus_ahead = -1;
 | 
			
		||||
            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 Z")) focus_ahead = 2;
 | 
			
		||||
            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 Z")) { focus_ahead = 2; }
 | 
			
		||||
            if (focus_ahead != -1) ImGui::SetKeyboardFocusHere(focus_ahead);
 | 
			
		||||
            ImGui::SliderFloat3("Float3", &f3[0], 0.0f, 1.0f);
 | 
			
		||||
 | 
			
		||||
@@ -3760,8 +3761,8 @@ static void ShowExampleAppConstrainedResize(bool* p_open)
 | 
			
		||||
    if (type == 2) ImGui::SetNextWindowSizeConstraints(ImVec2(100, 100), ImVec2(FLT_MAX, FLT_MAX)); // Width > 100, Height > 100
 | 
			
		||||
    if (type == 3) ImGui::SetNextWindowSizeConstraints(ImVec2(400, -1),  ImVec2(500, -1));          // Width 400-500
 | 
			
		||||
    if (type == 4) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 400),  ImVec2(-1, 500));          // Height 400-500
 | 
			
		||||
    if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0),     ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square);          // Always Square
 | 
			
		||||
    if (type == 6) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0),     ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)100);// Fixed Step
 | 
			
		||||
    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*)(intptr_t)100); // Fixed Step
 | 
			
		||||
 | 
			
		||||
    ImGuiWindowFlags flags = auto_resize ? ImGuiWindowFlags_AlwaysAutoResize : 0;
 | 
			
		||||
    if (ImGui::Begin("Example: Constrained Resize", p_open, flags))
 | 
			
		||||
@@ -3800,6 +3801,7 @@ static void ShowExampleAppSimpleOverlay(bool* p_open)
 | 
			
		||||
    // FIXME-VIEWPORT-ABS: Select a default viewport
 | 
			
		||||
    const float DISTANCE = 10.0f;
 | 
			
		||||
    static int corner = 0;
 | 
			
		||||
    ImGuiIO& io = ImGui::GetIO();
 | 
			
		||||
    if (corner != -1)
 | 
			
		||||
    {
 | 
			
		||||
        ImGuiViewport* viewport = ImGui::GetMainViewport();
 | 
			
		||||
@@ -3814,7 +3816,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::Separator();
 | 
			
		||||
        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
 | 
			
		||||
            ImGui::Text("Mouse Position: <invalid>");
 | 
			
		||||
        if (ImGui::BeginPopupContextWindow())
 | 
			
		||||
@@ -3889,27 +3891,30 @@ static void ShowExampleAppCustomRendering(bool* p_open)
 | 
			
		||||
    static ImVec4 col = ImVec4(1.0f, 1.0f, 0.4f, 1.0f);
 | 
			
		||||
    ImGui::DragFloat("Size", &sz, 0.2f, 2.0f, 72.0f, "%.0f");
 | 
			
		||||
    ImGui::DragFloat("Thickness", &thickness, 0.05f, 1.0f, 8.0f, "%.02f");
 | 
			
		||||
    ImGui::ColorEdit3("Color", &col.x);
 | 
			
		||||
    ImGui::ColorEdit4("Color", &col.x);
 | 
			
		||||
    {
 | 
			
		||||
        const ImVec2 p = ImGui::GetCursorScreenPos();
 | 
			
		||||
        const ImU32 col32 = ImColor(col);
 | 
			
		||||
        float x = p.x + 4.0f, y = p.y + 4.0f, spacing = 8.0f;
 | 
			
		||||
        for (int n = 0; n < 2; n++)
 | 
			
		||||
        {
 | 
			
		||||
            float curr_thickness = (n == 0) ? 1.0f : thickness;
 | 
			
		||||
            draw_list->AddCircle(ImVec2(x+sz*0.5f, y+sz*0.5f), sz*0.5f, col32, 20, curr_thickness); x += sz+spacing;
 | 
			
		||||
            draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 0.0f, ImDrawCornerFlags_All, curr_thickness); x += sz+spacing;
 | 
			
		||||
            draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f, ImDrawCornerFlags_All, curr_thickness); x += sz+spacing;
 | 
			
		||||
            draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotRight, curr_thickness); x += sz+spacing;
 | 
			
		||||
            draw_list->AddTriangle(ImVec2(x+sz*0.5f, y), ImVec2(x+sz,y+sz-0.5f), ImVec2(x,y+sz-0.5f), col32, curr_thickness); x += sz+spacing;
 | 
			
		||||
            draw_list->AddLine(ImVec2(x, y), ImVec2(x+sz, y   ), col32, curr_thickness); x += sz+spacing;   // Horizontal line (note: drawing a filled rectangle will be faster!)
 | 
			
		||||
            draw_list->AddLine(ImVec2(x, y), ImVec2(x,    y+sz), col32, curr_thickness); x += spacing;      // Vertical line (note: drawing a filled rectangle will be faster!)
 | 
			
		||||
            draw_list->AddLine(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, curr_thickness); x += sz+spacing;   // Diagonal line
 | 
			
		||||
            draw_list->AddBezierCurve(ImVec2(x, y), ImVec2(x+sz*1.3f,y+sz*0.3f), ImVec2(x+sz-sz*1.3f,y+sz-sz*0.3f), ImVec2(x+sz, y+sz), col32, curr_thickness);
 | 
			
		||||
            // First line uses a thickness of 1.0, second line uses the configurable thickness
 | 
			
		||||
            float th = (n == 0) ? 1.0f : thickness;
 | 
			
		||||
            draw_list->AddCircle(ImVec2(x+sz*0.5f, y+sz*0.5f), sz*0.5f, col32, 6, th); x += sz+spacing;     // Hexagon
 | 
			
		||||
            draw_list->AddCircle(ImVec2(x+sz*0.5f, y+sz*0.5f), sz*0.5f, col32, 20, th); x += sz+spacing;    // Circle
 | 
			
		||||
            draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 0.0f, ImDrawCornerFlags_All, th); x += sz+spacing;
 | 
			
		||||
            draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f, ImDrawCornerFlags_All, th); x += sz+spacing;
 | 
			
		||||
            draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotRight, th); x += sz+spacing;
 | 
			
		||||
            draw_list->AddTriangle(ImVec2(x+sz*0.5f, y), ImVec2(x+sz,y+sz-0.5f), ImVec2(x,y+sz-0.5f), col32, th); x += sz+spacing;
 | 
			
		||||
            draw_list->AddLine(ImVec2(x, y), ImVec2(x+sz, y   ), col32, th); x += sz+spacing;               // Horizontal line (note: drawing a filled rectangle will be faster!)
 | 
			
		||||
            draw_list->AddLine(ImVec2(x, y), ImVec2(x,    y+sz), col32, th); x += spacing;                  // Vertical line (note: drawing a filled rectangle will be faster!)
 | 
			
		||||
            draw_list->AddLine(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, th); x += sz+spacing;               // Diagonal line
 | 
			
		||||
            draw_list->AddBezierCurve(ImVec2(x, y), ImVec2(x+sz*1.3f,y+sz*0.3f), ImVec2(x+sz-sz*1.3f,y+sz-sz*0.3f), ImVec2(x+sz, y+sz), col32, th);
 | 
			
		||||
            x = p.x + 4;
 | 
			
		||||
            y += sz+spacing;
 | 
			
		||||
        }
 | 
			
		||||
        draw_list->AddCircleFilled(ImVec2(x+sz*0.5f, y+sz*0.5f), sz*0.5f, col32, 32); x += sz+spacing;
 | 
			
		||||
        draw_list->AddCircleFilled(ImVec2(x+sz*0.5f, y+sz*0.5f), sz*0.5f, col32, 6); x += sz+spacing;       // Hexagon
 | 
			
		||||
        draw_list->AddCircleFilled(ImVec2(x+sz*0.5f, y+sz*0.5f), sz*0.5f, col32, 32); x += sz+spacing;      // Circle
 | 
			
		||||
        draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+sz, y+sz), col32); x += sz+spacing;
 | 
			
		||||
        draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f); x += sz+spacing;
 | 
			
		||||
        draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotRight); x += sz+spacing;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user