[NUI] Reduce InnerShadow Visual Defect
authorEunki Hong <eunkiki.hong@samsung.com>
Sat, 7 Jun 2025 02:14:56 +0000 (11:14 +0900)
committerbshsqa <32317749+bshsqa@users.noreply.github.com>
Tue, 10 Jun 2025 11:48:18 +0000 (20:48 +0900)
Let we extents inner shadow's shadow width to reduce visual defect, and reduce visual defects.

Signed-off-by: Eunki Hong <eunkiki.hong@samsung.com>
src/Tizen.NUI/src/public/ViewProperty/InnerShadow.cs
test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/InnerShadowSample.cs

index 2a959da8086f768f5ff32e5ff8ec82def58608c5..5fab9694648e08efdf023c35b254c82d62fa4552 100755 (executable)
@@ -148,24 +148,25 @@ namespace Tizen.NUI
         /// </summary>
         internal static float CalculateShadowWidthByExtents(UIExtents insetExtents, float blurRadius)
         {
-            return Math.Max(insetExtents.Start, Math.Max(insetExtents.End, Math.Max(insetExtents.Top, insetExtents.Bottom))) + blurRadius;
+            // Extra margin due to shadow alpha blending.
+            const float margin = 1.0f;
+            return Math.Max(insetExtents.Start, Math.Max(insetExtents.End, Math.Max(insetExtents.Top, insetExtents.Bottom))) + (blurRadius + margin) * 2.0f;
         }
         internal static Vector2 CalculateOffsetByExtents(UIExtents insetExtents)
         {
             // Offset from center of view.
             return new Vector2((insetExtents.Start - insetExtents.End) * 0.5f, (insetExtents.Top - insetExtents.Bottom) * 0.5f);
         }
-        internal static Vector2 CalculateExtraSizeByExtents(UIExtents insetExtents, float shadowWidth)
+        internal static Vector2 CalculateExtraSizeByExtents(UIExtents insetExtents, float shadowWidth, float blurRadius)
         {
-            const float margin = 0.5f;
-            return new Vector2(shadowWidth * 2.0f - insetExtents.Start - insetExtents.End + 2.0f * margin, shadowWidth * 2.0f - insetExtents.Top - insetExtents.Bottom + 2.0f * margin);
+            return new Vector2(shadowWidth * 2.0f - insetExtents.Start - insetExtents.End - blurRadius * 2.0f, shadowWidth * 2.0f - insetExtents.Top - insetExtents.Bottom - blurRadius * 2.0f);
         }
 
         internal static InnerShadow GenerateInnerShadowByExtents(UIExtents insetExtents, float blurRadius, Color color, ColorVisualCutoutPolicyType cutoutPolicy)
         {
             var shadowWidth = CalculateShadowWidthByExtents(insetExtents, blurRadius);
             var offset = CalculateOffsetByExtents(insetExtents);
-            var extents = CalculateExtraSizeByExtents(insetExtents, shadowWidth);
+            var extents = CalculateExtraSizeByExtents(insetExtents, shadowWidth, blurRadius);
 
             return new InnerShadow(shadowWidth, blurRadius, cutoutPolicy, color, offset, extents);
         }
index 59ad96d7887e92840ee3a89d4b0feab33cb2557d..96ecaabc45d70c0c7f4844b016b075cf9bf6bb2c 100755 (executable)
@@ -17,10 +17,11 @@ namespace Tizen.NUI.Samples
         };
 
         const float viewGap = 24.0f;
-        const float defaultCornerRadius = 16.0f / 320.0f;
+        const float defaultCornerRadius = 16.0f;
         const float defaultViewSizeWidth = 400.0f;
         const float defaultViewSizeHeight = 200.0f;
         const float defaultBorderlineWidth = 10.0f;
+        const float defaultInnerShadowExtents = 20.0f;
         const float defaultInnerShadowBlurRadius = 16.0f;
         const float defaultShadowBlurRadius = 24.0f;
 
@@ -32,17 +33,18 @@ namespace Tizen.NUI.Samples
         static private readonly UIExtents[] shadowExtentsList = new UIExtents[]
         {
             // begin, end, top, bottom
-            new UIExtents(defaultBorderlineWidth * 2.0f, 0.0f, defaultBorderlineWidth * 2.0f, 0.0f),
-            new UIExtents(0.0f, defaultBorderlineWidth * 2.0f, 0.0f, defaultBorderlineWidth * 2.0f),
-            new UIExtents(defaultBorderlineWidth * 2.0f, 0.0f),
-            new UIExtents(0.0f, defaultBorderlineWidth * 2.0f),
-            new UIExtents(defaultBorderlineWidth * 2.0f),
-            new UIExtents(defaultBorderlineWidth * 4.0f),
-            new UIExtents(defaultBorderlineWidth * 4.0f, 0.0f, 0.0f, 0.0f),
-            new UIExtents(0.0f, defaultBorderlineWidth * 4.0f, 0.0f, 0.0f),
-            new UIExtents(0.0f, 0.0f, defaultBorderlineWidth * 4.0f, 0.0f),
-            new UIExtents(0.0f, 0.0f, 0.0f, defaultBorderlineWidth * 4.0f),
+            new UIExtents(defaultInnerShadowExtents, -defaultInnerShadowExtents, defaultInnerShadowExtents, -defaultInnerShadowExtents),
+            new UIExtents(-defaultInnerShadowExtents, defaultInnerShadowExtents, -defaultInnerShadowExtents, defaultInnerShadowExtents),
+            new UIExtents(defaultInnerShadowExtents, -defaultInnerShadowExtents),
+            new UIExtents(-defaultInnerShadowExtents, defaultInnerShadowExtents),
+            new UIExtents(defaultInnerShadowExtents),
+            new UIExtents(defaultInnerShadowExtents * 2.0f),
+            new UIExtents(defaultInnerShadowExtents * 2.0f, 0.0f, 0.0f, 0.0f),
+            new UIExtents(0.0f, defaultInnerShadowExtents * 2.0f, 0.0f, 0.0f),
+            new UIExtents(0.0f, 0.0f, defaultInnerShadowExtents * 2.0f, 0.0f),
+            new UIExtents(0.0f, 0.0f, 0.0f, defaultInnerShadowExtents * 2.0f),
             new UIExtents(0.0f),
+            new UIExtents(-defaultInnerShadowBlurRadius * 0.5f),
         };
 
         uint extentsIndex;
@@ -99,7 +101,7 @@ namespace Tizen.NUI.Samples
                 else if(e.Key.KeyPressedName == "3")
                 {
                     cornerRadius += defaultCornerRadius;
-                    if(cornerRadius > 0.5001f)
+                    if(cornerRadius > 160.0001f)
                     {
                         cornerRadius = defaultCornerRadius;
                         cornerSquareness = 0.6f - cornerSquareness;
@@ -181,7 +183,7 @@ namespace Tizen.NUI.Samples
                 BorderlineOffset = -0.875f,
 
                 CornerRadius = cornerRadius,
-                CornerRadiusPolicy = VisualTransformPolicyType.Relative,
+                CornerRadiusPolicy = VisualTransformPolicyType.Absolute,
                 CornerSquareness = cornerSquareness,
             };