From c82f909be1bc6ff06291201bfec83bb5e77b9296 Mon Sep 17 00:00:00 2001 From: ocornut Date: Sat, 18 Apr 2015 12:11:59 +0100 Subject: [PATCH] Active column (when dragged) not clipped so it can release its active state (extends 16ddd796f3d76a580589673d71e80893baf1430b) --- imgui.cpp | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/imgui.cpp b/imgui.cpp index 0fa2a1b2..d25e667a 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -502,7 +502,7 @@ static bool ItemAdd(const ImRect& bb, const ImGuiID* id); static void ItemSize(ImVec2 size, float text_offset_y = 0.0f); static void ItemSize(const ImRect& bb, float text_offset_y = 0.0f); static void PushColumnClipRect(int column_index = -1); -static bool IsClippedEx(const ImRect& bb, bool clip_even_when_logged); +static bool IsClippedEx(const ImRect& bb, const ImGuiID* id, bool clip_even_when_logged); static bool IsMouseHoveringRect(const ImRect& bb); static bool IsKeyPressedMap(ImGuiKey key, bool repeat = true); @@ -4265,7 +4265,7 @@ void ImGui::TextUnformatted(const char* text, const char* text_end) while (line < text_end) { const char* line_end = strchr(line, '\n'); - if (IsClippedEx(line_rect, false)) + if (IsClippedEx(line_rect, NULL, false)) break; const ImVec2 line_size = CalcTextSize(line, line_end, false); @@ -7266,15 +7266,16 @@ static inline void ItemSize(const ImRect& bb, float text_offset_y) ItemSize(bb.GetSize(), text_offset_y); } -static bool IsClippedEx(const ImRect& bb, bool clip_even_when_logged) +static bool IsClippedEx(const ImRect& bb, const ImGuiID* id, bool clip_even_when_logged) { ImGuiState& g = *GImGui; ImGuiWindow* window = GetCurrentWindow(); if (!bb.Overlaps(ImRect(window->ClipRectStack.back()))) { - if (clip_even_when_logged || !g.LogEnabled) - return true; + if (!id || *id != GImGui->ActiveId) + if (clip_even_when_logged || !g.LogEnabled) + return true; } return false; } @@ -7282,7 +7283,7 @@ static bool IsClippedEx(const ImRect& bb, bool clip_even_when_logged) bool ImGui::IsRectClipped(const ImVec2& size) { ImGuiWindow* window = GetCurrentWindow(); - return IsClippedEx(ImRect(window->DC.CursorPos, window->DC.CursorPos + size), true); + return IsClippedEx(ImRect(window->DC.CursorPos, window->DC.CursorPos + size), NULL, true); } static bool ItemAdd(const ImRect& bb, const ImGuiID* id) @@ -7290,13 +7291,10 @@ static bool ItemAdd(const ImRect& bb, const ImGuiID* id) ImGuiWindow* window = GetCurrentWindow(); window->DC.LastItemID = id ? *id : 0; window->DC.LastItemRect = bb; - if (IsClippedEx(bb, false)) + if (IsClippedEx(bb, id, false)) { - if (!id || *id != GImGui->ActiveId) - { - window->DC.LastItemHoveredAndUsable = window->DC.LastItemHoveredRect = false; - return false; - } + window->DC.LastItemHoveredAndUsable = window->DC.LastItemHoveredRect = false; + return false; } // This is a sensible default, but widgets are free to override it after calling ItemAdd() @@ -7525,7 +7523,7 @@ void ImGui::Columns(int columns_count, const char* id, bool border) const ImGuiID column_id = window->DC.ColumnsSetID + ImGuiID(i); const ImRect column_rect(ImVec2(x-4,y1),ImVec2(x+4,y2)); - if (IsClippedEx(column_rect, false)) + if (IsClippedEx(column_rect, &column_id, false)) continue; bool hovered, held;