Вопрос Кастомный чекбокс imgui

Пользователь
Статус
Оффлайн
Регистрация
26 Фев 2020
Сообщения
318
Реакции[?]
31
Поинты[?]
0
посмотрел менюшки всяких челиков на форуме, у них всякие разные чекбоксы.
поискал в интернете, что-то похожее в паблике или нету, или есть но не то.
так как изменять стиль чекбокса, слайдера?
 
Разработчик
Статус
Оффлайн
Регистрация
1 Сен 2018
Сообщения
1,596
Реакции[?]
879
Поинты[?]
113K
посмотрел менюшки всяких челиков на форуме, у них всякие разные чекбоксы.
поискал в интернете, что-то похожее в паблике или нету, или есть но не то.
так как изменять стиль чекбокса, слайдера?
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Начинающий
Статус
Оффлайн
Регистрация
8 Фев 2019
Сообщения
28
Реакции[?]
0
Поинты[?]
0
посмотрел менюшки всяких челиков на форуме, у них всякие разные чекбоксы.
поискал в интернете, что-то похожее в паблике или нету, или есть но не то.
так как изменять стиль чекбокса, слайдера?
imgui widgets
 
Пользователь
Статус
Оффлайн
Регистрация
24 Окт 2019
Сообщения
81
Реакции[?]
82
Поинты[?]
0
так это и так ясно, я имею ввиду как изменить, сделать свой стиль чекбокса, слайдера
что это за вопросы? берёшь и меняешь рендер чекбокса в его функции, что сложного? если ты хочешь более развёрнутый вопрос, переформулируй. :/
 
EVOLUTION ?
Забаненный
Статус
Оффлайн
Регистрация
30 Июл 2019
Сообщения
1,162
Реакции[?]
269
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
так это и так ясно, я имею ввиду как изменить, сделать свой стиль чекбокса, слайдера
знать хотя бы базу c++ и базу imgui, тогда можешь сделать начальные компоненты
 
netcheats
Забаненный
Статус
Оффлайн
Регистрация
29 Апр 2021
Сообщения
58
Реакции[?]
16
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
так это и так ясно, я имею ввиду как изменить, сделать свой стиль чекбокса, слайдера
Тебе надо прочитать документацию ImGui, а конкретно информацию про DrawList. Тогда ты поймёшь что тебе нужно, для того что бы рисовать кастом элементы


знать хотя бы базу c++ и базу imgui, тогда можешь сделать начальные компоненты
Тебе бы кстати тоже не помешало базу С++ и базу ImGui выучить)
 
EVOLUTION ?
Забаненный
Статус
Оффлайн
Регистрация
30 Июл 2019
Сообщения
1,162
Реакции[?]
269
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Приведу пример дефолтного чекбокса и его небольшие изменения:

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); // персональный id компонента
    const ImVec2 label_size = CalcTextSize(label, NULL, true); // размер текста названия чекбока ImVec2(x, y)

    const float square_sz = GetFrameHeight(); // получение высоты фрейма
    const ImVec2 pos = window->DC.CursorPos; // позиция от начала чекбокса
    const ImRect total_bb(pos, pos + ImVec2(square_sz + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), label_size.y + style.FramePadding.y * 2.0f)); // тотал бб - размер всего чекбокса с учётом названия
    ItemSize(total_bb, style.FramePadding.y);
    if (!ItemAdd(total_bb, id))
    {
        IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
        return false;
    }

    bool hovered, held; // булы на наведение и зажатие
    bool pressed = ButtonBehavior(total_bb, id, &hovered, &held); // бул на нажатие
    if (pressed)
    {
        *v = !(*v);
        MarkItemEdited(id);
    }

    const ImRect check_bb(pos, pos + ImVec2(square_sz, square_sz)); // чек бб - сам чекбокс без текста
    RenderNavHighlight(total_bb, id);
    RenderFrame(check_bb.Min, check_bb.Max, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), true, style.FrameRounding); // отрисовка фрейма чекбока, эту функцию можно изменять или удалить и использовать по своему
    ImU32 check_col = GetColorU32(ImGuiCol_CheckMark); // цвет галочки
    bool mixed_value = (window->DC.ItemFlags & ImGuiItemFlags_MixedValue) != 0;
    if (mixed_value)
    {
        // Undocumented tristate/mixed/indeterminate checkbox (#2644)
        // This may seem awkwardly designed because the aim is to make ImGuiItemFlags_MixedValue supported by all widgets (not just checkbox)
        ImVec2 pad(ImMax(1.0f, IM_FLOOR(square_sz / 3.6f)), ImMax(1.0f, IM_FLOOR(square_sz / 3.6f)));
        window->DrawList->AddRectFilled(check_bb.Min + pad, check_bb.Max - pad, check_col, style.FrameRounding);
    }
    else if (*v)
    {
        const float pad = ImMax(1.0f, IM_FLOOR(square_sz / 6.0f)); // жирность галочки
        RenderCheckMark(window->DrawList, check_bb.Min + ImVec2(pad, pad), check_col, square_sz - pad * 2.0f); // сам рендер галочки, можно взять допутсим вместо галочки RenderFrame, пример ниже
        // RenderFrame(check_bb.Min + ImVec2(1, 1), check_bb.Max - ImVec2(1, 1), GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), true, style.FrameRounding); // замена галочки на квадрат | ImVec2(1, 1) - отступы от краёв фрейма
    }

    ImVec2 label_pos = ImVec2(check_bb.Max.x + style.ItemInnerSpacing.x, check_bb.Min.y + style.FramePadding.y); // получение позиции текста, в данном случае он рендерится после чекбокса(т.к. check_bb.Min - мин координаты фрейма чекбокса, check_bb.Max - макс координаты фрейма чекбокса)
    if (g.LogEnabled)
        LogRenderedText(&label_pos, mixed_value ? "[~]" : *v ? "[x]" : "[ ]");
    if (label_size.x > 0.0f)
        RenderText(label_pos, label); // рендер самого название чекбокса

    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
    return pressed;
}
Тебе надо прочитать документацию ImGui
Не всегда найдёшь в ней ответ, легче самому выучить, что и как. Иногда прибегаю к ней, если нужен ответ на вопрос
а конкретно информацию про DrawList
не обязательно использовать drawlist, некоторые чебоксы можно и без него сделать, как обычно они простые и не усложнены в коде
Тебе бы кстати тоже не помешало базу С++ и базу ImGui выучить
чел ты....
Тебе бы кстати тоже не помешало базу С++ и базу ImGui выучить)
тебе вообще молчать надо, мульт... если бы ты видел код стайл за последний месяц - два ты бы это не говорил. меню которые я сливаю, чаще всего с говнокодом и не использованы, т.к. мне нафиг этот хлам на компе держать...
 
