Гайд Красивые чекбоксы для индиго

Участник
Статус
Оффлайн
Регистрация
15 Апр 2017
Сообщения
396
Реакции[?]
194
Поинты[?]
0
Гайд о том как сделать стиль чекбоксов в индиго, как на скрине

 
Последнее редактирование:
AquaHook
Участник
Статус
Оффлайн
Регистрация
17 Мар 2017
Сообщения
713
Реакции[?]
263
Поинты[?]
0
Гайд о том как сделать стиль чекбоксов в индиго, как на скрине

заходим в imgui.cpp, идем на 7285 строку, заменяем
на
Код:
bool ImGui::Checkbox(const char* label, bool* v)
{
    ImGuiWindow* window = GetCurrentWindow();

    if (window->SkipItems)
        return false;

    ImGuiContext& g = *GImGui;
    const ImGuiStyle& style = ImGuiStyle::ImGuiStyle();
    const ImGuiID id = window->GetID(label);
    const ImVec2 label_size = CalcTextSize(label, NULL, true);
    const ImVec2 pading = ImVec2(2, 2);

    const ImRect check_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(label_size.y + style.FramePadding.x*6, label_size.y + style.FramePadding.y / 2));
    ItemSize(check_bb, style.FramePadding.y);

    ImRect total_bb = check_bb;
    if (label_size.x > 0)
        SameLine(0, style.ItemInnerSpacing.x);

    const ImRect text_bb(window->DC.CursorPos + ImVec2(0,style.FramePadding.y), window->DC.CursorPos + ImVec2(0,style.FramePadding.y) + label_size);

    if (label_size.x > 0)
    {
        ItemSize(ImVec2(text_bb.GetWidth(), check_bb.GetHeight()), style.FramePadding.y);
        total_bb = ImRect(ImMin(check_bb.Min, text_bb.Min), ImMax(check_bb.Max, text_bb.Max));
    }

    if (!ItemAdd(total_bb, &id))
        return false;

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

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

    const float check_sz = ImMin(check_bb.GetWidth(), check_bb.GetHeight());
    const float check_sz2 = check_sz / 2;
    const float pad = ImMax(1.0f, (float)(int)(check_sz / 4.f));
    RenderFrame(check_bb.Min, check_bb.Max, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), true, style.FrameRounding);

    //window->DrawList->AddRectFilled(check_bb.Min+ImVec2(pad,pad), check_bb.Max-ImVec2(pad,pad), GetColorU32(ImGuiCol_CheckMark), style.FrameRounding);
    if (*v)//отрисовка галочки
    {
        window->DrawList->AddRectFilled(ImVec2(check_bb.Min.x + (check_bb.Max.x - check_bb.Min.x) / 2, check_bb.Min.y), check_bb.Max, GetColorU32(ImGuiCol_CheckMark), 0);
        window->DrawList->AddRect(ImVec2(check_bb.Min.x + (check_bb.Max.x - check_bb.Min.x) / 2, check_bb.Min.y), check_bb.Max, GetColorU32(ImGuiCol_Border), 0, -1, 2);
    }
    else
    {
        //window->DrawList->AddRectFilled(ImVec2(check_bb.Min.x, check_bb.Min.y), ImVec2(check_bb.Min.x + (check_bb.Max.x - check_bb.Min.x) / 2, check_bb.Max.y), GetColorU32(ImGuiCol_FrameBgHovered), 0);
        window->DrawList->AddRect(ImVec2(check_bb.Min.x, check_bb.Min.y), ImVec2(check_bb.Min.x + (check_bb.Max.x - check_bb.Min.x) / 2, check_bb.Max.y), GetColorU32(ImGuiCol_Border), 0);
    }

    if (label_size.x > 0.0f)
        RenderText(text_bb.GetTL(), label);

    return pressed;
}
Все
Пиздец, но Уилберт будет рад.
 
Забаненный
Статус
Оффлайн
Регистрация
22 Фев 2017
Сообщения
92
Реакции[?]
14
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Пасеба, но зачем ты пишешь в индиго, просто напиши в ImGui :^)
 
