Commit: 8bf5af7bd3cec04e0076ae3ed0cd0a988393f26a
Author: Clément Foucault
Date:   Fri Nov 9 15:33:51 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB8bf5af7bd3cec04e0076ae3ed0cd0a988393f26a

UI: Make Region overlap slide instead of fade

Requested by @billreynish.
Increases the TIMESTEP to 60Hz to have smooth animation.

===================================================================

M       source/blender/editors/screen/screen_ops.c
M       source/blender/windowmanager/intern/wm_draw.c

===================================================================

diff --git a/source/blender/editors/screen/screen_ops.c 
b/source/blender/editors/screen/screen_ops.c
index 53a878bd655..9c7e18b0889 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -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)
 {
diff --git a/source/blender/windowmanager/intern/wm_draw.c 
b/source/blender/windowmanager/intern/wm_draw.c
index c8e0360ed88..d760780beb8 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to