mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-11-04 01:34:32 +00:00 
			
		
		
		
	Nav: Moving code next to its peers
This commit is contained in:
		
							
								
								
									
										58
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -2171,35 +2171,6 @@ static bool NavScoreItem(ImRect cand)
 | 
			
		||||
    return new_best;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui::RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    if (id != g.NavId)
 | 
			
		||||
        return;
 | 
			
		||||
    if (g.NavDisableHighlight && !(flags & ImGuiNavHighlightFlags_AlwaysRender))
 | 
			
		||||
        return;    
 | 
			
		||||
    ImGuiWindow* window = ImGui::GetCurrentWindow();
 | 
			
		||||
 | 
			
		||||
    ImRect display_rect = bb;
 | 
			
		||||
    display_rect.ClipWith(window->ClipRect);
 | 
			
		||||
    if (flags & ImGuiNavHighlightFlags_TypeDefault)
 | 
			
		||||
    {
 | 
			
		||||
        const float THICKNESS = 2.0f;
 | 
			
		||||
        const float DISTANCE = 3.0f + THICKNESS * 0.5f;
 | 
			
		||||
        display_rect.Expand(ImVec2(DISTANCE,DISTANCE));
 | 
			
		||||
        bool fully_visible = window->ClipRect.Contains(display_rect);
 | 
			
		||||
        if (!fully_visible)
 | 
			
		||||
            window->DrawList->PushClipRect(display_rect.Min, display_rect.Max);
 | 
			
		||||
        window->DrawList->AddRect(display_rect.Min + ImVec2(THICKNESS*0.5f,THICKNESS*0.5f), display_rect.Max - ImVec2(THICKNESS*0.5f,THICKNESS*0.5f), GetColorU32(ImGuiCol_NavHighlight), g.Style.FrameRounding, 0x0F, THICKNESS);
 | 
			
		||||
        if (!fully_visible)
 | 
			
		||||
            window->DrawList->PopClipRect();
 | 
			
		||||
    }
 | 
			
		||||
    if (flags & ImGuiNavHighlightFlags_TypeThin)
 | 
			
		||||
    {
 | 
			
		||||
        window->DrawList->AddRect(display_rect.Min, display_rect.Max, GetColorU32(ImGuiCol_NavHighlight), g.Style.FrameRounding, ~0, 1.0f);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, const ImGuiID id)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
@@ -3870,6 +3841,35 @@ void ImGui::RenderCheckMark(ImVec2 pos, ImU32 col)
 | 
			
		||||
    window->DrawList->PathStroke(col, false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui::RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    if (id != g.NavId)
 | 
			
		||||
        return;
 | 
			
		||||
    if (g.NavDisableHighlight && !(flags & ImGuiNavHighlightFlags_AlwaysRender))
 | 
			
		||||
        return;    
 | 
			
		||||
    ImGuiWindow* window = ImGui::GetCurrentWindow();
 | 
			
		||||
 | 
			
		||||
    ImRect display_rect = bb;
 | 
			
		||||
    display_rect.ClipWith(window->ClipRect);
 | 
			
		||||
    if (flags & ImGuiNavHighlightFlags_TypeDefault)
 | 
			
		||||
    {
 | 
			
		||||
        const float THICKNESS = 2.0f;
 | 
			
		||||
        const float DISTANCE = 3.0f + THICKNESS * 0.5f;
 | 
			
		||||
        display_rect.Expand(ImVec2(DISTANCE,DISTANCE));
 | 
			
		||||
        bool fully_visible = window->ClipRect.Contains(display_rect);
 | 
			
		||||
        if (!fully_visible)
 | 
			
		||||
            window->DrawList->PushClipRect(display_rect.Min, display_rect.Max);
 | 
			
		||||
        window->DrawList->AddRect(display_rect.Min + ImVec2(THICKNESS*0.5f,THICKNESS*0.5f), display_rect.Max - ImVec2(THICKNESS*0.5f,THICKNESS*0.5f), GetColorU32(ImGuiCol_NavHighlight), g.Style.FrameRounding, 0x0F, THICKNESS);
 | 
			
		||||
        if (!fully_visible)
 | 
			
		||||
            window->DrawList->PopClipRect();
 | 
			
		||||
    }
 | 
			
		||||
    if (flags & ImGuiNavHighlightFlags_TypeThin)
 | 
			
		||||
    {
 | 
			
		||||
        window->DrawList->AddRect(display_rect.Min, display_rect.Max, GetColorU32(ImGuiCol_NavHighlight), g.Style.FrameRounding, ~0, 1.0f);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Calculate text size. Text can be multi-line. Optionally ignore text after a ## marker.
 | 
			
		||||
// CalcTextSize("") should return ImVec2(0.0f, GImGui->FontSize)
 | 
			
		||||
ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool hide_text_after_double_hash, float wrap_width)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user