Исходник AddRectMultiColorRounded ImGui

Эксперт
Статус
Оффлайн
Регистрация
14 Июл 2019
Сообщения
1,106
Реакции[?]
497
Поинты[?]
33K
жоска закруглил
C++:
void ImDrawList::AddRectFilledMultiColorRounded(const ImVec2& p_min, const ImVec2& p_max, ImU32 bg_color, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left, float rounding, ImDrawFlags rounding_corners)
{
    rounding = ImMin(rounding, ImFabs(p_max.x - p_min.x) * (((rounding_corners & ImDrawCornerFlags_Top) == ImDrawCornerFlags_Top) || ((rounding_corners & ImDrawCornerFlags_Bot) == ImDrawCornerFlags_Bot) ? 0.5f : 1.0f) - 1.0f);
    rounding = ImMin(rounding, ImFabs(p_max.y - p_min.y) * (((rounding_corners & ImDrawCornerFlags_Left) == ImDrawCornerFlags_Left) || ((rounding_corners & ImDrawCornerFlags_Right) == ImDrawCornerFlags_Right) ? 0.5f : 1.0f) - 1.0f);

    if (rounding <= 0.0f || rounding_corners == 0)
        return;
    else
    {
        const float rounding_tl = (rounding_corners & ImDrawCornerFlags_TopLeft) ? rounding : 0.0f;
        const float rounding_tr = (rounding_corners & ImDrawCornerFlags_TopRight) ? rounding : 0.0f;
        const float rounding_br = (rounding_corners & ImDrawCornerFlags_BotRight) ? rounding : 0.0f;
        const float rounding_bl = (rounding_corners & ImDrawCornerFlags_BotLeft) ? rounding : 0.0f;

        const ImVec2 uv = _Data->TexUvWhitePixel;
        PrimReserve(6, 4);
        PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 1)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 2));
        PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 2)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 3));
        PrimWriteVtx(p_min, uv, col_upr_left);
        PrimWriteVtx(ImVec2(p_max.x, p_min.y), uv, col_upr_right);
        PrimWriteVtx(p_max, uv, col_bot_right);
        PrimWriteVtx(ImVec2(p_min.x, p_max.y), uv, col_bot_left);

        PathLineTo(p_min);
        PathArcTo(ImVec2(p_min.x + rounding_tl, p_min.y + rounding_tl), rounding_tl, 4.820f, 3.100f);
        PathFillConvex(bg_color);

        PathLineTo(ImVec2(p_max.x, p_min.y));
        PathArcTo(ImVec2(p_max.x - rounding_tr, p_min.y + rounding_tr), rounding_tr, 6.3400f, 4.620f);
        PathFillConvex(bg_color);

        PathLineTo(ImVec2(p_max.x, p_max.y));
        PathArcTo(ImVec2(p_max.x - rounding_br, p_max.y - rounding_br), rounding_br, 7.960f, 6.240f);
        PathFillConvex(bg_color);

        PathLineTo(ImVec2(p_min.x, p_max.y));
        PathArcTo(ImVec2(p_min.x + rounding_bl, p_max.y - rounding_bl), rounding_bl, 9.5f, 7.770f);
        PathFillConvex(bg_color);

    }
}
1663327715687.png
 
