mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Docking: internals: extracted rounding corner calculation into reusable CalcRoundingFlagsForRectInRect() function.
This commit is contained in:
		| @@ -14486,10 +14486,7 @@ static void ImGui::DockNodeUpdateTabBar(ImGuiDockNode* node, ImGuiWindow* host_w | ||||
|     if (is_focused) | ||||
|         node->LastFrameFocused = g.FrameCount; | ||||
|     ImU32 title_bar_col = GetColorU32(host_window->Collapsed ? ImGuiCol_TitleBgCollapsed : is_focused ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg); | ||||
|     bool rounding_t = node->Pos.y <= host_window->Pos.y + DOCKING_SPLITTER_SIZE; | ||||
|     bool rounding_tl = rounding_t && (node->Pos.x <= host_window->Pos.x + DOCKING_SPLITTER_SIZE); | ||||
|     bool rounding_tr = rounding_t && (node->Pos.x + node->Size.x >= host_window->Pos.x + host_window->Size.x - DOCKING_SPLITTER_SIZE); | ||||
|     ImDrawFlags rounding_flags = ImDrawFlags_RoundCornersNone | (rounding_tl ? ImDrawFlags_RoundCornersTopLeft : 0) | (rounding_tr ? ImDrawFlags_RoundCornersTopRight : 0); | ||||
|     ImDrawFlags rounding_flags = CalcRoundingFlagsForRectInRect(title_bar_rect, host_window->Rect(), DOCKING_SPLITTER_SIZE); | ||||
|     host_window->DrawList->AddRectFilled(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, host_window->WindowRounding, rounding_flags); | ||||
|  | ||||
|     // Docking/Collapse button | ||||
| @@ -14958,7 +14955,7 @@ static void ImGui::DockNodePreviewDockRender(ImGuiWindow* host_window, ImGuiDock | ||||
|             overlay_rect.Min.y += GetFrameHeight(); | ||||
|         if (data->SplitDir != ImGuiDir_None || data->IsCenterAvailable) | ||||
|             for (int overlay_n = 0; overlay_n < overlay_draw_lists_count; overlay_n++) | ||||
|                 overlay_draw_lists[overlay_n]->AddRectFilled(overlay_rect.Min, overlay_rect.Max, overlay_col_main, host_window->WindowRounding); | ||||
|                 overlay_draw_lists[overlay_n]->AddRectFilled(overlay_rect.Min, overlay_rect.Max, overlay_col_main, host_window->WindowRounding, CalcRoundingFlagsForRectInRect(overlay_rect, host_window->Rect(), DOCKING_SPLITTER_SIZE)); | ||||
|     } | ||||
|  | ||||
|     // Display tab shape/label preview unless we are splitting node (it generally makes the situation harder to read) | ||||
|   | ||||
| @@ -3926,6 +3926,17 @@ void ImGui::RenderRectFilledWithHole(ImDrawList* draw_list, ImRect outer, ImRect | ||||
|     if (fill_R && fill_D) draw_list->AddRectFilled(ImVec2(inner.Max.x, inner.Max.y), ImVec2(outer.Max.x, outer.Max.y), col, rounding, ImDrawFlags_RoundCornersBottomRight); | ||||
| } | ||||
|  | ||||
| ImDrawFlags ImGui::CalcRoundingFlagsForRectInRect(const ImRect& r_in, const ImRect& r_outer, float threshold) | ||||
| { | ||||
|     bool round_l = r_in.Min.x <= r_outer.Min.x + threshold; | ||||
|     bool round_r = r_in.Max.x >= r_outer.Max.x - threshold; | ||||
|     bool round_t = r_in.Min.y <= r_outer.Min.y + threshold; | ||||
|     bool round_b = r_in.Max.y >= r_outer.Max.y - threshold; | ||||
|     return ImDrawFlags_RoundCornersNone | ||||
|         | ((round_t && round_l) ? ImDrawFlags_RoundCornersTopLeft : 0) | ((round_t && round_r) ? ImDrawFlags_RoundCornersTopRight : 0) | ||||
|         | ((round_b && round_l) ? ImDrawFlags_RoundCornersBottomLeft : 0) | ((round_b && round_r) ? ImDrawFlags_RoundCornersBottomRight : 0); | ||||
| } | ||||
|  | ||||
| // Helper for ColorPicker4() | ||||
| // NB: This is rather brittle and will show artifact when rounding this enabled if rounded corners overlap multiple cells. Caller currently responsible for avoiding that. | ||||
| // Spent a non reasonable amount of time trying to getting this right for ColorButton with rounding+anti-aliasing+ImGuiColorEditFlags_HalfAlphaPreview flag + various grid sizes and offsets, and eventually gave up... probably more reasonable to disable rounding altogether. | ||||
|   | ||||
| @@ -2976,6 +2976,7 @@ namespace ImGui | ||||
|     IMGUI_API void          RenderArrowDockMenu(ImDrawList* draw_list, ImVec2 p_min, float sz, ImU32 col); | ||||
|     IMGUI_API void          RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding); | ||||
|     IMGUI_API void          RenderRectFilledWithHole(ImDrawList* draw_list, ImRect outer, ImRect inner, ImU32 col, float rounding); | ||||
|     IMGUI_API ImDrawFlags   CalcRoundingFlagsForRectInRect(const ImRect& r_in, const ImRect& r_outer, float threshold); | ||||
|  | ||||
| #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS | ||||
|     // [1.71: 2019/06/07: Updating prototypes of some of the internal functions. Leaving those for reference for a short while] | ||||
|   | ||||
		Reference in New Issue
	
	Block a user