mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-10-26 12:27:30 +00:00 
			
		
		
		
	ImDrawList: Added ImDrawListFlags for AA settings. ImDrawList doesn't directly depends on GImGui anymore.
This commit is contained in:
		
							
								
								
									
										4
									
								
								TODO.txt
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								TODO.txt
									
									
									
									
									
								
							| @@ -30,12 +30,10 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i | ||||
| !- scrolling: allow immediately effective change of scroll after Begin() if we haven't appended items yet. | ||||
|  - scrolling/clipping: separator on the initial position of a window is not visible (cursorpos.y <= clippos.y). (2017-08-20: can't repro) | ||||
|  | ||||
|  - drawlist: move Font, FontSize, FontTexUvWhitePixel inside ImDrawList and make it self-contained (apart from drawing settings?) | ||||
|  - drawlist: make it easier to toggle AA per primitive, so we can use e.g. non-AA fill + AA borders more naturally | ||||
|  - drawlist: end-user probably can't call Clear() directly because we expect a texture to be pushed in the stack. | ||||
|  - drawlist: maintaining bounding box per command would allow to merge draw command when clipping isn't relied on (typical non-scrolling window or non-overflowing column would merge with previous command). | ||||
|  - drawlist: avoid passing null (-9999,+9999) rectangle to end-user, instead perhaps pass rectangle based on io.DisplaySize? | ||||
|  - drawlist: primtiives/helpers to manipulate vertices post submission, so e.g. a quad/rect can be resized to fit later submitted content, _without_ using the ChannelSplit api | ||||
|  - drawlist: make it easier to toggle AA per primitive, so we can use e.g. non-AA fill + AA borders more naturally | ||||
|  - drawlist: non-AA strokes have gaps between points (#593, #288), especially RenderCheckmark(). | ||||
|  - drawlist: would be good to be able to deep copy a draw list (ImVector= op?). | ||||
|  - drawlist/opt: AddRect() axis aligned pixel aligned (no-aa) could use 8 triangles instead of 16 and no normal calculation. | ||||
|   | ||||
							
								
								
									
										16
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -213,7 +213,8 @@ | ||||
|  Here is a change-log of API breaking changes, if you are using one of the functions listed, expect to have to fix some code. | ||||
|  Also read releases logs https://github.com/ocornut/imgui/releases for more details. | ||||
|  | ||||
|  - 2017/12/21 (1.53) - removed 'bool anti_aliased = true' final parameter of ImDrawList::AddPolyline() and ImDrawList::AddConvexPolyFilled(). Anti-aliasing is controlled via the regular style.AntiAliased flags. | ||||
|  - 2017/12/21 (1.53) - renamed style.AntiAliasedShapes to style.AntiAliasedFill for consistency and as a way to explicitly break code that manipulate those flag at runtime. You can now manipulate ImDrawList::Flags | ||||
|  - 2017/12/21 (1.53) - removed 'bool anti_aliased = true' final parameter of ImDrawList::AddPolyline() and ImDrawList::AddConvexPolyFilled(). Prefer manipulating ImDrawList::Flags. | ||||
|  - 2017/12/14 (1.53) - using the ImGuiWindowFlags_NoScrollWithMouse flag on a child window forwards the mouse wheel event to the parent window, unless either ImGuiWindowFlags_NoInputs or ImGuiWindowFlags_NoScrollbar are also set. | ||||
|  - 2017/12/13 (1.53) - renamed GetItemsLineHeightWithSpacing() to GetFrameHeightWithSpacing(). Kept redirection function (will obsolete). | ||||
|  - 2017/12/13 (1.53) - obsoleted IsRootWindowFocused() in favor of using IsWindowFocused(ImGuiFocusedFlags_RootWindow). Kept redirection function (will obsolete). | ||||
| @@ -735,7 +736,7 @@ ImGuiStyle::ImGuiStyle() | ||||
|     DisplayWindowPadding    = ImVec2(22,22);    // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. | ||||
|     DisplaySafeAreaPadding  = ImVec2(4,4);      // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. | ||||
|     AntiAliasedLines        = true;             // Enable anti-aliasing on lines/borders. Disable if you are really short on CPU/GPU. | ||||
|     AntiAliasedShapes       = true;             // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) | ||||
|     AntiAliasedFill         = true;             // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) | ||||
|     CurveTessellationTol    = 1.25f;            // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. | ||||
|  | ||||
|     ImGui::StyleColorsClassic(this); | ||||
| @@ -2290,6 +2291,7 @@ void ImGui::NewFrame() | ||||
|     g.OverlayDrawList.Clear(); | ||||
|     g.OverlayDrawList.PushTextureID(g.IO.Fonts->TexID); | ||||
|     g.OverlayDrawList.PushClipRectFullScreen(); | ||||
|     g.OverlayDrawList.Flags = (g.Style.AntiAliasedLines ? ImDrawListFlags_AntiAliasedLines : 0) | (g.Style.AntiAliasedFill ? ImDrawListFlags_AntiAliasedFill : 0); | ||||
|  | ||||
|     // Mark rendering data as invalid to prevent user who may have a handle on it to use it | ||||
|     g.RenderDrawData.Valid = false; | ||||
| @@ -4475,8 +4477,9 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|         window->LastFrameActive = current_frame; | ||||
|         window->IDStack.resize(1); | ||||
|  | ||||
|         // Clear draw list, setup texture, outer clipping rectangle | ||||
|         // Setup draw list and outer clipping rectangle | ||||
|         window->DrawList->Clear(); | ||||
|         window->DrawList->Flags = (g.Style.AntiAliasedLines ? ImDrawListFlags_AntiAliasedLines : 0) | (g.Style.AntiAliasedFill ? ImDrawListFlags_AntiAliasedFill : 0); | ||||
|         window->DrawList->PushTextureID(g.Font->ContainerAtlas->TexID); | ||||
|         ImRect fullscreen_rect(GetVisibleRect()); | ||||
|         if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup)) | ||||
| @@ -11662,11 +11665,10 @@ void ImGui::ShowMetricsWindow(bool* p_open) | ||||
|                             ImGui::Selectable(buf, false); | ||||
|                             if (ImGui::IsItemHovered()) | ||||
|                             { | ||||
|                                 ImGuiStyle& style = ImGui::GetStyle(); | ||||
|                                 bool backup_aa_lines = style.AntiAliasedLines; | ||||
|                                 style.AntiAliasedLines = false; // Disable AA on triangle outlines at is more readable for very large and thin triangles. | ||||
|                                 ImDrawListFlags backup_flags = overlay_draw_list->Flags; | ||||
|                                 overlay_draw_list->Flags &= ~ImDrawListFlags_AntiAliasedLines; // Disable AA on triangle outlines at is more readable for very large and thin triangles. | ||||
|                                 overlay_draw_list->AddPolyline(triangles_pos, 3, IM_COL32(255,255,0,255), true, 1.0f); | ||||
|                                 style.AntiAliasedLines = backup_aa_lines; | ||||
|                                 overlay_draw_list->Flags = backup_flags; | ||||
|                             } | ||||
|                         } | ||||
|                     ImGui::TreePop(); | ||||
|   | ||||
							
								
								
									
										10
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -79,6 +79,7 @@ typedef int ImGuiKey;               // enum: a key identifier (ImGui-side enum) | ||||
| typedef int ImGuiMouseCursor;       // enum: a mouse cursor identifier          // enum ImGuiMouseCursor_ | ||||
| typedef int ImGuiStyleVar;          // enum: a variable identifier for styling  // enum ImGuiStyleVar_ | ||||
| typedef int ImDrawCornerFlags;      // flags: for ImDrawList::AddRect*() etc.   // enum ImDrawCornerFlags_ | ||||
| typedef int ImDrawListFlags;        // flags: for ImDrawList                    // enum ImDrawListFlags_ | ||||
| typedef int ImGuiColorEditFlags;    // flags: for ColorEdit*(), ColorPicker*()  // enum ImGuiColorEditFlags_ | ||||
| typedef int ImGuiColumnsFlags;      // flags: for *Columns*()                   // enum ImGuiColumnsFlags_ | ||||
| typedef int ImGuiDragDropFlags;     // flags: for *DragDrop*()                  // enum ImGuiDragDropFlags_ | ||||
| @@ -855,7 +856,7 @@ struct ImGuiStyle | ||||
|     ImVec2      DisplayWindowPadding;       // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. | ||||
|     ImVec2      DisplaySafeAreaPadding;     // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. | ||||
|     bool        AntiAliasedLines;           // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. | ||||
|     bool        AntiAliasedShapes;          // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) | ||||
|     bool        AntiAliasedFill;            // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) | ||||
|     float       CurveTessellationTol;       // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. | ||||
|     ImVec4      Colors[ImGuiCol_COUNT]; | ||||
|  | ||||
| @@ -1372,6 +1373,12 @@ enum ImDrawCornerFlags_ | ||||
|     ImDrawCornerFlags_All       = 0xF     // In your function calls you may use ~0 (= all bits sets) instead of ImDrawCornerFlags_All, as a convenience | ||||
| }; | ||||
|  | ||||
| enum ImDrawListFlags_ | ||||
| { | ||||
|     ImDrawListFlags_AntiAliasedLines = 1 << 0, | ||||
|     ImDrawListFlags_AntiAliasedFill  = 1 << 1 | ||||
| }; | ||||
|  | ||||
| // Draw command list | ||||
| // This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. | ||||
| // Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives. | ||||
| @@ -1386,6 +1393,7 @@ struct ImDrawList | ||||
|     ImVector<ImDrawVert>    VtxBuffer;          // Vertex buffer. | ||||
|  | ||||
|     // [Internal, used while building lists] | ||||
|     ImDrawListFlags         Flags;              // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. | ||||
|     const ImDrawListSharedData* _Data;          // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) | ||||
|     const char*             _OwnerName;         // Pointer to owner window's name for debugging | ||||
|     unsigned int            _VtxCurrentIdx;     // [Internal] == VtxBuffer.Size | ||||
|   | ||||
| @@ -1983,7 +1983,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref) | ||||
|     if (ImGui::TreeNode("Rendering")) | ||||
|     { | ||||
|         ImGui::Checkbox("Anti-aliased lines", &style.AntiAliasedLines); ImGui::SameLine(); ShowHelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well."); | ||||
|         ImGui::Checkbox("Anti-aliased shapes", &style.AntiAliasedShapes); | ||||
|         ImGui::Checkbox("Anti-aliased fill", &style.AntiAliasedFill); | ||||
|         ImGui::PushItemWidth(100); | ||||
|         ImGui::DragFloat("Curve Tessellation Tolerance", &style.CurveTessellationTol, 0.02f, 0.10f, FLT_MAX, NULL, 2.0f); | ||||
|         if (style.CurveTessellationTol < 0.0f) style.CurveTessellationTol = 0.10f; | ||||
|   | ||||
| @@ -304,6 +304,7 @@ void ImDrawList::Clear() | ||||
|     CmdBuffer.resize(0); | ||||
|     IdxBuffer.resize(0); | ||||
|     VtxBuffer.resize(0); | ||||
|     Flags = ImDrawListFlags_AntiAliasedLines | ImDrawListFlags_AntiAliasedFill; | ||||
|     _VtxCurrentIdx = 0; | ||||
|     _VtxWritePtr = NULL; | ||||
|     _IdxWritePtr = NULL; | ||||
| @@ -598,15 +599,13 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 | ||||
|         return; | ||||
|  | ||||
|     const ImVec2 uv = _Data->TexUvWhitePixel; | ||||
|     bool anti_aliased = GImGui->Style.AntiAliasedLines; | ||||
|     //if (ImGui::GetIO().KeyCtrl) anti_aliased = false; // Debug | ||||
|  | ||||
|     int count = points_count; | ||||
|     if (!closed) | ||||
|         count = points_count-1; | ||||
|  | ||||
|     const bool thick_line = thickness > 1.0f; | ||||
|     if (anti_aliased) | ||||
|     if (Flags & ImDrawListFlags_AntiAliasedLines) | ||||
|     { | ||||
|         // Anti-aliased stroke | ||||
|         const float AA_SIZE = 1.0f; | ||||
| @@ -776,10 +775,8 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 | ||||
| void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_count, ImU32 col) | ||||
| { | ||||
|     const ImVec2 uv = _Data->TexUvWhitePixel; | ||||
|     bool anti_aliased = GImGui->Style.AntiAliasedShapes; | ||||
|     //if (ImGui::GetIO().KeyCtrl) anti_aliased = false; // Debug | ||||
|  | ||||
|     if (anti_aliased) | ||||
|     if (Flags & ImDrawListFlags_AntiAliasedFill) | ||||
|     { | ||||
|         // Anti-aliased Fill | ||||
|         const float AA_SIZE = 1.0f; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 omar
					omar