Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/interface/interface_draw.c')
-rw-r--r--source/blender/editors/interface/interface_draw.c174
1 files changed, 84 insertions, 90 deletions
diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c
index 05b6fcdded1..e45a5fc61c6 100644
--- a/source/blender/editors/interface/interface_draw.c
+++ b/source/blender/editors/interface/interface_draw.c
@@ -106,14 +106,30 @@ void UI_draw_roundbox_4fv_ex(const rctf *rect,
.color_inner1[1] = inner1 ? inner1[1] : 0.0f,
.color_inner1[2] = inner1 ? inner1[2] : 0.0f,
.color_inner1[3] = inner1 ? inner1[3] : 0.0f,
- .color_inner2[0] = inner2 ? inner2[0] : inner1 ? inner1[0] : 0.0f,
- .color_inner2[1] = inner2 ? inner2[1] : inner1 ? inner1[1] : 0.0f,
- .color_inner2[2] = inner2 ? inner2[2] : inner1 ? inner1[2] : 0.0f,
- .color_inner2[3] = inner2 ? inner2[3] : inner1 ? inner1[3] : 0.0f,
- .color_outline[0] = outline ? outline[0] : inner1 ? inner1[0] : 0.0f,
- .color_outline[1] = outline ? outline[1] : inner1 ? inner1[1] : 0.0f,
- .color_outline[2] = outline ? outline[2] : inner1 ? inner1[2] : 0.0f,
- .color_outline[3] = outline ? outline[3] : inner1 ? inner1[3] : 0.0f,
+ .color_inner2[0] = inner2 ? inner2[0] :
+ inner1 ? inner1[0] :
+ 0.0f,
+ .color_inner2[1] = inner2 ? inner2[1] :
+ inner1 ? inner1[1] :
+ 0.0f,
+ .color_inner2[2] = inner2 ? inner2[2] :
+ inner1 ? inner1[2] :
+ 0.0f,
+ .color_inner2[3] = inner2 ? inner2[3] :
+ inner1 ? inner1[3] :
+ 0.0f,
+ .color_outline[0] = outline ? outline[0] :
+ inner1 ? inner1[0] :
+ 0.0f,
+ .color_outline[1] = outline ? outline[1] :
+ inner1 ? inner1[1] :
+ 0.0f,
+ .color_outline[2] = outline ? outline[2] :
+ inner1 ? inner1[2] :
+ 0.0f,
+ .color_outline[3] = outline ? outline[3] :
+ inner1 ? inner1[3] :
+ 0.0f,
.shade_dir = shade_dir,
.alpha_discard = 1.0f,
};
@@ -162,35 +178,6 @@ void UI_draw_roundbox_4fv(const rctf *rect, bool filled, float rad, const float
UI_draw_roundbox_4fv_ex(rect, (filled) ? col : NULL, NULL, 1.0f, col, U.pixelsize, rad);
}
-/* linear horizontal shade within button or in outline */
-/* view2d scrollers use it */
-void UI_draw_roundbox_shade_x(
- const rctf *rect, bool filled, float rad, float shadetop, float shadedown, const float col[4])
-{
- float inner1[4] = {0.0f, 0.0f, 0.0f, 0.0f};
- float inner2[4] = {0.0f, 0.0f, 0.0f, 0.0f};
- float outline[4];
-
- if (filled) {
- inner1[0] = min_ff(1.0f, col[0] + shadetop);
- inner1[1] = min_ff(1.0f, col[1] + shadetop);
- inner1[2] = min_ff(1.0f, col[2] + shadetop);
- inner1[3] = 1.0f;
- inner2[0] = max_ff(0.0f, col[0] + shadedown);
- inner2[1] = max_ff(0.0f, col[1] + shadedown);
- inner2[2] = max_ff(0.0f, col[2] + shadedown);
- inner2[3] = 1.0f;
- }
-
- /* TODO: non-filled box don't have gradients. Just use middle color. */
- outline[0] = clamp_f(col[0] + shadetop + shadedown, 0.0f, 1.0f);
- outline[1] = clamp_f(col[1] + shadetop + shadedown, 0.0f, 1.0f);
- outline[2] = clamp_f(col[2] + shadetop + shadedown, 0.0f, 1.0f);
- outline[3] = clamp_f(col[3] + shadetop + shadedown, 0.0f, 1.0f);
-
- UI_draw_roundbox_4fv_ex(rect, inner1, inner2, 1.0f, outline, U.pixelsize, rad);
-}
-
void UI_draw_text_underline(int pos_x, int pos_y, int len, int height, const float color[4])
{
const int ofs_y = 4 * U.pixelsize;
@@ -229,7 +216,7 @@ void ui_draw_but_TAB_outline(const rcti *rect,
{0.98, 0.805},
};
- /* mult */
+ /* Multiply. */
for (a = 0; a < 4; a++) {
mul_v2_fl(vec[a], rad);
}
@@ -592,7 +579,7 @@ static void waveform_draw_one(float *waveform, int nbr, const float col[3])
GPU_vertbuf_attr_fill(vbo, pos_id, waveform);
- /* TODO store the GPUBatch inside the scope */
+ /* TODO: store the #GPUBatch inside the scope. */
GPUBatch *batch = GPU_batch_create_ex(GPU_PRIM_POINTS, vbo, NULL, GPU_BATCH_OWNS_VBO);
GPU_batch_program_set_builtin(batch, GPU_SHADER_2D_UNIFORM_COLOR);
GPU_batch_uniform_4f(batch, "color", col[0], col[1], col[2], 1.0f);
@@ -1844,13 +1831,13 @@ void ui_draw_but_CURVEPROFILE(ARegion *region,
/* Also add the last points on the right and bottom edges to close off the fill polygon. */
const bool add_left_tri = profile->view_rect.xmin < 0.0f;
const bool add_bottom_tri = profile->view_rect.ymin < 0.0f;
- uint tot_points = (uint)PROF_TABLE_LEN(profile->path_len) + 1 + add_left_tri + add_bottom_tri;
+ int tot_points = BKE_curveprofile_table_size(profile) + 1 + add_left_tri + add_bottom_tri;
const uint tot_triangles = tot_points - 2;
/* Create array of the positions of the table's points. */
float(*table_coords)[2] = MEM_mallocN(sizeof(*table_coords) * tot_points, "table x coords");
- for (uint i = 0; i < (uint)PROF_TABLE_LEN(profile->path_len);
- i++) { /* Only add the points from the table here. */
+ for (uint i = 0; i < (uint)BKE_curveprofile_table_size(profile); i++) {
+ /* Only add the points from the table here. */
table_coords[i][0] = pts[i].x;
table_coords[i][1] = pts[i].y;
}
@@ -1887,44 +1874,50 @@ void ui_draw_but_CURVEPROFILE(ARegion *region,
}
/* Calculate the table point indices of the triangles for the profile's fill. */
- uint(*tri_indices)[3] = MEM_mallocN(sizeof(*tri_indices) * tot_triangles, "return tri indices");
- BLI_polyfill_calc(table_coords, tot_points, -1, tri_indices);
+ if (tot_triangles > 0) {
+ uint(*tri_indices)[3] = MEM_mallocN(sizeof(*tri_indices) * tot_triangles, __func__);
+ BLI_polyfill_calc(table_coords, tot_points, -1, tri_indices);
- /* Draw the triangles for the profile fill. */
- immUniformColor3ubvAlpha((const uchar *)wcol->item, 128);
- GPU_blend(GPU_BLEND_ALPHA);
- GPU_polygon_smooth(false);
- immBegin(GPU_PRIM_TRIS, 3 * tot_triangles);
- for (uint i = 0; i < tot_triangles; i++) {
- for (uint j = 0; j < 3; j++) {
- uint *tri = tri_indices[i];
- fx = rect->xmin + zoomx * (table_coords[tri[j]][0] - offsx);
- fy = rect->ymin + zoomy * (table_coords[tri[j]][1] - offsy);
- immVertex2f(pos, fx, fy);
+ /* Draw the triangles for the profile fill. */
+ immUniformColor3ubvAlpha((const uchar *)wcol->item, 128);
+ GPU_blend(GPU_BLEND_ALPHA);
+ GPU_polygon_smooth(false);
+ immBegin(GPU_PRIM_TRIS, 3 * tot_triangles);
+ for (uint i = 0; i < tot_triangles; i++) {
+ for (uint j = 0; j < 3; j++) {
+ uint *tri = tri_indices[i];
+ fx = rect->xmin + zoomx * (table_coords[tri[j]][0] - offsx);
+ fy = rect->ymin + zoomy * (table_coords[tri[j]][1] - offsy);
+ immVertex2f(pos, fx, fy);
+ }
}
+ immEnd();
+ MEM_freeN(tri_indices);
}
- immEnd();
- MEM_freeN(tri_indices);
/* Draw the profile's path so the edge stands out a bit. */
tot_points -= (add_left_tri + add_left_tri);
- GPU_line_width(1.0f);
- immUniformColor3ubvAlpha((const uchar *)wcol->item, 255);
- GPU_line_smooth(true);
- immBegin(GPU_PRIM_LINE_STRIP, tot_points - 1);
- for (uint i = 0; i < tot_points - 1; i++) {
- fx = rect->xmin + zoomx * (table_coords[i][0] - offsx);
- fy = rect->ymin + zoomy * (table_coords[i][1] - offsy);
- immVertex2f(pos, fx, fy);
+ const int edges_len = tot_points - 1;
+ if (edges_len > 0) {
+ GPU_line_width(1.0f);
+ immUniformColor3ubvAlpha((const uchar *)wcol->item, 255);
+ GPU_line_smooth(true);
+ immBegin(GPU_PRIM_LINE_STRIP, tot_points);
+ for (int i = 0; i < tot_points; i++) {
+ fx = rect->xmin + zoomx * (table_coords[i][0] - offsx);
+ fy = rect->ymin + zoomy * (table_coords[i][1] - offsy);
+ immVertex2f(pos, fx, fy);
+ }
+ immEnd();
}
- immEnd();
- MEM_freeN(table_coords);
+
+ MEM_SAFE_FREE(table_coords);
/* Draw the handles for the selected control points. */
pts = profile->path;
- tot_points = (uint)profile->path_len;
+ const int path_len = tot_points = (uint)profile->path_len;
int selected_free_points = 0;
- for (uint i = 0; i < tot_points; i++) {
+ for (int i = 0; i < path_len; i++) {
if (point_draw_handles(&pts[i])) {
selected_free_points++;
}
@@ -1936,7 +1929,7 @@ void ui_draw_but_CURVEPROFILE(ARegion *region,
GPU_line_smooth(true);
immBegin(GPU_PRIM_LINES, selected_free_points * 4);
float ptx, pty;
- for (uint i = 0; i < tot_points; i++) {
+ for (int i = 0; i < path_len; i++) {
if (point_draw_handles(&pts[i])) {
ptx = rect->xmin + zoomx * (pts[i].x - offsx);
pty = rect->ymin + zoomy * (pts[i].y - offsy);
@@ -1980,16 +1973,18 @@ void ui_draw_but_CURVEPROFILE(ARegion *region,
/* Draw the control points. */
GPU_line_smooth(false);
- GPU_blend(GPU_BLEND_NONE);
- GPU_point_size(max_ff(3.0f, min_ff(UI_DPI_FAC / but->block->aspect * 5.0f, 5.0f)));
- immBegin(GPU_PRIM_POINTS, tot_points);
- for (uint i = 0; i < tot_points; i++) {
- fx = rect->xmin + zoomx * (pts[i].x - offsx);
- fy = rect->ymin + zoomy * (pts[i].y - offsy);
- immAttr4fv(col, (pts[i].flag & PROF_SELECT) ? color_vert_select : color_vert);
- immVertex2f(pos, fx, fy);
+ if (path_len > 0) {
+ GPU_blend(GPU_BLEND_NONE);
+ GPU_point_size(max_ff(3.0f, min_ff(UI_DPI_FAC / but->block->aspect * 5.0f, 5.0f)));
+ immBegin(GPU_PRIM_POINTS, path_len);
+ for (int i = 0; i < path_len; i++) {
+ fx = rect->xmin + zoomx * (pts[i].x - offsx);
+ fy = rect->ymin + zoomy * (pts[i].y - offsy);
+ immAttr4fv(col, (pts[i].flag & PROF_SELECT) ? color_vert_select : color_vert);
+ immVertex2f(pos, fx, fy);
+ }
+ immEnd();
}
- immEnd();
/* Draw the handle points. */
if (selected_free_points > 0) {
@@ -1997,7 +1992,7 @@ void ui_draw_but_CURVEPROFILE(ARegion *region,
GPU_blend(GPU_BLEND_NONE);
GPU_point_size(max_ff(2.0f, min_ff(UI_DPI_FAC / but->block->aspect * 4.0f, 4.0f)));
immBegin(GPU_PRIM_POINTS, selected_free_points * 2);
- for (uint i = 0; i < tot_points; i++) {
+ for (int i = 0; i < path_len; i++) {
if (point_draw_handles(&pts[i])) {
fx = rect->xmin + zoomx * (pts[i].h1_loc[0] - offsx);
fy = rect->ymin + zoomy * (pts[i].h1_loc[1] - offsy);
@@ -2015,11 +2010,11 @@ void ui_draw_but_CURVEPROFILE(ARegion *region,
/* Draw the sampled points in addition to the control points if they have been created */
pts = profile->segments;
- tot_points = (uint)profile->segments_len;
- if (tot_points > 0 && pts) {
+ const int segments_len = (uint)profile->segments_len;
+ if (segments_len > 0 && pts) {
GPU_point_size(max_ff(2.0f, min_ff(UI_DPI_FAC / but->block->aspect * 3.0f, 3.0f)));
- immBegin(GPU_PRIM_POINTS, tot_points);
- for (uint i = 0; i < tot_points; i++) {
+ immBegin(GPU_PRIM_POINTS, segments_len);
+ for (int i = 0; i < segments_len; i++) {
fx = rect->xmin + zoomx * (pts[i].x - offsx);
fy = rect->ymin + zoomy * (pts[i].y - offsy);
immAttr4fv(col, color_sample);
@@ -2223,9 +2218,8 @@ void ui_draw_but_TRACKPREVIEW(ARegion *UNUSED(region),
/* ****************************************************** */
-/* TODO: high quality UI drop shadows using GLSL shader and single draw call
- * would replace / modify the following 3 functions - merwin
- */
+/* TODO(merwin): high quality UI drop shadows using GLSL shader and single draw call
+ * would replace / modify the following 3 functions. */
static void ui_shadowbox(const rctf *rect, uint pos, uint color, float shadsize, uchar alpha)
{
@@ -2266,7 +2260,7 @@ static void ui_shadowbox(const rctf *rect, uint pos, uint color, float shadsize,
immVertex2fv(pos, v3);
/* corner shape */
- /* immAttr4ub(color, 0, 0, 0, alpha); */ /* Not needed, done above in previous tri */
+ // immAttr4ub(color, 0, 0, 0, alpha); /* Not needed, done above in previous tri. */
immVertex2fv(pos, v3);
immAttr4ub(color, 0, 0, 0, 0);
immVertex2fv(pos, v4);
@@ -2278,7 +2272,7 @@ static void ui_shadowbox(const rctf *rect, uint pos, uint color, float shadsize,
immVertex2fv(pos, v3);
/* bottom quad */
- /* immAttr4ub(color, 0, 0, 0, alpha); */ /* Not needed, done above in previous tri */
+ // immAttr4ub(color, 0, 0, 0, alpha); /* Not needed, done above in previous tri. */
immVertex2fv(pos, v3);
immAttr4ub(color, 0, 0, 0, 0);
immVertex2fv(pos, v6);
@@ -2350,7 +2344,7 @@ void ui_draw_dropshadow(
true, rct->xmin - a, rct->ymin - a, rct->xmax + a, rct->ymax - 10.0f + a, rad + a, color);
#endif
/* Compute final visibility to match old method result. */
- /* TODO we could just find a better fit function inside the shader instead of this. */
+ /* TODO: we could just find a better fit function inside the shader instead of this. */
visibility = visibility * (1.0f - calpha);
calpha += dalpha;
}