UI: Make Region overlap slide instead of fade

Requested by @billreynish.
Increases the TIMESTEP to 60Hz to have smooth animation.
This commit is contained in:
Clément Foucault 2018-11-09 15:33:51 +01:00
parent 36e6a41f6f
commit 8bf5af7bd3
2 changed files with 29 additions and 3 deletions

View File

@ -4512,7 +4512,7 @@ typedef struct RegionAlphaInfo {
} RegionAlphaInfo;
#define TIMEOUT 0.1f
#define TIMESTEP 0.05f
#define TIMESTEP (1.0f / 60.0f)
float ED_region_blend_alpha(ARegion *ar)
{

View File

@ -461,9 +461,35 @@ void wm_draw_region_blend(ARegion *ar, int view, bool blend)
GPUShader *shader = GPU_shader_get_builtin_shader(GPU_SHADER_2D_IMAGE_RECT_COLOR);
GPU_shader_bind(shader);
rcti rect_geo = ar->winrct;
rect_geo.xmax += 1;
rect_geo.ymax += 1;
rctf rect_tex;
rect_tex.xmin = halfx;
rect_tex.ymin = halfy;
rect_tex.xmax = 1.0f + halfx;
rect_tex.ymax = 1.0f + halfy;
float alpha_easing = 1.0f - alpha;
alpha_easing = 1.0f - alpha_easing * alpha_easing;
/* Slide vertical panels */
float ofs_x = BLI_rcti_size_x(&ar->winrct) * (1.0f - alpha_easing);
if (ar->alignment == RGN_ALIGN_RIGHT) {
rect_geo.xmin += ofs_x;
rect_tex.xmax *= alpha_easing;
alpha = 1.0f;
}
else if (ar->alignment == RGN_ALIGN_LEFT) {
rect_geo.xmax -= ofs_x;
rect_tex.xmin += 1.0f - alpha_easing;
alpha = 1.0f;
}
glUniform1i(GPU_shader_get_uniform(shader, "image"), 0);
glUniform4f(GPU_shader_get_uniform(shader, "rect_icon"), halfx, halfy, 1.0f + halfx, 1.0f + halfy);
glUniform4f(GPU_shader_get_uniform(shader, "rect_geom"), ar->winrct.xmin, ar->winrct.ymin, ar->winrct.xmax + 1, ar->winrct.ymax + 1);
glUniform4f(GPU_shader_get_uniform(shader, "rect_icon"), rect_tex.xmin, rect_tex.ymin, rect_tex.xmax, rect_tex.ymax);
glUniform4f(GPU_shader_get_uniform(shader, "rect_geom"), rect_geo.xmin, rect_geo.ymin, rect_geo.xmax, rect_geo.ymax);
glUniform4f(GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_COLOR), alpha, alpha, alpha, alpha);
GPU_draw_primitive(GPU_PRIM_TRI_STRIP, 4);