Последнее редактирование:
netcheats
Забаненный
Статус
Оффлайн
Регистрация
29 Апр 2021
Сообщения
58
Реакции[?]
16
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Не всегда найдёшь в ней ответ, легче самому выучить, что и как. Иногда прибегаю к ней, если нужен ответ на вопрос
Всё что нужно знать, чтобы ты мог изменять дефолтные элементы имгуи, можно прочитать в документации. Там всё расписано


не обязательно использовать drawlist, некоторые чебоксы можно и без него сделать, как обычно они простые и не усложнены в коде
в 100% случаях используется drawlist, даже представить не могу что ты предлагаешь сделать без него)
 
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,970
Реакции[?]
958
Поинты[?]
19K
Всё что нужно знать, чтобы ты мог изменять дефолтные элементы имгуи, можно прочитать в документации. Там всё расписано



в 100% случаях используется drawlist, даже представить не могу что ты предлагаешь сделать без него)
RenderFrame это кто( who )?
 
Последнее редактирование:
netcheats
Забаненный
Статус
Оффлайн
Регистрация
29 Апр 2021
Сообщения
58
Реакции[?]
16
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ставь чайник, зажигай плиту
Эксперт
Статус
Оффлайн
Регистрация
22 Май 2020
Сообщения
1,444
Реакции[?]
1,092
Поинты[?]
10K
Приведу пример дефолтного чекбокса и его небольшие изменения:

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); // персональный id компонента
    const ImVec2 label_size = CalcTextSize(label, NULL, true); // размер текста названия чекбока ImVec2(x, y)

    const float square_sz = GetFrameHeight(); // получение высоты фрейма
    const ImVec2 pos = window->DC.CursorPos; // позиция от начала чекбокса
    const ImRect total_bb(pos, pos + ImVec2(square_sz + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), label_size.y + style.FramePadding.y * 2.0f)); // тотал бб - размер всего чекбокса с учётом названия
    ItemSize(total_bb, style.FramePadding.y);
    if (!ItemAdd(total_bb, id))
    {
        IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
        return false;
    }

    bool hovered, held; // булы на наведение и зажатие
    bool pressed = ButtonBehavior(total_bb, id, &hovered, &held); // бул на нажатие
    if (pressed)
    {
        *v = !(*v);
        MarkItemEdited(id);
    }

    const ImRect check_bb(pos, pos + ImVec2(square_sz, square_sz)); // чек бб - сам чекбокс без текста
    RenderNavHighlight(total_bb, id);
    RenderFrame(check_bb.Min, check_bb.Max, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), true, style.FrameRounding); // отрисовка фрейма чекбока, эту функцию можно изменять или удалить и использовать по своему
    ImU32 check_col = GetColorU32(ImGuiCol_CheckMark); // цвет галочки
    bool mixed_value = (window->DC.ItemFlags & ImGuiItemFlags_MixedValue) != 0;
    if (mixed_value)
    {
        // Undocumented tristate/mixed/indeterminate checkbox (#2644)
        // This may seem awkwardly designed because the aim is to make ImGuiItemFlags_MixedValue supported by all widgets (not just checkbox)
        ImVec2 pad(ImMax(1.0f, IM_FLOOR(square_sz / 3.6f)), ImMax(1.0f, IM_FLOOR(square_sz / 3.6f)));
        window->DrawList->AddRectFilled(check_bb.Min + pad, check_bb.Max - pad, check_col, style.FrameRounding);
    }
    else if (*v)
    {
        const float pad = ImMax(1.0f, IM_FLOOR(square_sz / 6.0f)); // жирность галочки
        RenderCheckMark(window->DrawList, check_bb.Min + ImVec2(pad, pad), check_col, square_sz - pad * 2.0f); // сам рендер галочки, можно взять допутсим вместо галочки RenderFrame, пример ниже
        // RenderFrame(check_bb.Min + ImVec2(1, 1), check_bb.Max - ImVec2(1, 1), GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), true, style.FrameRounding); // замена галочки на квадрат | ImVec2(1, 1) - отступы от краёв фрейма
    }

    ImVec2 label_pos = ImVec2(check_bb.Max.x + style.ItemInnerSpacing.x, check_bb.Min.y + style.FramePadding.y); // получение позиции текста, в данном случае он рендерится после чекбокса(т.к. check_bb.Min - мин координаты фрейма чекбокса, check_bb.Max - макс координаты фрейма чекбокса)
    if (g.LogEnabled)
        LogRenderedText(&label_pos, mixed_value ? "[~]" : *v ? "[x]" : "[ ]");
    if (label_size.x > 0.0f)
        RenderText(label_pos, label); // рендер самого название чекбокса

    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
    return pressed;
}
Не всегда найдёшь в ней ответ, легче самому выучить, что и как. Иногда прибегаю к ней, если нужен ответ на вопрос

