C++ Advanced RenderFrame for IMGUI

Тьомчик
Пользователь
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
702
Реакции[?]
148
Поинты[?]
56K
Сделал для себя делюсь с вами, удобная вещь.
Тема кринжовенькая но все же.

imgui_internal.h:
IMGUI_API void RenderAdvancedFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_color, ImU32 dropshadow_fill_color = ImColor(0, 0, 0, 255), ImU32 border_color = ImColor(0, 0, 0, 255), ImU32 border_color_shadow = ImColor(0, 0, 0, 255), bool dropshadow = false, bool border = false, bool border_shadow = false, int dropshadow_slide_position_x = 0, int dropshadow_slide_position_y = 0, int dropshadow_position_x = 1, int dropshadow_position_y = 1, int border_size = 1, int border_shadow_size = 1, float rounding = 10.0f, float dropshadow_rounding = 10.0f, float border_rounding = 10.0f, float border_shadow_rounding = 10.0f);
imgui.cpp:
void ImGui::RenderAdvancedFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_color, ImU32 dropshadow_fill_color, ImU32 border_color, ImU32 border_color_shadow, bool dropshadow, bool border, bool border_shadow, int dropshadow_slide_position_x, int dropshadow_slide_position_y, int dropshadow_position_x, int dropshadow_position_y, int border_size, int border_shadow_size, float rounding, float dropshadow_rounding, float border_rounding, float border_shadow_rounding)
{
    ImGuiContext& g = *GImGui;
    ImGuiWindow* window = g.CurrentWindow;

    if (dropshadow)
    {
        window->DrawList->AddRectFilled(p_min + ImVec2(dropshadow_slide_position_x, dropshadow_slide_position_y), p_max + ImVec2(dropshadow_position_x, dropshadow_position_y), dropshadow_fill_color, dropshadow_rounding);
    }

    window->DrawList->AddRectFilled(p_min, p_max, fill_color, rounding);

    if (border && border_size > 0.0f)
    {
        window->DrawList->AddRect(p_min, p_max, border_color, border_rounding, 0, border_size);

        if (border_shadow && border_shadow_size > 0.0f)
        {
            window->DrawList->AddRect(p_min + ImVec2(1, 1), p_max + ImVec2(1, 1), border_color_shadow, border_shadow_rounding, 0, border_shadow_size);
        }
    }
}
 
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,970
Реакции[?]
958
Поинты[?]
19K
Сделал для себя делюсь с вами, удобная вещь.
Тема кринжовенькая но все же.

imgui_internal.h:
IMGUI_API void RenderAdvancedFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_color, ImU32 dropshadow_fill_color = ImColor(0, 0, 0, 255), ImU32 border_color = ImColor(0, 0, 0, 255), ImU32 border_color_shadow = ImColor(0, 0, 0, 255), bool dropshadow = false, bool border = false, bool border_shadow = false, int dropshadow_slide_position_x = 0, int dropshadow_slide_position_y = 0, int dropshadow_position_x = 1, int dropshadow_position_y = 1, int border_size = 1, int border_shadow_size = 1, float rounding = 10.0f, float dropshadow_rounding = 10.0f, float border_rounding = 10.0f, float border_shadow_rounding = 10.0f);
imgui.cpp:
void ImGui::RenderAdvancedFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_color, ImU32 dropshadow_fill_color, ImU32 border_color, ImU32 border_color_shadow, bool dropshadow, bool border, bool border_shadow, int dropshadow_slide_position_x, int dropshadow_slide_position_y, int dropshadow_position_x, int dropshadow_position_y, int border_size, int border_shadow_size, float rounding, float dropshadow_rounding, float border_rounding, float border_shadow_rounding)
{
    ImGuiContext& g = *GImGui;
    ImGuiWindow* window = g.CurrentWindow;

    if (dropshadow)
    {
        window->DrawList->AddRectFilled(p_min + ImVec2(dropshadow_slide_position_x, dropshadow_slide_position_y), p_max + ImVec2(dropshadow_position_x, dropshadow_position_y), dropshadow_fill_color, dropshadow_rounding);
    }

    window->DrawList->AddRectFilled(p_min, p_max, fill_color, rounding);

    if (border && border_size > 0.0f)
    {
        window->DrawList->AddRect(p_min, p_max, border_color, border_rounding, 0, border_size);

        if (border_shadow && border_shadow_size > 0.0f)
        {
            window->DrawList->AddRect(p_min + ImVec2(1, 1), p_max + ImVec2(1, 1), border_color_shadow, border_shadow_rounding, 0, border_shadow_size);
        }
    }
}
зачем вся тема, если существует push/pop color/var, а сам цвет филла, можно в аргументах задать
да и рисовать тени при помощи залитых ректов как-то тупо
 
Сверху Снизу