mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-11-04 09:44:29 +00:00 
			
		
		
		
	DrawList: Replace "bool close" in drawing functions with flags.
This commit is contained in:
		@@ -37,6 +37,11 @@ HOW TO UPDATE?
 | 
			
		||||
 | 
			
		||||
Breaking Changes:
 | 
			
		||||
 | 
			
		||||
- ImDrawList: upgraded AddPolyline()/PathStroke()'s "bool closed" parameter to use "ImDrawFlags flags".
 | 
			
		||||
  The matching ImDrawFlags_Closed value is guaranteed to always stay == 1 in the future.
 | 
			
		||||
      bool closed = false ----> use ImDrawFlags_None, or 0
 | 
			
		||||
      bool closed = true  ----> use ImDrawFlags_Closed
 | 
			
		||||
  Difference may not be noticeable for most but zealous type-checking tools may report a need to change.
 | 
			
		||||
- Style: renamed rarely used style.CircleSegmentMaxError (old default = 1.60f)
 | 
			
		||||
  to style.CircleTessellationMaxError (new default = 0.30f) as its meaning changed. (#3808) [@thedmd]
 | 
			
		||||
- Win32+MinGW: Re-enabled IME functions by default even under MinGW. In July 2016, issue #738 had me incorrectly
 | 
			
		||||
 
 | 
			
		||||
@@ -376,6 +376,7 @@ CODE
 | 
			
		||||
 When you are not sure about a old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
 | 
			
		||||
 You can read releases logs https://github.com/ocornut/imgui/releases for more details.
 | 
			
		||||
 | 
			
		||||
 - 2021/03/10 (1.82) - upgraded ImDrawList::AddPolyline() and PathStroke() "bool closed" parameter to "ImDrawFlags flags". The matching ImDrawFlags_Closed value is guaranteed to always stay == 1 in the future.
 | 
			
		||||
 - 2021/02/22 (1.82) - win32+mingw: Re-enabled IME functions by default even under MinGW. In July 2016, issue #738 had me incorrectly disable those default functions for MinGW. MinGW users should: either link with -limm32, either set their imconfig file  with '#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS'.
 | 
			
		||||
 - 2021/02/17 (1.82) - renamed rarely used style.CircleSegmentMaxError (old default = 1.60f) to style.CircleTessellationMaxError (new default = 0.30f) as the meaning of the value changed.
 | 
			
		||||
 - 2021/02/03 (1.81) - renamed ListBoxHeader(const char* label, ImVec2 size) to BeginListBox(). Kept inline redirection function (will obsolete).
 | 
			
		||||
@@ -5451,7 +5452,7 @@ static void ImGui::RenderWindowOuterBorders(ImGuiWindow* window)
 | 
			
		||||
        ImRect border_r = GetResizeBorderRect(window, border_held, rounding, 0.0f);
 | 
			
		||||
        window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.CornerPosN1) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle - IM_PI * 0.25f, def.OuterAngle);
 | 
			
		||||
        window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.CornerPosN2) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle, def.OuterAngle + IM_PI * 0.25f);
 | 
			
		||||
        window->DrawList->PathStroke(GetColorU32(ImGuiCol_SeparatorActive), false, ImMax(2.0f, border_size)); // Thicker than usual
 | 
			
		||||
        window->DrawList->PathStroke(GetColorU32(ImGuiCol_SeparatorActive), 0, ImMax(2.0f, border_size)); // Thicker than usual
 | 
			
		||||
    }
 | 
			
		||||
    if (g.Style.FrameBorderSize > 0 && !(window->Flags & ImGuiWindowFlags_NoTitleBar))
 | 
			
		||||
    {
 | 
			
		||||
@@ -11246,7 +11247,7 @@ void ImGui::DebugNodeDrawList(ImGuiWindow* window, const ImDrawList* draw_list,
 | 
			
		||||
                {
 | 
			
		||||
                    ImDrawListFlags backup_flags = fg_draw_list->Flags;
 | 
			
		||||
                    fg_draw_list->Flags &= ~ImDrawListFlags_AntiAliasedLines; // Disable AA on triangle outlines is more readable for very large and thin triangles.
 | 
			
		||||
                    fg_draw_list->AddPolyline(triangle, 3, IM_COL32(255, 255, 0, 255), true, 1.0f);
 | 
			
		||||
                    fg_draw_list->AddPolyline(triangle, 3, IM_COL32(255, 255, 0, 255), ImDrawFlags_Closed, 1.0f);
 | 
			
		||||
                    fg_draw_list->Flags = backup_flags;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@@ -11273,7 +11274,7 @@ void ImGui::DebugNodeDrawCmdShowMeshAndBoundingBox(ImDrawList* out_draw_list, co
 | 
			
		||||
        for (int n = 0; n < 3; n++, idx_n++)
 | 
			
		||||
            vtxs_rect.Add((triangle[n] = vtx_buffer[idx_buffer ? idx_buffer[idx_n] : idx_n].pos));
 | 
			
		||||
        if (show_mesh)
 | 
			
		||||
            out_draw_list->AddPolyline(triangle, 3, IM_COL32(255, 255, 0, 255), true, 1.0f); // In yellow: mesh triangles
 | 
			
		||||
            out_draw_list->AddPolyline(triangle, 3, IM_COL32(255, 255, 0, 255), ImDrawFlags_Closed, 1.0f); // In yellow: mesh triangles
 | 
			
		||||
    }
 | 
			
		||||
    // Draw bounding boxes
 | 
			
		||||
    if (show_aabb)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								imgui.h
									
									
									
									
									
								
							@@ -30,7 +30,7 @@ Index of this file:
 | 
			
		||||
// [SECTION] Misc data structures (ImGuiInputTextCallbackData, ImGuiSizeCallbackData, ImGuiPayload, ImGuiTableSortSpecs, ImGuiTableColumnSortSpecs)
 | 
			
		||||
// [SECTION] Obsolete functions
 | 
			
		||||
// [SECTION] Helpers (ImGuiOnceUponAFrame, ImGuiTextFilter, ImGuiTextBuffer, ImGuiStorage, ImGuiListClipper, ImColor)
 | 
			
		||||
// [SECTION] Drawing API (ImDrawCallback, ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawListFlags, ImDrawList, ImDrawData)
 | 
			
		||||
// [SECTION] Drawing API (ImDrawCallback, ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawFlags, ImDrawListFlags, ImDrawList, ImDrawData)
 | 
			
		||||
// [SECTION] Font API (ImFontConfig, ImFontGlyph, ImFontGlyphRangesBuilder, ImFontAtlasFlags, ImFontAtlas, ImFont)
 | 
			
		||||
// [SECTION] Viewports (ImGuiViewportFlags, ImGuiViewport)
 | 
			
		||||
 | 
			
		||||
@@ -162,8 +162,9 @@ typedef int ImGuiMouseCursor;       // -> enum ImGuiMouseCursor_     // Enum: A
 | 
			
		||||
typedef int ImGuiSortDirection;     // -> enum ImGuiSortDirection_   // Enum: A sorting direction (ascending or descending)
 | 
			
		||||
typedef int ImGuiStyleVar;          // -> enum ImGuiStyleVar_        // Enum: A variable identifier for styling
 | 
			
		||||
typedef int ImGuiTableBgTarget;     // -> enum ImGuiTableBgTarget_   // Enum: A color target for TableSetBgColor()
 | 
			
		||||
typedef int ImDrawCornerFlags;      // -> enum ImDrawCornerFlags_    // Flags: for ImDrawList::AddRect(), AddRectFilled() etc.
 | 
			
		||||
typedef int ImDrawListFlags;        // -> enum ImDrawListFlags_      // Flags: for ImDrawList
 | 
			
		||||
typedef int ImDrawCornerFlags;      // -> enum ImDrawCornerFlags_    // Flags: for ImDrawList functions: AddRect(), AddRectFilled() etc.
 | 
			
		||||
typedef int ImDrawFlags;            // -> enum ImDrawFlags_          // Flags: for ImDrawList functions: AddPolyline(), PathStroke() etc.
 | 
			
		||||
typedef int ImDrawListFlags;        // -> enum ImDrawListFlags_      // Flags: for ImDrawList instance
 | 
			
		||||
typedef int ImFontAtlasFlags;       // -> enum ImFontAtlasFlags_     // Flags: for ImFontAtlas build
 | 
			
		||||
typedef int ImGuiBackendFlags;      // -> enum ImGuiBackendFlags_    // Flags: for io.BackendFlags
 | 
			
		||||
typedef int ImGuiButtonFlags;       // -> enum ImGuiButtonFlags_     // Flags: for InvisibleButton()
 | 
			
		||||
@@ -2336,7 +2337,14 @@ enum ImDrawCornerFlags_
 | 
			
		||||
    ImDrawCornerFlags_All       = 0xF     // In your function calls you may use ~0 (= all bits sets) instead of ImDrawCornerFlags_All, as a convenience
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Flags for ImDrawList. Those are set automatically by ImGui:: functions from ImGuiIO settings, and generally not manipulated directly.
 | 
			
		||||
// Flags for some ImDrawList functions
 | 
			
		||||
enum ImDrawFlags_
 | 
			
		||||
{
 | 
			
		||||
    ImDrawFlags_None                        = 0,
 | 
			
		||||
    ImDrawFlags_Closed                      = 1 << 0  // PathStroke(), AddPolyline(): specify that (LEGACY: this must always stay == 1 to be backward compatible with old API using a bool)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Flags for ImDrawList instance. Those are set automatically by ImGui:: functions from ImGuiIO settings, and generally not manipulated directly.
 | 
			
		||||
// It is however possible to temporarily alter flags between calls to ImDrawList:: functions.
 | 
			
		||||
enum ImDrawListFlags_
 | 
			
		||||
{
 | 
			
		||||
@@ -2409,7 +2417,7 @@ struct ImDrawList
 | 
			
		||||
    IMGUI_API void  AddNgonFilled(const ImVec2& center, float radius, ImU32 col, int num_segments);
 | 
			
		||||
    IMGUI_API void  AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL);
 | 
			
		||||
    IMGUI_API void  AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL);
 | 
			
		||||
    IMGUI_API void  AddPolyline(const ImVec2* points, int num_points, ImU32 col, bool closed, float thickness);
 | 
			
		||||
    IMGUI_API void  AddPolyline(const ImVec2* points, int num_points, ImU32 col, ImDrawFlags flags, float thickness);
 | 
			
		||||
    IMGUI_API void  AddConvexPolyFilled(const ImVec2* points, int num_points, ImU32 col); // Note: Anti-aliased filling requires points to be in clockwise order.
 | 
			
		||||
    IMGUI_API void  AddBezierCubic(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments = 0); // Cubic Bezier (4 control points)
 | 
			
		||||
    IMGUI_API void  AddBezierQuadratic(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness, int num_segments = 0);               // Quadratic Bezier (3 control points)
 | 
			
		||||
@@ -2427,7 +2435,7 @@ struct ImDrawList
 | 
			
		||||
    inline    void  PathLineTo(const ImVec2& pos)                               { _Path.push_back(pos); }
 | 
			
		||||
    inline    void  PathLineToMergeDuplicate(const ImVec2& pos)                 { if (_Path.Size == 0 || memcmp(&_Path.Data[_Path.Size - 1], &pos, 8) != 0) _Path.push_back(pos); }
 | 
			
		||||
    inline    void  PathFillConvex(ImU32 col)                                   { AddConvexPolyFilled(_Path.Data, _Path.Size, col); _Path.Size = 0; }  // Note: Anti-aliased filling requires points to be in clockwise order.
 | 
			
		||||
    inline    void  PathStroke(ImU32 col, bool closed, float thickness = 1.0f)  { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); _Path.Size = 0; }
 | 
			
		||||
    inline    void  PathStroke(ImU32 col, ImDrawFlags flags = 0, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, flags, thickness); _Path.Size = 0; }
 | 
			
		||||
    IMGUI_API void  PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments = 10);
 | 
			
		||||
    IMGUI_API void  PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12);                // Use precomputed angles for a 12 steps circle
 | 
			
		||||
    IMGUI_API void  PathBezierCubicCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments = 0); // Cubic Bezier (4 control points)
 | 
			
		||||
 
 | 
			
		||||
