mirror of
https://github.com/ocornut/imgui.git
synced 2024-11-14 11:07:48 +01:00
Internal: Refactor: Moved RenderArrow, RenderBullet, RenderCheckMark to imgui_draw.cpp, changed RenderCheckMark to avoid using ImGui context
This commit is contained in:
parent
2fd411a83e
commit
0bbbbe0f68
60
imgui.cpp
60
imgui.cpp
@ -2542,8 +2542,9 @@ const char* ImGui::GetStyleColorName(ImGuiCol idx)
|
|||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// [SECTION] RENDER HELPERS
|
// [SECTION] RENDER HELPERS
|
||||||
// Some of those (internal) functions are currently quite a legacy mess - their signature and behavior will change.
|
// Some of those (internal) functions are currently quite a legacy mess - their signature and behavior will change,
|
||||||
// Also see imgui_draw.cpp for some more which have been reworked to not rely on ImGui:: state.
|
// we need a nicer separation between low-level functions and high-level functions relying on the ImGui context.
|
||||||
|
// Also see imgui_draw.cpp for some more which have been reworked to not rely on ImGui:: context.
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
const char* ImGui::FindRenderedTextEnd(const char* text, const char* text_end)
|
const char* ImGui::FindRenderedTextEnd(const char* text, const char* text_end)
|
||||||
@ -2753,61 +2754,6 @@ void ImGui::RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render an arrow aimed to be aligned with text (p_min is a position in the same space text would be positioned). To e.g. denote expanded/collapsed state
|
|
||||||
void ImGui::RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale)
|
|
||||||
{
|
|
||||||
const float h = draw_list->_Data->FontSize * 1.00f;
|
|
||||||
float r = h * 0.40f * scale;
|
|
||||||
ImVec2 center = pos + ImVec2(h * 0.50f, h * 0.50f * scale);
|
|
||||||
|
|
||||||
ImVec2 a, b, c;
|
|
||||||
switch (dir)
|
|
||||||
{
|
|
||||||
case ImGuiDir_Up:
|
|
||||||
case ImGuiDir_Down:
|
|
||||||
if (dir == ImGuiDir_Up) r = -r;
|
|
||||||
a = ImVec2(+0.000f,+0.750f) * r;
|
|
||||||
b = ImVec2(-0.866f,-0.750f) * r;
|
|
||||||
c = ImVec2(+0.866f,-0.750f) * r;
|
|
||||||
break;
|
|
||||||
case ImGuiDir_Left:
|
|
||||||
case ImGuiDir_Right:
|
|
||||||
if (dir == ImGuiDir_Left) r = -r;
|
|
||||||
a = ImVec2(+0.750f,+0.000f) * r;
|
|
||||||
b = ImVec2(-0.750f,+0.866f) * r;
|
|
||||||
c = ImVec2(-0.750f,-0.866f) * r;
|
|
||||||
break;
|
|
||||||
case ImGuiDir_None:
|
|
||||||
case ImGuiDir_COUNT:
|
|
||||||
IM_ASSERT(0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
draw_list->AddTriangleFilled(center + a, center + b, center + c, col);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ImGui::RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col)
|
|
||||||
{
|
|
||||||
draw_list->AddCircleFilled(pos, draw_list->_Data->FontSize * 0.20f, col, 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ImGui::RenderCheckMark(ImVec2 pos, ImU32 col, float sz)
|
|
||||||
{
|
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
ImGuiWindow* window = g.CurrentWindow;
|
|
||||||
|
|
||||||
float thickness = ImMax(sz / 5.0f, 1.0f);
|
|
||||||
sz -= thickness*0.5f;
|
|
||||||
pos += ImVec2(thickness*0.25f, thickness*0.25f);
|
|
||||||
|
|
||||||
float third = sz / 3.0f;
|
|
||||||
float bx = pos.x + third;
|
|
||||||
float by = pos.y + sz - third*0.5f;
|
|
||||||
window->DrawList->PathLineTo(ImVec2(bx - third, by - third));
|
|
||||||
window->DrawList->PathLineTo(ImVec2(bx, by));
|
|
||||||
window->DrawList->PathLineTo(ImVec2(bx + third*2, by - third*2));
|
|
||||||
window->DrawList->PathStroke(col, false, thickness);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ImGui::RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags)
|
void ImGui::RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
|
@ -16,7 +16,7 @@ Index of this file:
|
|||||||
// [SECTION] ImFontAtlas glyph ranges helpers
|
// [SECTION] ImFontAtlas glyph ranges helpers
|
||||||
// [SECTION] ImFontGlyphRangesBuilder
|
// [SECTION] ImFontGlyphRangesBuilder
|
||||||
// [SECTION] ImFont
|
// [SECTION] ImFont
|
||||||
// [SECTION] Internal Render Helpers
|
// [SECTION] ImGui Internal Render Helpers
|
||||||
// [SECTION] Decompression code
|
// [SECTION] Decompression code
|
||||||
// [SECTION] Default font data (ProggyClean.ttf)
|
// [SECTION] Default font data (ProggyClean.ttf)
|
||||||
|
|
||||||
@ -3161,13 +3161,70 @@ void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col
|
|||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// [SECTION] Internal Render Helpers
|
// [SECTION] ImGui Internal Render Helpers
|
||||||
// (progressively moved from imgui.cpp to here when they are redesigned to stop accessing ImGui global state)
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
// Vaguely redesigned to stop accessing ImGui global state:
|
||||||
|
// - RenderArrow()
|
||||||
|
// - RenderBullet()
|
||||||
|
// - RenderCheckMark()
|
||||||
// - RenderMouseCursor()
|
// - RenderMouseCursor()
|
||||||
// - RenderArrowPointingAt()
|
// - RenderArrowPointingAt()
|
||||||
// - RenderRectFilledRangeH()
|
// - RenderRectFilledRangeH()
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
// Function in need of a redesign (legacy mess)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Render an arrow aimed to be aligned with text (p_min is a position in the same space text would be positioned). To e.g. denote expanded/collapsed state
|
||||||
|
void ImGui::RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale)
|
||||||
|
{
|
||||||
|
const float h = draw_list->_Data->FontSize * 1.00f;
|
||||||
|
float r = h * 0.40f * scale;
|
||||||
|
ImVec2 center = pos + ImVec2(h * 0.50f, h * 0.50f * scale);
|
||||||
|
|
||||||
|
ImVec2 a, b, c;
|
||||||
|
switch (dir)
|
||||||
|
{
|
||||||
|
case ImGuiDir_Up:
|
||||||
|
case ImGuiDir_Down:
|
||||||
|
if (dir == ImGuiDir_Up) r = -r;
|
||||||
|
a = ImVec2(+0.000f, +0.750f) * r;
|
||||||
|
b = ImVec2(-0.866f, -0.750f) * r;
|
||||||
|
c = ImVec2(+0.866f, -0.750f) * r;
|
||||||
|
break;
|
||||||
|
case ImGuiDir_Left:
|
||||||
|
case ImGuiDir_Right:
|
||||||
|
if (dir == ImGuiDir_Left) r = -r;
|
||||||
|
a = ImVec2(+0.750f, +0.000f) * r;
|
||||||
|
b = ImVec2(-0.750f, +0.866f) * r;
|
||||||
|
c = ImVec2(-0.750f, -0.866f) * r;
|
||||||
|
break;
|
||||||
|
case ImGuiDir_None:
|
||||||
|
case ImGuiDir_COUNT:
|
||||||
|
IM_ASSERT(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
draw_list->AddTriangleFilled(center + a, center + b, center + c, col);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGui::RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col)
|
||||||
|
{
|
||||||
|
draw_list->AddCircleFilled(pos, draw_list->_Data->FontSize * 0.20f, col, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGui::RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz)
|
||||||
|
{
|
||||||
|
float thickness = ImMax(sz / 5.0f, 1.0f);
|
||||||
|
sz -= thickness * 0.5f;
|
||||||
|
pos += ImVec2(thickness * 0.25f, thickness * 0.25f);
|
||||||
|
|
||||||
|
float third = sz / 3.0f;
|
||||||
|
float bx = pos.x + third;
|
||||||
|
float by = pos.y + sz - third * 0.5f;
|
||||||
|
draw_list->PathLineTo(ImVec2(bx - third, by - third));
|
||||||
|
draw_list->PathLineTo(ImVec2(bx, by));
|
||||||
|
draw_list->PathLineTo(ImVec2(bx + third * 2.0f, by - third * 2.0f));
|
||||||
|
draw_list->PathStroke(col, false, thickness);
|
||||||
|
}
|
||||||
|
|
||||||
void ImGui::RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow)
|
void ImGui::RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow)
|
||||||
{
|
{
|
||||||
|
@ -1813,7 +1813,6 @@ namespace ImGui
|
|||||||
IMGUI_API void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f);
|
IMGUI_API void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f);
|
||||||
IMGUI_API void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding = 0.0f);
|
IMGUI_API void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding = 0.0f);
|
||||||
IMGUI_API void RenderColorRectWithAlphaCheckerboard(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding = 0.0f, int rounding_corners_flags = ~0);
|
IMGUI_API void RenderColorRectWithAlphaCheckerboard(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding = 0.0f, int rounding_corners_flags = ~0);
|
||||||
IMGUI_API void RenderCheckMark(ImVec2 pos, ImU32 col, float sz);
|
|
||||||
IMGUI_API void RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags = ImGuiNavHighlightFlags_TypeDefault); // Navigation highlight
|
IMGUI_API void RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags = ImGuiNavHighlightFlags_TypeDefault); // Navigation highlight
|
||||||
IMGUI_API const char* FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text.
|
IMGUI_API const char* FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text.
|
||||||
IMGUI_API void LogRenderedText(const ImVec2* ref_pos, const char* text, const char* text_end = NULL);
|
IMGUI_API void LogRenderedText(const ImVec2* ref_pos, const char* text, const char* text_end = NULL);
|
||||||
@ -1821,6 +1820,7 @@ namespace ImGui
|
|||||||
// Render helpers (those functions don't access any ImGui state!)
|
// Render helpers (those functions don't access any ImGui state!)
|
||||||
IMGUI_API void RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f);
|
IMGUI_API void RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f);
|
||||||
IMGUI_API void RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col);
|
IMGUI_API void RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col);
|
||||||
|
IMGUI_API void RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz);
|
||||||
IMGUI_API void RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow);
|
IMGUI_API void RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow);
|
||||||
IMGUI_API void RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col);
|
IMGUI_API void RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, 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 RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding);
|
||||||
|
@ -1044,7 +1044,7 @@ bool ImGui::Checkbox(const char* label, bool* v)
|
|||||||
else if (*v)
|
else if (*v)
|
||||||
{
|
{
|
||||||
const float pad = ImMax(1.0f, IM_FLOOR(square_sz / 6.0f));
|
const float pad = ImMax(1.0f, IM_FLOOR(square_sz / 6.0f));
|
||||||
RenderCheckMark(check_bb.Min + ImVec2(pad, pad), check_col, square_sz - pad*2.0f);
|
RenderCheckMark(window->DrawList, check_bb.Min + ImVec2(pad, pad), check_col, square_sz - pad*2.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g.LogEnabled)
|
if (g.LogEnabled)
|
||||||
@ -6433,7 +6433,7 @@ bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, boo
|
|||||||
PopStyleColor();
|
PopStyleColor();
|
||||||
}
|
}
|
||||||
if (selected)
|
if (selected)
|
||||||
RenderCheckMark(pos + ImVec2(window->DC.MenuColumns.Pos[2] + extra_w + g.FontSize * 0.40f, g.FontSize * 0.134f * 0.5f), GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled), g.FontSize * 0.866f);
|
RenderCheckMark(window->DrawList, pos + ImVec2(window->DC.MenuColumns.Pos[2] + extra_w + g.FontSize * 0.40f, g.FontSize * 0.134f * 0.5f), GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled), g.FontSize * 0.866f);
|
||||||
}
|
}
|
||||||
|
|
||||||
IMGUI_TEST_ENGINE_ITEM_INFO(window->DC.LastItemId, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (selected ? ImGuiItemStatusFlags_Checked : 0));
|
IMGUI_TEST_ENGINE_ITEM_INFO(window->DC.LastItemId, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (selected ? ImGuiItemStatusFlags_Checked : 0));
|
||||||
|
Loading…
Reference in New Issue
Block a user