Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Исходник Rect With Radial Gradient ImGui

Забаненный
Забаненный
Статус
Оффлайн
Регистрация
14 Июл 2019
Сообщения
1,116
Реакции
505
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
Expand Collapse Copy
void ImDrawList::AddRectRadial(const ImVec2& p_min, const ImVec2& p_max, ImU32 center, ImU32 edge, float rounding, ImU32 background, ImDrawFlags flags)
{
    rounding = ImMin(rounding, ImFabs(p_max.x - p_min.x) * (((flags & ImDrawCornerFlags_Top) == ImDrawCornerFlags_Top) || ((flags & ImDrawCornerFlags_Bot) == ImDrawCornerFlags_Bot) ? 0.5f : 1.0f) - 1.0f);
    rounding = ImMin(rounding, ImFabs(p_max.y - p_min.y) * (((flags & ImDrawCornerFlags_Left) == ImDrawCornerFlags_Left) || ((flags & ImDrawCornerFlags_Right) == ImDrawCornerFlags_Right) ? 0.5f : 1.0f) - 1.0f);

    PushClipRect(p_min, p_max);

    
    float raduis = (p_max.x - p_min.x) / 2 > (p_max.y - p_min.y) / 2 ? (p_max.x - p_min.x) / 2 * 1.5f : (p_max.y - p_min.y) / 2 * 1.5f;
    _PathArcToFastEx(ImVec2((p_min.x + p_max.x) / 2, (p_min.y + p_max.y) / 2), raduis, 0, IM_DRAWLIST_ARCFAST_SAMPLE_MAX, 0);


    const int count = _Path.Size - 1;

    unsigned int vtx_base = _VtxCurrentIdx;
    PrimReserve(count * 3, count + 1);

    const ImVec2 uv = _Data->TexUvWhitePixel;
    PrimWriteVtx(ImVec2((p_min.x + p_max.x) / 2, (p_min.y + p_max.y) / 2), uv, center);
    for (int n = 0; n < count; n++)
        PrimWriteVtx(_Path[n], uv, edge);

    for (int n = 0; n < count; n++)
    {
        PrimWriteIdx((ImDrawIdx)(vtx_base));
        PrimWriteIdx((ImDrawIdx)(vtx_base + 1 + n));
        PrimWriteIdx((ImDrawIdx)(vtx_base + 1 + ((n + 1) % count)));
    }
    _Path.Size = 0;
    PopClipRect();

    if (rounding > 0.0f)
    {
        const float rounding_tl = (flags & ImDrawCornerFlags_TopLeft) ? rounding : 0.0f;
        const float rounding_tr = (flags & ImDrawCornerFlags_TopRight) ? rounding : 0.0f;
        const float rounding_br = (flags & ImDrawCornerFlags_BotRight) ? rounding : 0.0f;
        const float rounding_bl = (flags & ImDrawCornerFlags_BotLeft) ? rounding : 0.0f;

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

        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(background);

        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(background);

        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(background);
    }
}
1663346337597.png
 
Последнее редактирование:

Похожие темы

Назад
Сверху Снизу