Последнее редактирование:
I Want to Die in New Orleans
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
516
Реакции[?]
496
Поинты[?]
85K
жоска закругил
C++:
void ImDrawList::AddRectFilledMultiColorRounded(const ImVec2& p_min, const ImVec2& p_max, ImU32 bg_color, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left, float rounding, ImDrawFlags rounding_corners)
{
    rounding = ImMin(rounding, ImFabs(p_max.x - p_min.x) * (((rounding_corners & ImDrawCornerFlags_Top) == ImDrawCornerFlags_Top) || ((rounding_corners & ImDrawCornerFlags_Bot) == ImDrawCornerFlags_Bot) ? 0.5f : 1.0f) - 1.0f);
    rounding = ImMin(rounding, ImFabs(p_max.y - p_min.y) * (((rounding_corners & ImDrawCornerFlags_Left) == ImDrawCornerFlags_Left) || ((rounding_corners & ImDrawCornerFlags_Right) == ImDrawCornerFlags_Right) ? 0.5f : 1.0f) - 1.0f);

    if (rounding <= 0.0f || rounding_corners == 0)
        return;
    else
    {
        const float rounding_tl = (rounding_corners & ImDrawCornerFlags_TopLeft) ? rounding : 0.0f;
        const float rounding_tr = (rounding_corners & ImDrawCornerFlags_TopRight) ? rounding : 0.0f;
        const float rounding_br = (rounding_corners & ImDrawCornerFlags_BotRight) ? rounding : 0.0f;
        const float rounding_bl = (rounding_corners & ImDrawCornerFlags_BotLeft) ? rounding : 0.0f;

        const ImVec2 uv = _Data->TexUvWhitePixel;
        PrimReserve(6, 4);
        PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 1)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 2));
        PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 2)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 3));
        PrimWriteVtx(p_min, uv, col_upr_left);
        PrimWriteVtx(ImVec2(p_max.x, p_min.y), uv, col_upr_right);
        PrimWriteVtx(p_max, uv, col_bot_right);
        PrimWriteVtx(ImVec2(p_min.x, p_max.y), uv, col_bot_left);

        PathLineTo(p_min);
        PathArcTo(ImVec2(p_min.x + rounding_tl, p_min.y + rounding_tl), rounding_tl, 4.820f, 3.100f);
        PathFillConvex(bg_color);

        PathLineTo(ImVec2(p_max.x, p_min.y));
        PathArcTo(ImVec2(p_max.x - rounding_tr, p_min.y + rounding_tr), rounding_tr, 6.3400f, 4.620f);
        PathFillConvex(bg_color);

        PathLineTo(ImVec2(p_max.x, p_max.y));
        PathArcTo(ImVec2(p_max.x - rounding_br, p_max.y - rounding_br), rounding_br, 7.960f, 6.240f);
        PathFillConvex(bg_color);

        PathLineTo(ImVec2(p_min.x, p_max.y));
        PathArcTo(ImVec2(p_min.x + rounding_bl, p_max.y - rounding_bl), rounding_bl, 9.5f, 7.770f);
        PathFillConvex(bg_color);

    }
}
блять.
1663328656895.png
красава короч.
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
15 Апр 2021
Сообщения
224
Реакции[?]
64
Поинты[?]
0
жоска закругил
C++:
void ImDrawList::AddRectFilledMultiColorRounded(const ImVec2& p_min, const ImVec2& p_max, ImU32 bg_color, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left, float rounding, ImDrawFlags rounding_corners)
{
    rounding = ImMin(rounding, ImFabs(p_max.x - p_min.x) * (((rounding_corners & ImDrawCornerFlags_Top) == ImDrawCornerFlags_Top) || ((rounding_corners & ImDrawCornerFlags_Bot) == ImDrawCornerFlags_Bot) ? 0.5f : 1.0f) - 1.0f);
    rounding = ImMin(rounding, ImFabs(p_max.y - p_min.y) * (((rounding_corners & ImDrawCornerFlags_Left) == ImDrawCornerFlags_Left) || ((rounding_corners & ImDrawCornerFlags_Right) == ImDrawCornerFlags_Right) ? 0.5f : 1.0f) - 1.0f);

    if (rounding <= 0.0f || rounding_corners == 0)
        return;
    else
    {
        const float rounding_tl = (rounding_corners & ImDrawCornerFlags_TopLeft) ? rounding : 0.0f;
        const float rounding_tr = (rounding_corners & ImDrawCornerFlags_TopRight) ? rounding : 0.0f;
        const float rounding_br = (rounding_corners & ImDrawCornerFlags_BotRight) ? rounding : 0.0f;
        const float rounding_bl = (rounding_corners & ImDrawCornerFlags_BotLeft) ? rounding : 0.0f;

        const ImVec2 uv = _Data->TexUvWhitePixel;
        PrimReserve(6, 4);
        PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 1)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 2));
        PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 2)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 3));
        PrimWriteVtx(p_min, uv, col_upr_left);
        PrimWriteVtx(ImVec2(p_max.x, p_min.y), uv, col_upr_right);
        PrimWriteVtx(p_max, uv, col_bot_right);
        PrimWriteVtx(ImVec2(p_min.x, p_max.y), uv, col_bot_left);

        PathLineTo(p_min);
        PathArcTo(ImVec2(p_min.x + rounding_tl, p_min.y + rounding_tl), rounding_tl, 4.820f, 3.100f);
        PathFillConvex(bg_color);

        PathLineTo(ImVec2(p_max.x, p_min.y));
        PathArcTo(ImVec2(p_max.x - rounding_tr, p_min.y + rounding_tr), rounding_tr, 6.3400f, 4.620f);
        PathFillConvex(bg_color);

        PathLineTo(ImVec2(p_max.x, p_max.y));
        PathArcTo(ImVec2(p_max.x - rounding_br, p_max.y - rounding_br), rounding_br, 7.960f, 6.240f);
        PathFillConvex(bg_color);

        PathLineTo(ImVec2(p_min.x, p_max.y));
        PathArcTo(ImVec2(p_min.x + rounding_bl, p_max.y - rounding_bl), rounding_bl, 9.5f, 7.770f);
        PathFillConvex(bg_color);

    }
}
приват функция ликед изи
 
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,967
Реакции[?]
958
Поинты[?]
19K
жоска закругил
C++:
void ImDrawList::AddRectFilledMultiColorRounded(const ImVec2& p_min, const ImVec2& p_max, ImU32 bg_color, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left, float rounding, ImDrawFlags rounding_corners)
{
    rounding = ImMin(rounding, ImFabs(p_max.x - p_min.x) * (((rounding_corners & ImDrawCornerFlags_Top) == ImDrawCornerFlags_Top) || ((rounding_corners & ImDrawCornerFlags_Bot) == ImDrawCornerFlags_Bot) ? 0.5f : 1.0f) - 1.0f);
    rounding = ImMin(rounding, ImFabs(p_max.y - p_min.y) * (((rounding_corners & ImDrawCornerFlags_Left) == ImDrawCornerFlags_Left) || ((rounding_corners & ImDrawCornerFlags_Right) == ImDrawCornerFlags_Right) ? 0.5f : 1.0f) - 1.0f);

    if (rounding <= 0.0f || rounding_corners == 0)
        return;
    else
    {
        const float rounding_tl = (rounding_corners & ImDrawCornerFlags_TopLeft) ? rounding : 0.0f;
        const float rounding_tr = (rounding_corners & ImDrawCornerFlags_TopRight) ? rounding : 0.0f;
        const float rounding_br = (rounding_corners & ImDrawCornerFlags_BotRight) ? rounding : 0.0f;
        const float rounding_bl = (rounding_corners & ImDrawCornerFlags_BotLeft) ? rounding : 0.0f;

        const ImVec2 uv = _Data->TexUvWhitePixel;
        PrimReserve(6, 4);
        PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 1)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 2));
        PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 2)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 3));
        PrimWriteVtx(p_min, uv, col_upr_left);
        PrimWriteVtx(ImVec2(p_max.x, p_min.y), uv, col_upr_right);
        PrimWriteVtx(p_max, uv, col_bot_right);
        PrimWriteVtx(ImVec2(p_min.x, p_max.y), uv, col_bot_left);

        PathLineTo(p_min);
        PathArcTo(ImVec2(p_min.x + rounding_tl, p_min.y + rounding_tl), rounding_tl, 4.820f, 3.100f);
        PathFillConvex(bg_color);

        PathLineTo(ImVec2(p_max.x, p_min.y));
        PathArcTo(ImVec2(p_max.x - rounding_tr, p_min.y + rounding_tr), rounding_tr, 6.3400f, 4.620f);
        PathFillConvex(bg_color);

        PathLineTo(ImVec2(p_max.x, p_max.y));
        PathArcTo(ImVec2(p_max.x - rounding_br, p_max.y - rounding_br), rounding_br, 7.960f, 6.240f);
        PathFillConvex(bg_color);

        PathLineTo(ImVec2(p_min.x, p_max.y));
        PathArcTo(ImVec2(p_min.x + rounding_bl, p_max.y - rounding_bl), rounding_bl, 9.5f, 7.770f);
        PathFillConvex(bg_color);

    }
}
Ура, теперь появиться куча говно меню с градиентом
 
