BeginTooltip: Added 'bool' return value to BeginTooltip() for API consistency. Updated demo.
Add SetWindowHiddendAndSkipItemsForCurrentFrame().
This commit is contained in:
parent
b5f9381036
commit
3b2f617652
@ -44,6 +44,10 @@ Breaking Changes:
|
|||||||
OK: #define IMGUI_DEFINE_MATH_OPERATORS / #include "imgui.h" / #include "imgui_internal.h"
|
OK: #define IMGUI_DEFINE_MATH_OPERATORS / #include "imgui.h" / #include "imgui_internal.h"
|
||||||
Error: #include "imgui.h" / #define IMGUI_DEFINE_MATH_OPERATORS / #include "imgui_internal.h"
|
Error: #include "imgui.h" / #define IMGUI_DEFINE_MATH_OPERATORS / #include "imgui_internal.h"
|
||||||
Added a dedicated compile-time check message to help diagnose this.
|
Added a dedicated compile-time check message to help diagnose this.
|
||||||
|
- Tooltips: Added 'bool' return value to BeginTooltip() for API consistency.
|
||||||
|
Please only submit contents and call EndTooltip() if BeginTooltip() returns true.
|
||||||
|
In reality the function will _currently_ always return true, but further changes down the
|
||||||
|
line may change this, best to clarify API sooner. Updated demo code accordingly.
|
||||||
|
|
||||||
Other changes:
|
Other changes:
|
||||||
|
|
||||||
@ -66,6 +70,7 @@ Other changes:
|
|||||||
- Backends: SDL2, SDL3: Accept SDL_GetPerformanceCounter() not returning a monotonically
|
- Backends: SDL2, SDL3: Accept SDL_GetPerformanceCounter() not returning a monotonically
|
||||||
increasing value. (#6189, #6114, #3644) [@adamkewley]
|
increasing value. (#6189, #6114, #3644) [@adamkewley]
|
||||||
- Examples: Android: Fixed example build for Gradle 8. (#6229, #6227) [@duddel]
|
- Examples: Android: Fixed example build for Gradle 8. (#6229, #6227) [@duddel]
|
||||||
|
- Demo: Updated to test return value of BeginTooltip().
|
||||||
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
|
42
imgui.cpp
42
imgui.cpp
@ -387,6 +387,7 @@ CODE
|
|||||||
When you are not sure about an old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
|
When you are not sure about an old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
|
||||||
You can read releases logs https://github.com/ocornut/imgui/releases for more details.
|
You can read releases logs https://github.com/ocornut/imgui/releases for more details.
|
||||||
|
|
||||||
|
- 2023/03/09 (1.89.4) - tooltips: Added 'bool' return value to BeginTooltip() for API consistency. Please only submit contents and call EndTooltip() if BeginTooltip() returns true. In reality the function will _currently_ always return true, but further changes down the line may change this, best to clarify API sooner.
|
||||||
- 2023/02/15 (1.89.4) - moved the optional "courtesy maths operators" implementation from imgui_internal.h in imgui.h.
|
- 2023/02/15 (1.89.4) - moved the optional "courtesy maths operators" implementation from imgui_internal.h in imgui.h.
|
||||||
Even though we encourage using your own maths types and operators by setting up IM_VEC2_CLASS_EXTRA,
|
Even though we encourage using your own maths types and operators by setting up IM_VEC2_CLASS_EXTRA,
|
||||||
it has been frequently requested by people to use our own. We had an opt-in define which was
|
it has been frequently requested by people to use our own. We had an opt-in define which was
|
||||||
@ -7281,6 +7282,12 @@ void ImGui::SetWindowHitTestHole(ImGuiWindow* window, const ImVec2& pos, const I
|
|||||||
window->HitTestHoleOffset = ImVec2ih(pos - window->Pos);
|
window->HitTestHoleOffset = ImVec2ih(pos - window->Pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ImGui::SetWindowHiddendAndSkipItemsForCurrentFrame(ImGuiWindow* window)
|
||||||
|
{
|
||||||
|
window->Hidden = window->SkipItems = true;
|
||||||
|
window->HiddenFramesCanSkipItems = 1;
|
||||||
|
}
|
||||||
|
|
||||||
void ImGui::SetWindowCollapsed(bool collapsed, ImGuiCond cond)
|
void ImGui::SetWindowCollapsed(bool collapsed, ImGuiCond cond)
|
||||||
{
|
{
|
||||||
SetWindowCollapsed(GImGui->CurrentWindow, collapsed, cond);
|
SetWindowCollapsed(GImGui->CurrentWindow, collapsed, cond);
|
||||||
@ -9875,12 +9882,12 @@ void ImGui::SetScrollHereY(float center_y_ratio)
|
|||||||
// [SECTION] TOOLTIPS
|
// [SECTION] TOOLTIPS
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
void ImGui::BeginTooltip()
|
bool ImGui::BeginTooltip()
|
||||||
{
|
{
|
||||||
BeginTooltipEx(ImGuiTooltipFlags_None, ImGuiWindowFlags_None);
|
return BeginTooltipEx(ImGuiTooltipFlags_None, ImGuiWindowFlags_None);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags)
|
bool ImGui::BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
|
|
||||||
@ -9904,12 +9911,17 @@ void ImGui::BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags ext
|
|||||||
if (window->Active)
|
if (window->Active)
|
||||||
{
|
{
|
||||||
// Hide previous tooltip from being displayed. We can't easily "reset" the content of a window so we create a new one.
|
// Hide previous tooltip from being displayed. We can't easily "reset" the content of a window so we create a new one.
|
||||||
window->Hidden = true;
|
SetWindowHiddendAndSkipItemsForCurrentFrame(window);
|
||||||
window->HiddenFramesCanSkipItems = 1; // FIXME: This may not be necessary?
|
|
||||||
ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", ++g.TooltipOverrideCount);
|
ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", ++g.TooltipOverrideCount);
|
||||||
}
|
}
|
||||||
ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_AlwaysAutoResize;
|
ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_AlwaysAutoResize;
|
||||||
Begin(window_name, NULL, flags | extra_window_flags);
|
Begin(window_name, NULL, flags | extra_window_flags);
|
||||||
|
// 2023-03-09: Added bool return value to the API, but currently always returning true.
|
||||||
|
// If this ever returns false we need to update BeginDragDropSource() accordingly.
|
||||||
|
//if (!ret)
|
||||||
|
// End();
|
||||||
|
//return ret;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::EndTooltip()
|
void ImGui::EndTooltip()
|
||||||
@ -12030,13 +12042,12 @@ bool ImGui::BeginDragDropSource(ImGuiDragDropFlags flags)
|
|||||||
{
|
{
|
||||||
// Target can request the Source to not display its tooltip (we use a dedicated flag to make this request explicit)
|
// Target can request the Source to not display its tooltip (we use a dedicated flag to make this request explicit)
|
||||||
// We unfortunately can't just modify the source flags and skip the call to BeginTooltip, as caller may be emitting contents.
|
// We unfortunately can't just modify the source flags and skip the call to BeginTooltip, as caller may be emitting contents.
|
||||||
BeginTooltip();
|
bool ret = BeginTooltip();
|
||||||
|
IM_ASSERT(ret); // FIXME-NEWBEGIN: If this ever becomes false, we need to Begin("##Hidden", NULL, ImGuiWindowFlags_NoSavedSettings) + SetWindowHiddendAndSkipItemsForCurrentFrame().
|
||||||
|
IM_UNUSED(ret);
|
||||||
|
|
||||||
if (g.DragDropAcceptIdPrev && (g.DragDropAcceptFlags & ImGuiDragDropFlags_AcceptNoPreviewTooltip))
|
if (g.DragDropAcceptIdPrev && (g.DragDropAcceptFlags & ImGuiDragDropFlags_AcceptNoPreviewTooltip))
|
||||||
{
|
SetWindowHiddendAndSkipItemsForCurrentFrame(g.CurrentWindow);
|
||||||
ImGuiWindow* tooltip_window = g.CurrentWindow;
|
|
||||||
tooltip_window->Hidden = tooltip_window->SkipItems = true;
|
|
||||||
tooltip_window->HiddenFramesCanSkipItems = 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(flags & ImGuiDragDropFlags_SourceNoDisableHover) && !(flags & ImGuiDragDropFlags_SourceExtern))
|
if (!(flags & ImGuiDragDropFlags_SourceNoDisableHover) && !(flags & ImGuiDragDropFlags_SourceExtern))
|
||||||
@ -13228,9 +13239,8 @@ void ImGui::DebugTextEncoding(const char* str)
|
|||||||
static void MetricsHelpMarker(const char* desc)
|
static void MetricsHelpMarker(const char* desc)
|
||||||
{
|
{
|
||||||
ImGui::TextDisabled("(?)");
|
ImGui::TextDisabled("(?)");
|
||||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayShort))
|
if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayShort) && ImGui::BeginTooltip())
|
||||||
{
|
{
|
||||||
ImGui::BeginTooltip();
|
|
||||||
ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
|
ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
|
||||||
ImGui::TextUnformatted(desc);
|
ImGui::TextUnformatted(desc);
|
||||||
ImGui::PopTextWrapPos();
|
ImGui::PopTextWrapPos();
|
||||||
@ -13994,9 +14004,8 @@ void ImGui::DebugNodeFont(ImFont* font)
|
|||||||
if (!glyph)
|
if (!glyph)
|
||||||
continue;
|
continue;
|
||||||
font->RenderChar(draw_list, cell_size, cell_p1, glyph_col, (ImWchar)(base + n));
|
font->RenderChar(draw_list, cell_size, cell_p1, glyph_col, (ImWchar)(base + n));
|
||||||
if (IsMouseHoveringRect(cell_p1, cell_p2))
|
if (IsMouseHoveringRect(cell_p1, cell_p2) && BeginTooltip())
|
||||||
{
|
{
|
||||||
BeginTooltip();
|
|
||||||
DebugNodeFontGlyph(font, glyph);
|
DebugNodeFontGlyph(font, glyph);
|
||||||
EndTooltip();
|
EndTooltip();
|
||||||
}
|
}
|
||||||
@ -14333,7 +14342,8 @@ void ImGui::UpdateDebugToolItemPicker()
|
|||||||
if (change_mapping && IsMouseClicked(mouse_button))
|
if (change_mapping && IsMouseClicked(mouse_button))
|
||||||
g.DebugItemPickerMouseButton = (ImU8)mouse_button;
|
g.DebugItemPickerMouseButton = (ImU8)mouse_button;
|
||||||
SetNextWindowBgAlpha(0.70f);
|
SetNextWindowBgAlpha(0.70f);
|
||||||
BeginTooltip();
|
if (!BeginTooltip())
|
||||||
|
return;
|
||||||
Text("HoveredId: 0x%08X", hovered_id);
|
Text("HoveredId: 0x%08X", hovered_id);
|
||||||
Text("Press ESC to abort picking.");
|
Text("Press ESC to abort picking.");
|
||||||
const char* mouse_button_names[] = { "Left", "Right", "Middle" };
|
const char* mouse_button_names[] = { "Left", "Right", "Middle" };
|
||||||
|
4
imgui.h
4
imgui.h
@ -665,8 +665,8 @@ namespace ImGui
|
|||||||
|
|
||||||
// Tooltips
|
// Tooltips
|
||||||
// - Tooltip are windows following the mouse. They do not take focus away.
|
// - Tooltip are windows following the mouse. They do not take focus away.
|
||||||
IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of items).
|
IMGUI_API bool BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of items).
|
||||||
IMGUI_API void EndTooltip();
|
IMGUI_API void EndTooltip(); // only call EndTooltip() if BeginTooltip() returns true!
|
||||||
IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set a text-only tooltip, typically use with ImGui::IsItemHovered(). override any previous call to SetTooltip().
|
IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set a text-only tooltip, typically use with ImGui::IsItemHovered(). override any previous call to SetTooltip().
|
||||||
IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1);
|
IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1);
|
||||||
|
|
||||||
|
@ -211,9 +211,8 @@ static void ShowDemoWindowInputs();
|
|||||||
static void HelpMarker(const char* desc)
|
static void HelpMarker(const char* desc)
|
||||||
{
|
{
|
||||||
ImGui::TextDisabled("(?)");
|
ImGui::TextDisabled("(?)");
|
||||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayShort))
|
if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayShort) && ImGui::BeginTooltip())
|
||||||
{
|
{
|
||||||
ImGui::BeginTooltip();
|
|
||||||
ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
|
ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
|
||||||
ImGui::TextUnformatted(desc);
|
ImGui::TextUnformatted(desc);
|
||||||
ImGui::PopTextWrapPos();
|
ImGui::PopTextWrapPos();
|
||||||
@ -629,9 +628,8 @@ static void ShowDemoWindowWidgets()
|
|||||||
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::SmallButton("Fancy");
|
ImGui::SmallButton("Fancy");
|
||||||
if (ImGui::IsItemHovered())
|
if (ImGui::IsItemHovered() && ImGui::BeginTooltip())
|
||||||
{
|
{
|
||||||
ImGui::BeginTooltip();
|
|
||||||
ImGui::Text("I am a fancy tooltip");
|
ImGui::Text("I am a fancy tooltip");
|
||||||
static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f };
|
static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f };
|
||||||
ImGui::PlotLines("Curve", arr, IM_ARRAYSIZE(arr));
|
ImGui::PlotLines("Curve", arr, IM_ARRAYSIZE(arr));
|
||||||
@ -1047,9 +1045,8 @@ static void ShowDemoWindowWidgets()
|
|||||||
ImVec4 tint_col = use_text_color_for_tint ? ImGui::GetStyleColorVec4(ImGuiCol_Text) : ImVec4(1.0f, 1.0f, 1.0f, 1.0f); // No tint
|
ImVec4 tint_col = use_text_color_for_tint ? ImGui::GetStyleColorVec4(ImGuiCol_Text) : ImVec4(1.0f, 1.0f, 1.0f, 1.0f); // No tint
|
||||||
ImVec4 border_col = ImGui::GetStyleColorVec4(ImGuiCol_Border);
|
ImVec4 border_col = ImGui::GetStyleColorVec4(ImGuiCol_Border);
|
||||||
ImGui::Image(my_tex_id, ImVec2(my_tex_w, my_tex_h), uv_min, uv_max, tint_col, border_col);
|
ImGui::Image(my_tex_id, ImVec2(my_tex_w, my_tex_h), uv_min, uv_max, tint_col, border_col);
|
||||||
if (ImGui::IsItemHovered())
|
if (ImGui::IsItemHovered() && ImGui::BeginTooltip())
|
||||||
{
|
{
|
||||||
ImGui::BeginTooltip();
|
|
||||||
float region_sz = 32.0f;
|
float region_sz = 32.0f;
|
||||||
float region_x = io.MousePos.x - pos.x - region_sz * 0.5f;
|
float region_x = io.MousePos.x - pos.x - region_sz * 0.5f;
|
||||||
float region_y = io.MousePos.y - pos.y - region_sz * 0.5f;
|
float region_y = io.MousePos.y - pos.y - region_sz * 0.5f;
|
||||||
@ -3722,9 +3719,8 @@ static void EditTableSizingFlags(ImGuiTableFlags* p_flags)
|
|||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::TextDisabled("(?)");
|
ImGui::TextDisabled("(?)");
|
||||||
if (ImGui::IsItemHovered())
|
if (ImGui::IsItemHovered() && ImGui::BeginTooltip())
|
||||||
{
|
{
|
||||||
ImGui::BeginTooltip();
|
|
||||||
ImGui::PushTextWrapPos(ImGui::GetFontSize() * 50.0f);
|
ImGui::PushTextWrapPos(ImGui::GetFontSize() * 50.0f);
|
||||||
for (int m = 0; m < IM_ARRAYSIZE(policies); m++)
|
for (int m = 0; m < IM_ARRAYSIZE(policies); m++)
|
||||||
{
|
{
|
||||||
@ -6318,10 +6314,11 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
|||||||
|
|
||||||
// When editing the "Circle Segment Max Error" value, draw a preview of its effect on auto-tessellated circles.
|
// When editing the "Circle Segment Max Error" value, draw a preview of its effect on auto-tessellated circles.
|
||||||
ImGui::DragFloat("Circle Tessellation Max Error", &style.CircleTessellationMaxError , 0.005f, 0.10f, 5.0f, "%.2f", ImGuiSliderFlags_AlwaysClamp);
|
ImGui::DragFloat("Circle Tessellation Max Error", &style.CircleTessellationMaxError , 0.005f, 0.10f, 5.0f, "%.2f", ImGuiSliderFlags_AlwaysClamp);
|
||||||
if (ImGui::IsItemActive())
|
const bool show_samples = ImGui::IsItemActive();
|
||||||
{
|
if (show_samples)
|
||||||
ImGui::SetNextWindowPos(ImGui::GetCursorScreenPos());
|
ImGui::SetNextWindowPos(ImGui::GetCursorScreenPos());
|
||||||
ImGui::BeginTooltip();
|
if (show_samples && ImGui::BeginTooltip())
|
||||||
|
{
|
||||||
ImGui::TextUnformatted("(R = radius, N = number of segments)");
|
ImGui::TextUnformatted("(R = radius, N = number of segments)");
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
ImDrawList* draw_list = ImGui::GetWindowDrawList();
|
ImDrawList* draw_list = ImGui::GetWindowDrawList();
|
||||||
|
@ -2723,6 +2723,7 @@ namespace ImGui
|
|||||||
IMGUI_API void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond = 0);
|
IMGUI_API void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond = 0);
|
||||||
IMGUI_API void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond = 0);
|
IMGUI_API void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond = 0);
|
||||||
IMGUI_API void SetWindowHitTestHole(ImGuiWindow* window, const ImVec2& pos, const ImVec2& size);
|
IMGUI_API void SetWindowHitTestHole(ImGuiWindow* window, const ImVec2& pos, const ImVec2& size);
|
||||||
|
IMGUI_API void SetWindowHiddendAndSkipItemsForCurrentFrame(ImGuiWindow* window);
|
||||||
inline ImRect WindowRectAbsToRel(ImGuiWindow* window, const ImRect& r) { ImVec2 off = window->DC.CursorStartPos; return ImRect(r.Min.x - off.x, r.Min.y - off.y, r.Max.x - off.x, r.Max.y - off.y); }
|
inline ImRect WindowRectAbsToRel(ImGuiWindow* window, const ImRect& r) { ImVec2 off = window->DC.CursorStartPos; return ImRect(r.Min.x - off.x, r.Min.y - off.y, r.Max.x - off.x, r.Max.y - off.y); }
|
||||||
inline ImRect WindowRectRelToAbs(ImGuiWindow* window, const ImRect& r) { ImVec2 off = window->DC.CursorStartPos; return ImRect(r.Min.x + off.x, r.Min.y + off.y, r.Max.x + off.x, r.Max.y + off.y); }
|
inline ImRect WindowRectRelToAbs(ImGuiWindow* window, const ImRect& r) { ImVec2 off = window->DC.CursorStartPos; return ImRect(r.Min.x + off.x, r.Min.y + off.y, r.Max.x + off.x, r.Max.y + off.y); }
|
||||||
|
|
||||||
@ -2843,7 +2844,7 @@ namespace ImGui
|
|||||||
IMGUI_API void ClosePopupsExceptModals();
|
IMGUI_API void ClosePopupsExceptModals();
|
||||||
IMGUI_API bool IsPopupOpen(ImGuiID id, ImGuiPopupFlags popup_flags);
|
IMGUI_API bool IsPopupOpen(ImGuiID id, ImGuiPopupFlags popup_flags);
|
||||||
IMGUI_API bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags);
|
IMGUI_API bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags);
|
||||||
IMGUI_API void BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags);
|
IMGUI_API bool BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags);
|
||||||
IMGUI_API ImRect GetPopupAllowedExtentRect(ImGuiWindow* window);
|
IMGUI_API ImRect GetPopupAllowedExtentRect(ImGuiWindow* window);
|
||||||
IMGUI_API ImGuiWindow* GetTopMostPopupModal();
|
IMGUI_API ImGuiWindow* GetTopMostPopupModal();
|
||||||
IMGUI_API ImGuiWindow* GetTopMostAndVisiblePopupModal();
|
IMGUI_API ImGuiWindow* GetTopMostAndVisiblePopupModal();
|
||||||
|
Loading…
Reference in New Issue
Block a user