@@ -689,11 +689,12 @@ void ImDrawList::PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, c
 | 
			
		||||
 | 
			
		||||
// TODO: Thickness anti-aliased lines cap are missing their AA fringe.
 | 
			
		||||
// We avoid using the ImVec2 math operators here to reduce cost to a minimum for debug/non-inlined builds.
 | 
			
		||||
void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 col, bool closed, float thickness)
 | 
			
		||||
void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 col, ImDrawFlags flags, float thickness)
 | 
			
		||||
{
 | 
			
		||||
    if (points_count < 2)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    const bool closed = (flags & ImDrawFlags_Closed) != 0;
 | 
			
		||||
    const ImVec2 opaque_uv = _Data->TexUvWhitePixel;
 | 
			
		||||
    const int count = closed ? points_count : points_count - 1; // The number of line segments we need to draw
 | 
			
		||||
    const bool thick_line = (thickness > _FringeScale);
 | 
			
		||||
@@ -1192,7 +1193,7 @@ void ImDrawList::AddLine(const ImVec2& p1, const ImVec2& p2, ImU32 col, float th
 | 
			
		||||
        return;
 | 
			
		||||
    PathLineTo(p1 + ImVec2(0.5f, 0.5f));
 | 
			
		||||
    PathLineTo(p2 + ImVec2(0.5f, 0.5f));
 | 
			
		||||
    PathStroke(col, false, thickness);
 | 
			
		||||
    PathStroke(col, 0, thickness);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// p_min = upper-left, p_max = lower-right
 | 
			
		||||
@@ -1205,7 +1206,7 @@ void ImDrawList::AddRect(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, fl
 | 
			
		||||
        PathRect(p_min + ImVec2(0.50f, 0.50f), p_max - ImVec2(0.50f, 0.50f), rounding, rounding_corners);
 | 
			
		||||
    else
 | 
			
		||||
        PathRect(p_min + ImVec2(0.50f, 0.50f), p_max - ImVec2(0.49f, 0.49f), rounding, rounding_corners); // Better looking lower-right corner and rounded non-AA shapes.
 | 
			
		||||
    PathStroke(col, true, thickness);
 | 
			
		||||
    PathStroke(col, ImDrawFlags_Closed, thickness);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImDrawList::AddRectFilled(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners)
 | 
			
		||||
@@ -1249,7 +1250,7 @@ void ImDrawList::AddQuad(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, c
 | 
			
		||||
    PathLineTo(p2);
 | 
			
		||||
    PathLineTo(p3);
 | 
			
		||||
    PathLineTo(p4);
 | 
			
		||||
    PathStroke(col, true, thickness);
 | 
			
		||||
    PathStroke(col, ImDrawFlags_Closed, thickness);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImDrawList::AddQuadFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col)
 | 
			
		||||
@@ -1272,7 +1273,7 @@ void ImDrawList::AddTriangle(const ImVec2& p1, const ImVec2& p2, const ImVec2& p
 | 
			
		||||
    PathLineTo(p1);
 | 
			
		||||
    PathLineTo(p2);
 | 
			
		||||
    PathLineTo(p3);
 | 
			
		||||
    PathStroke(col, true, thickness);
 | 
			
		||||
    PathStroke(col, ImDrawFlags_Closed, thickness);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImDrawList::AddTriangleFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col)
 | 
			
		||||
@@ -1309,7 +1310,7 @@ void ImDrawList::AddCircle(const ImVec2& center, float radius, ImU32 col, int nu
 | 
			
		||||
        PathArcToFast(center, radius - 0.5f, 0, 12 - 1);
 | 
			
		||||
    else
 | 
			
		||||
        PathArcTo(center, radius - 0.5f, 0.0f, a_max, num_segments - 1);
 | 
			
		||||
    PathStroke(col, true, thickness);
 | 
			
		||||
    PathStroke(col, ImDrawFlags_Closed, thickness);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImDrawList::AddCircleFilled(const ImVec2& center, float radius, ImU32 col, int num_segments)
 | 
			
		||||
@@ -1347,7 +1348,7 @@ void ImDrawList::AddNgon(const ImVec2& center, float radius, ImU32 col, int num_
 | 
			
		||||
    // Because we are filling a closed shape we remove 1 from the count of segments/points
 | 
			
		||||
    const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments;
 | 
			
		||||
    PathArcTo(center, radius - 0.5f, 0.0f, a_max, num_segments - 1);
 | 
			
		||||
    PathStroke(col, true, thickness);
 | 
			
		||||
    PathStroke(col, ImDrawFlags_Closed, thickness);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Guaranteed to honor 'num_segments'
 | 
			
		||||
@@ -1370,7 +1371,7 @@ void ImDrawList::AddBezierCubic(const ImVec2& p1, const ImVec2& p2, const ImVec2
 | 
			
		||||
 | 
			
		||||
    PathLineTo(p1);
 | 
			
		||||
    PathBezierCubicCurveTo(p2, p3, p4, num_segments);
 | 
			
		||||
    PathStroke(col, false, thickness);
 | 
			
		||||
    PathStroke(col, 0, thickness);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Quadratic Bezier takes 3 controls points
 | 
			
		||||
@@ -1381,7 +1382,7 @@ void ImDrawList::AddBezierQuadratic(const ImVec2& p1, const ImVec2& p2, const Im
 | 
			
		||||
 | 
			
		||||
    PathLineTo(p1);
 | 
			
		||||
    PathBezierQuadraticCurveTo(p2, p3, num_segments);
 | 
			
		||||
    PathStroke(col, false, thickness);
 | 
			
		||||
    PathStroke(col, 0, thickness);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImDrawList::AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end, float wrap_width, const ImVec4* cpu_fine_clip_rect)
 | 
			
		||||
@@ -3584,7 +3585,7 @@ void ImGui::RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float
 | 
			
		||||
    draw_list->PathLineTo(ImVec2(bx - third, by - third));
 | 
			
		||||
    draw_list->PathLineTo(ImVec2(bx, by));
 | 
			
		||||
    draw_list->PathLineTo(ImVec2(bx + third * 2.0f, by - third * 2.0f));
 | 
			
		||||
    draw_list->PathStroke(col, false, thickness);
 | 
			
		||||
    draw_list->PathStroke(col, 0, thickness);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui::RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow)
 | 
			
		||||
 
 | 
			
		||||
@@ -5231,7 +5231,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
 | 
			
		||||
            const float a1 = (n+1.0f)/6.0f * 2.0f * IM_PI + aeps;
 | 
			
		||||
            const int vert_start_idx = draw_list->VtxBuffer.Size;
 | 
			
		||||
            draw_list->PathArcTo(wheel_center, (wheel_r_inner + wheel_r_outer)*0.5f, a0, a1, segment_per_arc);
 | 
			
		||||
            draw_list->PathStroke(col_white, false, wheel_thickness);
 | 
			
		||||
            draw_list->PathStroke(col_white, 0, wheel_thickness);
 | 
			
		||||
            const int vert_end_idx = draw_list->VtxBuffer.Size;
 | 
			
		||||
 | 
			
		||||
            // Paint colors over existing vertices
 | 
			
		||||
@@ -7890,7 +7890,7 @@ void ImGui::TabItemBackground(ImDrawList* draw_list, const ImRect& bb, ImGuiTabI
 | 
			
		||||
        draw_list->PathArcToFast(ImVec2(bb.Min.x + rounding + 0.5f, y1 + rounding + 0.5f), rounding, 6, 9);
 | 
			
		||||
        draw_list->PathArcToFast(ImVec2(bb.Max.x - rounding - 0.5f, y1 + rounding + 0.5f), rounding, 9, 12);
 | 
			
		||||
        draw_list->PathLineTo(ImVec2(bb.Max.x - 0.5f, y2));
 | 
			
		||||
        draw_list->PathStroke(GetColorU32(ImGuiCol_Border), false, g.Style.TabBorderSize);
 | 
			
		||||
        draw_list->PathStroke(GetColorU32(ImGuiCol_Border), 0, g.Style.TabBorderSize);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user