VirtualAllocEx
Пользователь
Статус
Оффлайн
Регистрация
30 Дек 2021
Сообщения
358
Реакции[?]
83
Поинты[?]
5K
жоска закругил
C++:
void ImDrawList::AddRectFilledMultiColorRounded(const ImVec2& p_min, const ImVec2& p_max, ImU32 bg_color, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left, float rounding, ImDrawFlags rounding_corners)
{
    rounding = ImMin(rounding, ImFabs(p_max.x - p_min.x) * (((rounding_corners & ImDrawCornerFlags_Top) == ImDrawCornerFlags_Top) || ((rounding_corners & ImDrawCornerFlags_Bot) == ImDrawCornerFlags_Bot) ? 0.5f : 1.0f) - 1.0f);
    rounding = ImMin(rounding, ImFabs(p_max.y - p_min.y) * (((rounding_corners & ImDrawCornerFlags_Left) == ImDrawCornerFlags_Left) || ((rounding_corners & ImDrawCornerFlags_Right) == ImDrawCornerFlags_Right) ? 0.5f : 1.0f) - 1.0f);

    if (rounding <= 0.0f || rounding_corners == 0)
        return;
    else
    {
        const float rounding_tl = (rounding_corners & ImDrawCornerFlags_TopLeft) ? rounding : 0.0f;
        const float rounding_tr = (rounding_corners & ImDrawCornerFlags_TopRight) ? rounding : 0.0f;
        const float rounding_br = (rounding_corners & ImDrawCornerFlags_BotRight) ? rounding : 0.0f;
        const float rounding_bl = (rounding_corners & ImDrawCornerFlags_BotLeft) ? rounding : 0.0f;

        const ImVec2 uv = _Data->TexUvWhitePixel;
        PrimReserve(6, 4);
        PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 1)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 2));
        PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 2)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 3));
        PrimWriteVtx(p_min, uv, col_upr_left);
        PrimWriteVtx(ImVec2(p_max.x, p_min.y), uv, col_upr_right);
        PrimWriteVtx(p_max, uv, col_bot_right);
        PrimWriteVtx(ImVec2(p_min.x, p_max.y), uv, col_bot_left);

        PathLineTo(p_min);
        PathArcTo(ImVec2(p_min.x + rounding_tl, p_min.y + rounding_tl), rounding_tl, 4.820f, 3.100f);
        PathFillConvex(bg_color);

        PathLineTo(ImVec2(p_max.x, p_min.y));
        PathArcTo(ImVec2(p_max.x - rounding_tr, p_min.y + rounding_tr), rounding_tr, 6.3400f, 4.620f);
        PathFillConvex(bg_color);

        PathLineTo(ImVec2(p_max.x, p_max.y));
        PathArcTo(ImVec2(p_max.x - rounding_br, p_max.y - rounding_br), rounding_br, 7.960f, 6.240f);
        PathFillConvex(bg_color);

        PathLineTo(ImVec2(p_min.x, p_max.y));
        PathArcTo(ImVec2(p_min.x + rounding_bl, p_max.y - rounding_bl), rounding_bl, 9.5f, 7.770f);
        PathFillConvex(bg_color);

    }
}
Ну наконец-то хоть кто-то додумался сделать нормальные края у закругления
 
