|
|
@ -1210,7 +1210,7 @@ void ImDrawList::AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, c |
|
|
|
PathRect(a, b, rounding, rounding_corners); |
|
|
|
PathRect(a, b, rounding, rounding_corners); |
|
|
|
PathFillConvex(col); |
|
|
|
PathFillConvex(col); |
|
|
|
int vert_end_idx = VtxBuffer.Size; |
|
|
|
int vert_end_idx = VtxBuffer.Size; |
|
|
|
ImGui::ShadeVertsLinearUV(VtxBuffer.Data + vert_start_idx, VtxBuffer.Data + vert_end_idx, a, b, uv_a, uv_b, true); |
|
|
|
ImGui::ShadeVertsLinearUV(this, vert_start_idx, vert_end_idx, a, b, uv_a, uv_b, true); |
|
|
|
|
|
|
|
|
|
|
|
if (push_texture_id) |
|
|
|
if (push_texture_id) |
|
|
|
PopTextureID(); |
|
|
|
PopTextureID(); |
|
|
@ -1258,10 +1258,12 @@ void ImDrawData::ScaleClipRects(const ImVec2& scale) |
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
// Generic linear color gradient, write to RGB fields, leave A untouched.
|
|
|
|
// Generic linear color gradient, write to RGB fields, leave A untouched.
|
|
|
|
void ImGui::ShadeVertsLinearColorGradientKeepAlpha(ImDrawVert* vert_start, ImDrawVert* vert_end, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1) |
|
|
|
void ImGui::ShadeVertsLinearColorGradientKeepAlpha(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1) |
|
|
|
{ |
|
|
|
{ |
|
|
|
ImVec2 gradient_extent = gradient_p1 - gradient_p0; |
|
|
|
ImVec2 gradient_extent = gradient_p1 - gradient_p0; |
|
|
|
float gradient_inv_length2 = 1.0f / ImLengthSqr(gradient_extent); |
|
|
|
float gradient_inv_length2 = 1.0f / ImLengthSqr(gradient_extent); |
|
|
|
|
|
|
|
ImDrawVert* vert_start = draw_list->VtxBuffer.Data + vert_start_idx; |
|
|
|
|
|
|
|
ImDrawVert* vert_end = draw_list->VtxBuffer.Data + vert_end_idx; |
|
|
|
for (ImDrawVert* vert = vert_start; vert < vert_end; vert++) |
|
|
|
for (ImDrawVert* vert = vert_start; vert < vert_end; vert++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
float d = ImDot(vert->pos - gradient_p0, gradient_extent); |
|
|
|
float d = ImDot(vert->pos - gradient_p0, gradient_extent); |
|
|
@ -1274,7 +1276,7 @@ void ImGui::ShadeVertsLinearColorGradientKeepAlpha(ImDrawVert* vert_start, ImDra |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Distribute UV over (a, b) rectangle
|
|
|
|
// Distribute UV over (a, b) rectangle
|
|
|
|
void ImGui::ShadeVertsLinearUV(ImDrawVert* vert_start, ImDrawVert* vert_end, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp) |
|
|
|
void ImGui::ShadeVertsLinearUV(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp) |
|
|
|
{ |
|
|
|
{ |
|
|
|
const ImVec2 size = b - a; |
|
|
|
const ImVec2 size = b - a; |
|
|
|
const ImVec2 uv_size = uv_b - uv_a; |
|
|
|
const ImVec2 uv_size = uv_b - uv_a; |
|
|
@ -1282,11 +1284,12 @@ void ImGui::ShadeVertsLinearUV(ImDrawVert* vert_start, ImDrawVert* vert_end, con |
|
|
|
size.x != 0.0f ? (uv_size.x / size.x) : 0.0f, |
|
|
|
size.x != 0.0f ? (uv_size.x / size.x) : 0.0f, |
|
|
|
size.y != 0.0f ? (uv_size.y / size.y) : 0.0f); |
|
|
|
size.y != 0.0f ? (uv_size.y / size.y) : 0.0f); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ImDrawVert* vert_start = draw_list->VtxBuffer.Data + vert_start_idx; |
|
|
|
|
|
|
|
ImDrawVert* vert_end = draw_list->VtxBuffer.Data + vert_end_idx; |
|
|
|
if (clamp) |
|
|
|
if (clamp) |
|
|
|
{ |
|
|
|
{ |
|
|
|
const ImVec2 min = ImMin(uv_a, uv_b); |
|
|
|
const ImVec2 min = ImMin(uv_a, uv_b); |
|
|
|
const ImVec2 max = ImMax(uv_a, uv_b); |
|
|
|
const ImVec2 max = ImMax(uv_a, uv_b); |
|
|
|
|
|
|
|
|
|
|
|
for (ImDrawVert* vertex = vert_start; vertex < vert_end; ++vertex) |
|
|
|
for (ImDrawVert* vertex = vert_start; vertex < vert_end; ++vertex) |
|
|
|
vertex->uv = ImClamp(uv_a + ImMul(ImVec2(vertex->pos.x, vertex->pos.y) - a, scale), min, max); |
|
|
|
vertex->uv = ImClamp(uv_a + ImMul(ImVec2(vertex->pos.x, vertex->pos.y) - a, scale), min, max); |
|
|
|
} |
|
|
|
} |
|
|
|