Исходник ImGui menu

Stop Staring At the Shadows
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
518
Реакции[?]
497
Поинты[?]
86K
привет skvizxcc, немного по поводу кода

1701974695754.png
1 - попытайся избегать подобных магических чисел и странных калькуляций в коде. создавай переменную и нейми её тем, за что она отвечает, при подобном подходе юзеру твоего сурса будет в десятки раз проще разобраться и использоваться / портировать твои исходники.

по поводу константы "200", лучше делай как-то так:
C++:
constexpr float x_spacing = 200;
функция "renderer_tab" сама по себе немного странная, тебе нет смысла выполнять подобные мувы
1701974938212.png

если ты можешь передавать айдишник таба прямо в функцию, а саму переменную tab передавать как объект (по ссылке), и изменять её прямо из-под функции.

C++:
bool ImGui::render_tab(const char* icon, const char* name, int tab_id, int& tab_variable)
{
    ImGuiWindow* window = ImGui::GetCurrentWindow();
    if (window->SkipItems)
        return false;

    ImDrawList* draw = window->DrawList;
    const ImGuiID id = window->GetID(name);
    const bool is_selected = tab_id == tab_variable;

    const ImVec2 pos = window->DC.CursorPos;
    const ImVec2 size = { 140, 38 };
    const ImRect bb(pos, pos + size);

    ImGui::ItemSize(size, 0);
    if (!ImGui::ItemAdd(bb, id))
        return false;

    bool hovered, held;
    bool pressed = ImGui::ButtonBehavior(bb, id, &hovered, &held, NULL);

    if (pressed) {
        tab_variable = tab_id;
    }

    //if (hovered || held)
    //    ImGui::SetMouseCursor(9);  Useless

    if (is_selected)
        draw->AddRectFilled(ImVec2(bb.Min.x, bb.Min.y), ImVec2(bb.Min.x + 130, bb.Min.y + 36 - 7), ImColor(25, 24, 25), 5);

    ImGui::PushFont(opt.InterMedium);
    draw->AddText(ImVec2(bb.Min.x + 10 + 26, bb.Min.y + 12 - 6), is_selected ? ImColor(255, 255, 255) : ImColor(135, 133, 135), name);
    ImGui::PopFont();

    ImGui::PushFont(opt.IconFont);
    draw->AddText(ImVec2(bb.Min.x + 10, bb.Min.y + 9 - 6 + 2), is_selected ? ImColor(255, 255, 255) : ImColor(135, 133, 135), icon);
    ImGui::PopFont();

    return pressed;
}
1701975596780.png
хоть чуть-чуть, да лучше же стало, согласен?
 
Сверху Снизу