File: tree.h

package info (click to toggle)
satdump 1.2.2%2Bgb79af48-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 81,648 kB
  • sloc: cpp: 276,768; ansic: 164,598; lisp: 1,219; sh: 283; xml: 106; makefile: 7
file content (39 lines) | stat: -rw-r--r-- 1,306 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#pragma once

struct TreeDrawer
{

    const ImColor TreeLineColor = ImColor(128, 128, 128, 255); // ImGui::GetColorU32(ImGuiCol_Text);
    const float SmallOffsetX = 11.0f;                          // 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;
    }

    void node()
    {
        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), TreeLineColor);
        verticalLineEnd.y = midpoint;
    }

    float end()
    {
        drawList->AddLine(verticalLineStart, verticalLineEnd, TreeLineColor);

        return verticalLineEnd.y - verticalLineStart.y;
    }
};