кто читает тот умрет
Участник
Статус
Оффлайн
Регистрация
29 Июл 2019
Сообщения
696
Реакции[?]
541
Поинты[?]
154K
Ну наконец-то хоть кто-то додумался сделать нормальные края у закругления
Ты на каких наркотиках? Тема паблик уже 50 лет, сам окорнут сливал норм реализацию да и самому это сделать нихуя не сложно

p.s прочитал код создателя темы, так это как раз тот паблик код динозавровский, это не фулл правильная реализация я блять даже на черном фоне вижу как сильно у тебя зашакалены углы
 
Пользователь
Статус
Оффлайн
Регистрация
26 Окт 2017
Сообщения
519
Реакции[?]
95
Поинты[?]
2K
Ты на каких наркотиках? Тема паблик уже 50 лет, сам окорнут сливал норм реализацию да и самому это сделать нихуя не сложно

p.s прочитал код создателя темы, так это как раз тот паблик код динозавровский, это не фулл правильная реализация я блять даже на черном фоне вижу как сильно у тебя зашакалены углы
Что с ними не так?
Imgui методы исключительно никаких костылей
Что ты там решил улучшать в углах? Пиксели есть пиксели так уж сделали экраны.
 
кто читает тот умрет
Участник
Статус
Оффлайн
Регистрация
29 Июл 2019
Сообщения
696
Реакции[?]
541
Поинты[?]
154K
Что с ними не так?
Imgui методы исключительно никаких костылей
Что ты там решил улучшать в углах? Пиксели есть пиксели так уж сделали экраны.
Так у него же углы пиздец шакальные, а тут нормальные
Пацаны вы что рофлите втф, посмотрите насколько такой "раудинг" шакалит углы, я сейчас не имею доступа к мейн компу, но если кто-то будет выебываться что невозможно сделать так что бы не шакалилось я попрошу кента что бы он скинул мне скрин с ласт реализации на имгуи :coldsideRage:
1663386824321.png
 
Эксперт
Статус
Оффлайн
Регистрация
14 Июл 2019
Сообщения
1,106
Реакции[?]
497
Поинты[?]
33K
Пацаны вы что рофлите втф, посмотрите насколько такой "раудинг" шакалит углы, я сейчас не имею доступа к мейн компу, но если кто-то будет выебываться что невозможно сделать так что бы не шакалилось я попрошу кента что бы он скинул мне скрин с ласт реализации на имгуи :coldsideRage:
Посмотреть вложение 221338
мне кажется, что ты немного обосрался
 
кто читает тот умрет
Участник
Статус
Оффлайн
Регистрация
29 Июл 2019
Сообщения
696
Реакции[?]
541
Поинты[?]
154K
Посмотреть вложение 221345
шок!!! в последней версии имгуи точно так же "шакалятся" углы!!!
Так кто сказал что в имгуи все полноценно сделано? Большинство людей как раз таки и делают свою версию имгуи без костылей и багов, как раз скоро выйдет такое решение от человека которого все знают. Дефолтное имгуи это вообще не совсем про красоту а больше про функциональность и стабильность, поэтому там куча проблем с шрифтами и прочим.
 
Забаненный
Статус
Оффлайн
Регистрация
2 Июл 2021
Сообщения
155
Реакции[?]
21
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
1677502555885.png
 
Сверху Снизу