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

Как вам

  • Хорошо

    Голосов: 44 81.5%
  • Плохо

    Голосов: 10 18.5%

  • Всего проголосовало
    54
Где-то я их видел, но чет не могу вспомнить..
1626451151628.png
 
Всем привет!
Сделал свои первые чекбоксы на ImGui
Хочу знать как вам

C++:
Expand Collapse Copy
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
но тут другие
 
Всем привет!
Сделал свои первые чекбоксы на ImGui
Хочу знать как вам

C++:
Expand Collapse Copy
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

а где выполняется обводка?
 
Назад
Сверху Снизу