Add TOUCH_FOCUSABLE property
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / graphics / shaders / image-visual-rounded-corner-shader.frag
index 0e2c1d8..6eacb93 100644 (file)
@@ -1,7 +1,8 @@
 INPUT mediump vec2 vTexCoord;
 INPUT mediump vec2 vPosition;
 INPUT mediump vec2 vRectSize;
-INPUT mediump float vCornerRadius;
+INPUT mediump vec2 vOptRectSize;
+INPUT mediump vec4 vCornerRadius;
 
 uniform sampler2D sTexture;
 uniform lowp vec4 uColor;
@@ -10,23 +11,35 @@ uniform lowp float preMultipliedAlpha;
 
 void main()
 {
-  mediump vec2 diff = abs( vPosition ) - vRectSize;
-  mediump float dist = length( max( diff, vec2( 0.0 ) ) ) - vCornerRadius;
+  if(abs(vPosition.x) < vOptRectSize.x && abs(vPosition.y) < vOptRectSize.y)
+  {
+    OUT_COLOR = TEXTURE(sTexture, vTexCoord) * uColor * vec4(mixColor, 1.0);
+    return;
+  }
+  mediump float radius =
+  mix(
+    mix(vCornerRadius.x, vCornerRadius.y, sign(vPosition.x) * 0.5 + 0.5),
+    mix(vCornerRadius.w, vCornerRadius.z, sign(vPosition.x) * 0.5 + 0.5),
+    sign(vPosition.y) * 0.5 + 0.5
+  );
+
+  mediump vec2 diff = abs(vPosition) - vRectSize + radius;
+  mediump float dist = length(max(diff, vec2(0.0))) - radius;
   mediump float opacity = 1.0;
-  if( dist > 1.0 )
+  if(dist > 1.0)
   {
     opacity = 0.0;
   }
-  else if( dist > -1.0 )
+  else if(dist > -1.0)
   {
-    if( min( diff.x, diff.y ) < 0.0 )
+    if(min(diff.x, diff.y) < 0.0)
     {
-      dist += min( diff.x, diff.y ) / vCornerRadius;
+      dist += min(diff.x, diff.y) / max(radius, 1.0);
     }
-    opacity = 1.0 - smoothstep( -1.0, 1.0, dist );
+    opacity = 1.0 - smoothstep(-1.0, 1.0, dist);
   }
 
-  OUT_COLOR = TEXTURE( sTexture, vTexCoord ) * uColor * vec4( mixColor, 1.0 );
+  OUT_COLOR = TEXTURE(sTexture, vTexCoord) * uColor * vec4(mixColor, 1.0);
   OUT_COLOR.a *= opacity;
-  OUT_COLOR.rgb *= mix( 1.0, opacity, preMultipliedAlpha );
+  OUT_COLOR.rgb *= mix(1.0, opacity, preMultipliedAlpha);
 }