mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Log/Capture: Fixed BeginTabItem() label not being included in a text log/capture.
Extracted tab rendering code into a RenderTextEllipsis() function.
This commit is contained in:
		
							
								
								
									
										45
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -2422,6 +2422,51 @@ void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, cons | ||||
|         LogRenderedText(&pos_min, text, text_display_end); | ||||
| } | ||||
|  | ||||
|  | ||||
| // Another overly complex function until we reorganize everything into a nice all-in-one helper. | ||||
| // This is made more complex because we have dissociated the layout rectangle (pos_min..pos_max) which define where the ellipsis is, from actual clipping and limit of the ellipsis display. | ||||
| // This is because in the context of tabs we selectively hide part of the text when the Close Button appears, but we don't want the ellipsis to move.  | ||||
| void    ImGui::RenderTextEllipsis(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, float clip_max_x, float ellipsis_max_x, const char* text, const char* text_end_full, const ImVec2* text_size_if_known) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     if (text_end_full == NULL) | ||||
|         text_end_full = FindRenderedTextEnd(text); | ||||
|     const ImVec2 text_size = text_size_if_known ? *text_size_if_known : CalcTextSize(text, text_end_full, false, 0.0f); | ||||
|  | ||||
|     if (text_size.x > pos_max.x - pos_min.x) | ||||
|     { | ||||
|  | ||||
|         const ImFont* font = draw_list->_Data->Font; | ||||
|         const float font_size = draw_list->_Data->FontSize; | ||||
|         const int ellipsis_dot_count = 3; | ||||
|         const float ellipsis_width = (1.0f + 1.0f) * ellipsis_dot_count - 1.0f; | ||||
|         const char* text_end_ellipsis = NULL; | ||||
|         float text_size_clipped_x = font->CalcTextSizeA(font_size, (pos_max.x - pos_min.x) - ellipsis_width + 1.0f, 0.0f, text, text_end_full, &text_end_ellipsis).x; | ||||
|         if (text == text_end_ellipsis && text_end_ellipsis < text_end_full)    // Always display at least 1 character if there's no room for character + ellipsis | ||||
|         { | ||||
|             text_end_ellipsis = text + ImTextCountUtf8BytesFromChar(text, text_end_full); | ||||
|             text_size_clipped_x = font->CalcTextSizeA(font_size, FLT_MAX, 0.0f, text, text_end_ellipsis).x; | ||||
|         } | ||||
|         while (text_end_ellipsis > text && ImCharIsBlankA(text_end_ellipsis[-1])) // Trim trailing space | ||||
|         { | ||||
|             text_end_ellipsis--; | ||||
|             text_size_clipped_x -= font->CalcTextSizeA(font_size, FLT_MAX, 0.0f, text_end_ellipsis, text_end_ellipsis + 1).x; // Ascii blanks are always 1 byte | ||||
|         } | ||||
|         RenderTextClippedEx(draw_list, pos_min, ImVec2(clip_max_x, pos_max.y), text, text_end_ellipsis, &text_size, ImVec2(0.0f, 0.0f)); | ||||
|  | ||||
|         const float ellipsis_x = pos_min.x + text_size_clipped_x + 1.0f; | ||||
|         if (ellipsis_x + ellipsis_width <= ellipsis_max_x) | ||||
|             RenderPixelEllipsis(draw_list, ImVec2(ellipsis_x, pos_min.y), GetColorU32(ImGuiCol_Text), ellipsis_dot_count); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         RenderTextClippedEx(draw_list, pos_min, ImVec2(clip_max_x, pos_max.y), text, text_end_full, &text_size, ImVec2(0.0f, 0.0f)); | ||||
|     } | ||||
|  | ||||
|     if (g.LogEnabled) | ||||
|         LogRenderedText(&pos_min, text, text_end_full); | ||||
| } | ||||
|  | ||||
| // Render a rectangle shaped with optional rounding and borders | ||||
| void ImGui::RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border, float rounding) | ||||
| { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user