C++ Крутые чекбоксы на ImGui для вашего чита

Как вам

  • Хорошо

    Голосов: 43 81.1%
  • Плохо

    Голосов: 10 18.9%

  • Всего проголосовало
    53
Web developer / designer
Пользователь
Статус
Оффлайн
Регистрация
15 Ноя 2020
Сообщения
411
Реакции[?]
124
Поинты[?]
2K
Начинающий
Статус
Оффлайн
Регистрация
12 Дек 2020
Сообщения
67
Реакции[?]
10
Поинты[?]
0
t.me/maj0rblog
Дизайнер
Статус
Оффлайн
Регистрация
6 Окт 2018
Сообщения
975
Реакции[?]
619
Поинты[?]
12K
Эксперт
Статус
Оффлайн
Регистрация
13 Сен 2020
Сообщения
1,415
Реакции[?]
713
Поинты[?]
10K
Всем привет!
Сделал свои первые чекбоксы на ImGui
Хочу знать как вам

C++:
bool ImGui::Checkbox(const char* label, bool* v)
{
    ImGuiWindow* window = GetCurrentWindow();
    if (window->SkipItems)
        return false;

    ImGuiContext& g = *GImGui;
    const ImGuiStyle& style = g.Style;
    const ImGuiID id = window->GetID(label);
    const ImVec2 label_size = ImGui::CalcTextSize(label, NULL, true);
    const float square_sz = ImGui::GetFrameHeight();
    const ImVec2 pos = window->DC.CursorPos;
    const ImRect total_bb(pos, pos + ImVec2(square_sz + (style.ItemInnerSpacing.x + label_size.x + 0), 0 + label_size.y + style.FramePadding.y * 2));
    ItemSize(total_bb, style.FramePadding.y);
    ItemAdd(total_bb, id);

    bool hovered, held;
    bool pressed = ButtonBehavior(total_bb, id, &hovered, &held);

    if (hovered || held)
        ImGui::SetMouseCursor(0);

    if (pressed)
        *v = !(*v);


    if (*v)
    {
        window->DrawList->AddCircleFilled(ImVec2(total_bb.Min.x + 10, total_bb.Min.y + 10), 10, ImColor(25, 25, 25, 255), 0);
        window->DrawList->AddCircle(ImVec2(total_bb.Min.x + 10, total_bb.Min.y + 10), 10, ImColor(62, 62, 62, 255), 0, 1.000000);
        window->DrawList->AddCircleFilled(ImVec2(total_bb.Min.x + 10, total_bb.Min.y + 10), 5, ImColor(cfg.menu.color.r(), cfg.menu.color.g(), cfg.menu.color.b(), 255), 0);
    }
    else
    {
        window->DrawList->AddCircleFilled(ImVec2(total_bb.Min.x + 10, total_bb.Min.y + 10), 10, ImColor(25, 25, 25, 255), 0);
        window->DrawList->AddCircle(ImVec2(total_bb.Min.x + 10, total_bb.Min.y + 10), 10, ImColor(62, 62, 62, 255), 0, 1.000000);
    }

    ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(229 / 255.f, 229 / 255.f, 229 / 255.f, 255 / 255.f));
    ImGui::RenderText(ImVec2(total_bb.Min.x + style.ItemInnerSpacing.x + 20, total_bb.Min.y + style.FramePadding.y + 0), label);
    ImGui::PopStyleColor();
    return pressed;
}
Превью :
Посмотреть вложение 161031
обычный чекбокс
Где-то я их видел, но чет не могу вспомнить..
Посмотреть вложение 161251
но тут другие
 
Начинающий
Статус
Оффлайн
Регистрация
18 Ноя 2020
Сообщения
17
Реакции[?]
2
Поинты[?]
0
Всем привет!
Сделал свои первые чекбоксы на ImGui
Хочу знать как вам

C++:
bool ImGui::Checkbox(const char* label, bool* v)
{
    ImGuiWindow* window = GetCurrentWindow();
    if (window->SkipItems)
        return false;

    ImGuiContext& g = *GImGui;
    const ImGuiStyle& style = g.Style;
    const ImGuiID id = window->GetID(label);
    const ImVec2 label_size = ImGui::CalcTextSize(label, NULL, true);
    const float square_sz = ImGui::GetFrameHeight();
    const ImVec2 pos = window->DC.CursorPos;
    const ImRect total_bb(pos, pos + ImVec2(square_sz + (style.ItemInnerSpacing.x + label_size.x + 0), 0 + label_size.y + style.FramePadding.y * 2));
    ItemSize(total_bb, style.FramePadding.y);
    ItemAdd(total_bb, id);

    bool hovered, held;
    bool pressed = ButtonBehavior(total_bb, id, &hovered, &held);

    if (hovered || held)
        ImGui::SetMouseCursor(0);

    if (pressed)
        *v = !(*v);


    if (*v)
    {
        window->DrawList->AddCircleFilled(ImVec2(total_bb.Min.x + 10, total_bb.Min.y + 10), 10, ImColor(25, 25, 25, 255), 0);
        window->DrawList->AddCircle(ImVec2(total_bb.Min.x + 10, total_bb.Min.y + 10), 10, ImColor(62, 62, 62, 255), 0, 1.000000);
        window->DrawList->AddCircleFilled(ImVec2(total_bb.Min.x + 10, total_bb.Min.y + 10), 5, ImColor(cfg.menu.color.r(), cfg.menu.color.g(), cfg.menu.color.b(), 255), 0);
    }
    else
    {
        window->DrawList->AddCircleFilled(ImVec2(total_bb.Min.x + 10, total_bb.Min.y + 10), 10, ImColor(25, 25, 25, 255), 0);
        window->DrawList->AddCircle(ImVec2(total_bb.Min.x + 10, total_bb.Min.y + 10), 10, ImColor(62, 62, 62, 255), 0, 1.000000);
    }

    ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(229 / 255.f, 229 / 255.f, 229 / 255.f, 255 / 255.f));
    ImGui::RenderText(ImVec2(total_bb.Min.x + style.ItemInnerSpacing.x + 20, total_bb.Min.y + style.FramePadding.y + 0), label);
    ImGui::PopStyleColor();
    return pressed;
}
Превью :
Посмотреть вложение 161031
1644399274820.png
а где выполняется обводка?
 
Начинающий
Статус
Оффлайн
Регистрация
18 Ноя 2020
Сообщения
17
Реакции[?]
2
Поинты[?]
0
Сверху Снизу