не обязательно использовать drawlist, некоторые чебоксы можно и без него сделать, как обычно они простые и не усложнены в коде

чел ты....

тебе вообще молчать надо, мульт... если бы ты видел код стайл за последний месяц - два ты бы это не говорил. меню которые я сливаю, чаще всего с говнокодом и не использованы, т.к. мне нафиг этот хлам на компе держать...
Чел.. не строй из себя умного дохуя
drawlist основополагающая отрисовки примитивов (да и не только), без него ты как без рук

1619778273619.png
Это вообще отвал башки, ты называешь текущую область (окно) чекбоксом :LUL:
RenderFrame это кто( who )?
Меню делаем за 10 минут, а про теорию не знаем :Jebaited:

не обязательно использовать drawlist, некоторые чебоксы можно и без него сделать, как обычно они простые и не усложнены в коде
:roflanPominki:
 
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,970
Реакции[?]
958
Поинты[?]
19K
Чел.. не строй из себя умного дохуя
drawlist основополагающая отрисовки примитивов (да и не только), без него ты как без рук

Посмотреть вложение 146273
Это вообще отвал башки, ты называешь текущую область (окно) чекбоксом :LUL:

Меню делаем за 10 минут, а про теорию не знаем :Jebaited:


:roflanPominki:
это просто вопрос, я знаю что он через draw_list рендерится
 
netcheats
Забаненный
Статус
Оффлайн
Регистрация
29 Апр 2021
Сообщения
58
Реакции[?]
16
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Чел.. не строй из себя умного дохуя
drawlist основополагающая отрисовки примитивов (да и не только), без него ты как без рук

Посмотреть вложение 146273
Не стоит на него тратить время. Он думает что знает в имгуи всё. Но посмотрев на его работы, хочется лишь заплакать и выйти в окно
 
EVOLUTION ?
Забаненный
Статус
Оффлайн
Регистрация
30 Июл 2019
Сообщения
1,162
Реакции[?]
269
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Не стоит на него тратить время. Он думает что знает в имгуи всё. Но посмотрев на его работы, хочется лишь заплакать и выйти в окно
ты у заказанных видел код хотя бы? Умник...
 
купить дизайн: yougame.biz/threads/155999
Дизайнер
Статус
Оффлайн
Регистрация
19 Сен 2018
Сообщения
794
Реакции[?]
1,381
Поинты[?]
9K
ты у заказанных видел код хотя бы? Умник...
все кто как-либо волнуются о код стайле, пишут свои гуи. имгуи это либа с кучей зависимостей, кастомных мем менеджеров и собственных классов, которые уже есть в стл, с унаследованным кодом от си вроде птр+сайз вместо эррея, va_list вместо темплейтов, етц... . так что используя имгуи последнее о чем ты можешь говорить, так это о код стайле
 
netcheats
Забаненный
Статус
Оффлайн
Регистрация
29 Апр 2021
Сообщения
58
Реакции[?]
16
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Похожие темы
Сверху Снизу