satdump/src-core/handler/tree.h
2025-04-14 19:03:42 +01:00

44 lines
1.5 KiB
C++

#pragma once
#include "core/style.h"
#include "imgui/imgui_internal.h"
struct TreeDrawerToClean
{
float SmallOffsetX = 11.0f - 22; // for now, a hardcoded value; should take into account tree indent size
ImDrawList *drawList;
ImVec2 verticalLineStart;
ImVec2 verticalLineEnd;
void start()
{
drawList = ImGui::GetWindowDrawList();
verticalLineStart = ImGui::GetCursorScreenPos();
verticalLineStart.x += SmallOffsetX; // to nicely line up with the arrow symbol
verticalLineEnd = verticalLineStart;
}
bool node(std::string icon)
{
const float HorizontalTreeLineSize = 8.0f; // chosen arbitrarily
const ImRect childRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); // RenderTree(child);
const float midpoint = (childRect.Min.y + childRect.Max.y) / 2.0f;
drawList->AddLine(ImVec2(verticalLineStart.x, midpoint),
ImVec2(verticalLineStart.x + HorizontalTreeLineSize, midpoint), style::theme.treeview_icon);
drawList->AddText(ImVec2(verticalLineStart.x + HorizontalTreeLineSize * 2.0f, childRect.Min.y),
style::theme.treeview_icon, icon.c_str());
verticalLineEnd.y = midpoint;
return false;
}
float end()
{
drawList->AddLine(verticalLineStart, verticalLineEnd, style::theme.treeview_icon);
return verticalLineEnd.y - verticalLineStart.y;
}
};