Модератор форума
Модератор
Статус
Оффлайн
Регистрация
2 Дек 2016
Сообщения
2,370
Реакции[?]
1,879
Поинты[?]
34K
Код:
if (*v)//отрисовка галочки
    {
        window->DrawList->AddRectFilled(ImVec2(check_bb.Min.x + (check_bb.Max.x - check_bb.Min.x) / 2, check_bb.Min.y), check_bb.Max, GetColorU32(ImGuiCol_CheckMark), 0);
        window->DrawList->AddRect(ImVec2(check_bb.Min.x + (check_bb.Max.x - check_bb.Min.x) / 2, check_bb.Min.y), check_bb.Max, GetColorU32(ImGuiCol_Border), 0, -1, 2);
    }
    else
    {
        window->DrawList->AddRectFilled(ImVec2(check_bb.Min.x, check_bb.Min.y), ImVec2(check_bb.Min.x + (check_bb.Max.x - check_bb.Min.x) / 2, check_bb.Max.y), GetColorU32(ImGuiCol_Kek), 0);
        window->DrawList->AddRect(ImVec2(check_bb.Min.x, check_bb.Min.y), ImVec2(check_bb.Min.x + (check_bb.Max.x - check_bb.Min.x) / 2, check_bb.Max.y), GetColorU32(ImGuiCol_Kek), 0);
    }
Это получше будет
 
Участник
Статус
Оффлайн
Регистрация
15 Апр 2017
Сообщения
396
Реакции[?]
194
Поинты[?]
0
Участник
Статус
Оффлайн
Регистрация
30 Мар 2017
Сообщения
373
Реакции[?]
191
Поинты[?]
0
Забаненный
Статус
Оффлайн
Регистрация
22 Фев 2017
Сообщения
92
Реакции[?]
14
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Забаненный
Статус
Оффлайн
Регистрация
22 Фев 2017
Сообщения
92
Реакции[?]
14
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
push me to the edge
Олдфаг
Статус
Оффлайн
Регистрация
22 Мар 2017
Сообщения
2,253
Реакции[?]
1,204
Поинты[?]
1K
А почему именно для индиго? если это подходит не только для него:BlessRNG:
 
AquaHook
Участник
Статус
Оффлайн
Регистрация
17 Мар 2017
Сообщения
713
Реакции[?]
263
Поинты[?]
0
Ты этим пытаешься сказать, что я не смогу или то, что скит не на OSHGUI, уточни :3
Уверен на 100%, что ты не сможешь так замодифить ошгуи. По поводу скита, некоторые говорят, что он на модифид ошгуи, другие, что он давно не на ошгуи уже.
 
Забаненный
Статус
Оффлайн
Регистрация
22 Фев 2017
Сообщения
92
Реакции[?]
14
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Уверен на 100%, что ты не сможешь так замодифить ошгуи. По поводу скита, некоторые говорят, что он на модифид ошгуи, другие, что он давно не на ошгуи уже.
Ты прав, так не смогу ^) Ну а скит точно на олд скуле, эта инфа достоверна :0
 
Забаненный
Статус
Оффлайн
Регистрация
4 Июн 2017
Сообщения
601
Реакции[?]
47
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
хайд карл..
:NotLikeThis::NotLikeThis:
 
AquaHook
Участник
Статус
Оффлайн
Регистрация
17 Мар 2017
Сообщения
713
Реакции[?]
263
Поинты[?]
0
Ты прав, так не смогу ^) Ну а скит точно на олд скуле, эта инфа достоверна :0
Хз, знаю только, что он года 2 назад точно был на ошгуи. А так смысл брать ошгуи, когда есть прекрасный имгуи, из которого тоже можно сделать скит меню.
 
Забаненный
Статус
Оффлайн
Регистрация
22 Фев 2017
Сообщения
92
Реакции[?]
14
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Хз, знаю только, что он года 2 назад точно был на ошгуи. А так смысл брать ошгуи, когда есть прекрасный имгуи, из которого тоже можно сделать скит меню.
Так то ды, имгуи многофункционален, но многими недооценен, а на GUI получается параша по типу warmhook'a xD
 
Сверху Снизу