Тьомчик
-
Автор темы
- #1
Как можна сделать это плавней чтобы она не прям так выделяло смену цвета.
UPD: Я про
UPD: Я про
код:
void ImDrawList::AddRectFilledMultiColor(const ImVec2& p_min, const ImVec2& p_max, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left, float rounding, ImDrawFlags flags)
{
if (((col_upr_left | col_upr_right | col_bot_right | col_bot_left) & IM_COL32_A_MASK) == 0)
return;
flags = FixRectCornerFlags(flags);
rounding = ImMin(rounding, ImFabs(p_max.x - p_min.x) * (((flags & ImDrawFlags_RoundCornersTop) == ImDrawFlags_RoundCornersTop) || ((flags & ImDrawFlags_RoundCornersBottom) == ImDrawFlags_RoundCornersBottom) ? 0.5f : 1.0f) - 1.0f);
rounding = ImMin(rounding, ImFabs(p_max.y - p_min.y) * (((flags & ImDrawFlags_RoundCornersLeft) == ImDrawFlags_RoundCornersLeft) || ((flags & ImDrawFlags_RoundCornersRight) == ImDrawFlags_RoundCornersRight) ? 0.5f : 1.0f) - 1.0f);
const int size_before = VtxBuffer.Size;
AddRectFilled(p_min, p_max, IM_COL32_WHITE, rounding, flags);
const int size_after = VtxBuffer.Size;
ImVec4 col_upr_left_f = ImGui::ColorConvertU32ToFloat4(col_upr_left);
ImVec4 col_bot_left_f = ImGui::ColorConvertU32ToFloat4(col_bot_left);
ImVec4 col_upr_right_f = ImGui::ColorConvertU32ToFloat4(col_upr_right);
ImVec4 col_bot_right_f = ImGui::ColorConvertU32ToFloat4(col_bot_right);
for (int i = size_before; i < size_after; i++) {
ImDrawVert* vert = VtxBuffer.Data + i;
float x_ratio = ImSaturate((vert->pos.x - p_min.x) / (p_max.x - p_min.x));
float y_ratio = ImSaturate((vert->pos.y - p_min.y) / (p_max.y - p_min.y));
ImVec4 top_color = ImLerp(col_upr_left_f, col_upr_right_f, x_ratio);
ImVec4 bottom_color = ImLerp(col_bot_left_f, col_bot_right_f, x_ratio);
ImVec4 final_color = ImLerp(top_color, bottom_color, y_ratio);
final_color = final_color * ImGui::ColorConvertU32ToFloat4(vert->col);
vert->col = ImColor(final_color);
}
}
Последнее редактирование: