mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-22 20:07:01 +00:00
Internals: Added SetLastItemData, rename ImGuiItemHoveredDataBackup to ImGuiLastItemDataBackup.
This commit is contained in:
parent
90b152f265
commit
89ac87cd91
15
imgui.cpp
15
imgui.cpp
@ -3100,6 +3100,15 @@ bool ImGui::IsClippedEx(const ImRect& bb, ImGuiID id, bool clip_even_when_logged
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This is also inlined in ItemAdd()
|
||||||
|
// Note: if ImGuiItemStatusFlags_HasDisplayRect is set, user needs to set window->DC.LastItemDisplayRect!
|
||||||
|
void ImGui::SetLastItemData(ImGuiWindow* window, ImGuiID item_id, ImGuiItemStatusFlags item_flags, const ImRect& item_rect)
|
||||||
|
{
|
||||||
|
window->DC.LastItemId = item_id;
|
||||||
|
window->DC.LastItemStatusFlags = item_flags;
|
||||||
|
window->DC.LastItemRect = item_rect;
|
||||||
|
}
|
||||||
|
|
||||||
// Process TAB/Shift+TAB. Be mindful that this function may _clear_ the ActiveID when tabbing out.
|
// Process TAB/Shift+TAB. Be mindful that this function may _clear_ the ActiveID when tabbing out.
|
||||||
bool ImGui::FocusableItemRegister(ImGuiWindow* window, ImGuiID id)
|
bool ImGui::FocusableItemRegister(ImGuiWindow* window, ImGuiID id)
|
||||||
{
|
{
|
||||||
@ -5980,9 +5989,8 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
|
|
||||||
// We fill last item data based on Title Bar/Tab, in order for IsItemHovered() and IsItemActive() to be usable after Begin().
|
// We fill last item data based on Title Bar/Tab, in order for IsItemHovered() and IsItemActive() to be usable after Begin().
|
||||||
// This is useful to allow creating context menus on title bar only, etc.
|
// This is useful to allow creating context menus on title bar only, etc.
|
||||||
window->DC.LastItemId = window->MoveId;
|
SetLastItemData(window, window->MoveId, IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max, false) ? ImGuiItemStatusFlags_HoveredRect : 0, title_bar_rect);
|
||||||
window->DC.LastItemStatusFlags = IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max, false) ? ImGuiItemStatusFlags_HoveredRect : 0;
|
|
||||||
window->DC.LastItemRect = title_bar_rect;
|
|
||||||
#ifdef IMGUI_ENABLE_TEST_ENGINE
|
#ifdef IMGUI_ENABLE_TEST_ENGINE
|
||||||
if (!(window->Flags & ImGuiWindowFlags_NoTitleBar))
|
if (!(window->Flags & ImGuiWindowFlags_NoTitleBar))
|
||||||
IMGUI_TEST_ENGINE_ITEM_ADD(window->DC.LastItemRect, window->DC.LastItemId);
|
IMGUI_TEST_ENGINE_ITEM_ADD(window->DC.LastItemRect, window->DC.LastItemId);
|
||||||
@ -6959,6 +6967,7 @@ bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Equivalent to calling SetLastItemData()
|
||||||
window->DC.LastItemId = id;
|
window->DC.LastItemId = id;
|
||||||
window->DC.LastItemRect = bb;
|
window->DC.LastItemRect = bb;
|
||||||
window->DC.LastItemStatusFlags = ImGuiItemStatusFlags_None;
|
window->DC.LastItemStatusFlags = ImGuiItemStatusFlags_None;
|
||||||
|
@ -96,7 +96,7 @@ struct ImGuiContext; // Main Dear ImGui context
|
|||||||
struct ImGuiDataTypeInfo; // Type information associated to a ImGuiDataType enum
|
struct ImGuiDataTypeInfo; // Type information associated to a ImGuiDataType enum
|
||||||
struct ImGuiGroupData; // Stacked storage data for BeginGroup()/EndGroup()
|
struct ImGuiGroupData; // Stacked storage data for BeginGroup()/EndGroup()
|
||||||
struct ImGuiInputTextState; // Internal state of the currently focused/edited text input box
|
struct ImGuiInputTextState; // Internal state of the currently focused/edited text input box
|
||||||
struct ImGuiItemHoveredDataBackup; // Backup and restore IsItemHovered() internal data
|
struct ImGuiLastItemDataBackup; // Backup and restore IsItemHovered() internal data
|
||||||
struct ImGuiMenuColumns; // Simple column measurement, currently used for MenuItem() only
|
struct ImGuiMenuColumns; // Simple column measurement, currently used for MenuItem() only
|
||||||
struct ImGuiNavMoveResult; // Result of a gamepad/keyboard directional navigation move query result
|
struct ImGuiNavMoveResult; // Result of a gamepad/keyboard directional navigation move query result
|
||||||
struct ImGuiNextWindowData; // Storage for SetNextWindow** functions
|
struct ImGuiNextWindowData; // Storage for SetNextWindow** functions
|
||||||
@ -1664,14 +1664,14 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Backup and restore just enough data to be able to use IsItemHovered() on item A after another B in the same window has overwritten the data.
|
// Backup and restore just enough data to be able to use IsItemHovered() on item A after another B in the same window has overwritten the data.
|
||||||
struct ImGuiItemHoveredDataBackup
|
struct ImGuiLastItemDataBackup
|
||||||
{
|
{
|
||||||
ImGuiID LastItemId;
|
ImGuiID LastItemId;
|
||||||
ImGuiItemStatusFlags LastItemStatusFlags;
|
ImGuiItemStatusFlags LastItemStatusFlags;
|
||||||
ImRect LastItemRect;
|
ImRect LastItemRect;
|
||||||
ImRect LastItemDisplayRect;
|
ImRect LastItemDisplayRect;
|
||||||
|
|
||||||
ImGuiItemHoveredDataBackup() { Backup(); }
|
ImGuiLastItemDataBackup() { Backup(); }
|
||||||
void Backup() { ImGuiWindow* window = GImGui->CurrentWindow; LastItemId = window->DC.LastItemId; LastItemStatusFlags = window->DC.LastItemStatusFlags; LastItemRect = window->DC.LastItemRect; LastItemDisplayRect = window->DC.LastItemDisplayRect; }
|
void Backup() { ImGuiWindow* window = GImGui->CurrentWindow; LastItemId = window->DC.LastItemId; LastItemStatusFlags = window->DC.LastItemStatusFlags; LastItemRect = window->DC.LastItemRect; LastItemDisplayRect = window->DC.LastItemDisplayRect; }
|
||||||
void Restore() const { ImGuiWindow* window = GImGui->CurrentWindow; window->DC.LastItemId = LastItemId; window->DC.LastItemStatusFlags = LastItemStatusFlags; window->DC.LastItemRect = LastItemRect; window->DC.LastItemDisplayRect = LastItemDisplayRect; }
|
void Restore() const { ImGuiWindow* window = GImGui->CurrentWindow; window->DC.LastItemId = LastItemId; window->DC.LastItemStatusFlags = LastItemStatusFlags; window->DC.LastItemRect = LastItemRect; window->DC.LastItemDisplayRect = LastItemDisplayRect; }
|
||||||
};
|
};
|
||||||
@ -1839,6 +1839,7 @@ namespace ImGui
|
|||||||
IMGUI_API bool ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb = NULL);
|
IMGUI_API bool ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb = NULL);
|
||||||
IMGUI_API bool ItemHoverable(const ImRect& bb, ImGuiID id);
|
IMGUI_API bool ItemHoverable(const ImRect& bb, ImGuiID id);
|
||||||
IMGUI_API bool IsClippedEx(const ImRect& bb, ImGuiID id, bool clip_even_when_logged);
|
IMGUI_API bool IsClippedEx(const ImRect& bb, ImGuiID id, bool clip_even_when_logged);
|
||||||
|
IMGUI_API void SetLastItemData(ImGuiWindow* window, ImGuiID item_id, ImGuiItemStatusFlags status_flags, const ImRect& item_rect);
|
||||||
IMGUI_API bool FocusableItemRegister(ImGuiWindow* window, ImGuiID id); // Return true if focus is requested
|
IMGUI_API bool FocusableItemRegister(ImGuiWindow* window, ImGuiID id); // Return true if focus is requested
|
||||||
IMGUI_API void FocusableItemUnregister(ImGuiWindow* window);
|
IMGUI_API void FocusableItemUnregister(ImGuiWindow* window);
|
||||||
IMGUI_API ImVec2 CalcItemSize(ImVec2 size, float default_w, float default_h);
|
IMGUI_API ImVec2 CalcItemSize(ImVec2 size, float default_w, float default_h);
|
||||||
|
@ -5661,7 +5661,7 @@ bool ImGui::CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags
|
|||||||
// FIXME: We can evolve this into user accessible helpers to add extra buttons on title bars, headers, etc.
|
// FIXME: We can evolve this into user accessible helpers to add extra buttons on title bars, headers, etc.
|
||||||
// FIXME: CloseButton can overlap into text, need find a way to clip the text somehow.
|
// FIXME: CloseButton can overlap into text, need find a way to clip the text somehow.
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
ImGuiItemHoveredDataBackup last_item_backup;
|
ImGuiLastItemDataBackup last_item_backup;
|
||||||
float button_size = g.FontSize;
|
float button_size = g.FontSize;
|
||||||
float button_x = ImMax(window->DC.LastItemRect.Min.x, window->DC.LastItemRect.Max.x - g.Style.FramePadding.x * 2.0f - button_size);
|
float button_x = ImMax(window->DC.LastItemRect.Min.x, window->DC.LastItemRect.Max.x - g.Style.FramePadding.x * 2.0f - button_size);
|
||||||
float button_y = window->DC.LastItemRect.Min.y;
|
float button_y = window->DC.LastItemRect.Min.y;
|
||||||
@ -7410,7 +7410,7 @@ bool ImGui::TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb,
|
|||||||
close_button_visible = true;
|
close_button_visible = true;
|
||||||
if (close_button_visible)
|
if (close_button_visible)
|
||||||
{
|
{
|
||||||
ImGuiItemHoveredDataBackup last_item_backup;
|
ImGuiLastItemDataBackup last_item_backup;
|
||||||
const float close_button_sz = g.FontSize;
|
const float close_button_sz = g.FontSize;
|
||||||
PushStyleVar(ImGuiStyleVar_FramePadding, frame_padding);
|
PushStyleVar(ImGuiStyleVar_FramePadding, frame_padding);
|
||||||
if (CloseButton(close_button_id, ImVec2(bb.Max.x - frame_padding.x * 2.0f - close_button_sz, bb.Min.y)))
|
if (CloseButton(close_button_id, ImVec2(bb.Max.x - frame_padding.x * 2.0f - close_button_sz, bb.Min.y)))
|
||||||
|
Loading…
Reference in New Issue
Block a user