mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-30 20:51:06 +01: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