[NUI] Temporal revert for Animatable View corner radius
authorjmm <j0064423.lee@samsung.com>
Wed, 14 May 2025 05:43:34 +0000 (14:43 +0900)
committerWoochan <48237284+lwc0917@users.noreply.github.com>
Thu, 22 May 2025 05:52:09 +0000 (14:52 +0900)
src/Tizen.NUI/src/public/BaseComponents/ImageView.cs
src/Tizen.NUI/src/public/BaseComponents/LottieAnimationView.cs
src/Tizen.NUI/src/public/BaseComponents/View.cs
src/Tizen.NUI/src/public/BaseComponents/ViewBindableProperty.cs
src/Tizen.NUI/src/public/BaseComponents/ViewInternal.cs
src/Tizen.NUI/src/public/BaseComponents/ViewLiteProperty.cs
src/Tizen.NUI/src/public/ViewProperty/BackgroundExtraData.cs
src/Tizen.NUI/src/public/WebView/WebView.cs

index d0fb09eb4b8e0663f8840d31bbb225c9a5063cbb..0fbf370dcd66fc377ad28c19cdd8e177e78e6bdf 100755 (executable)
@@ -2232,6 +2232,28 @@ namespace Tizen.NUI.BaseComponents
             return ret;
         }
 
+        [Obsolete("Do not use this, that is deprecated in API13.")]
+        internal override void ApplyCornerRadius()
+        {
+            base.ApplyCornerRadius();
+
+            if (backgroundExtraData == null) return;
+
+            // Update corner radius properties to image by ActionUpdateProperty
+            if (backgroundExtraDataUpdatedFlag.HasFlag(BackgroundExtraDataUpdatedFlag.ContentsCornerRadius))
+            {
+                if (backgroundExtraData.CornerRadius != null)
+                {
+                    _ = Interop.View.InternalUpdateVisualPropertyVector4(this.SwigCPtr, ImageView.Property.IMAGE, Visual.Property.CornerRadius, Vector4.getCPtr(backgroundExtraData.CornerRadius));
+                }
+                if (backgroundExtraData.CornerSquareness != null)
+                {
+                    _ = Interop.View.InternalUpdateVisualPropertyVector4(this.SwigCPtr, ImageView.Property.IMAGE, Visual.Property.CornerSquareness, Vector4.getCPtr(backgroundExtraData.CornerSquareness));
+                }
+                _ = Interop.View.InternalUpdateVisualPropertyInt(this.SwigCPtr, ImageView.Property.IMAGE, Visual.Property.CornerRadiusPolicy, (int)backgroundExtraData.CornerRadiusPolicy);
+            }
+        }
+
         internal ResourceLoadingStatusType GetResourceStatus()
         {
             return (ResourceLoadingStatusType)Interop.View.GetVisualResourceStatus(this.SwigCPtr, Property.IMAGE);
@@ -2527,6 +2549,20 @@ namespace Tizen.NUI.BaseComponents
                 }
             }
 
+            if (backgroundExtraData != null && backgroundExtraData.CornerRadius != null)
+            {
+                cachedImagePropertyMap.Set(Visual.Property.CornerRadius, backgroundExtraData.CornerRadius);
+                cachedImagePropertyMap.Set(Visual.Property.CornerRadiusPolicy, (int)backgroundExtraData.CornerRadiusPolicy);
+
+                if (backgroundExtraData.CornerSquareness != null)
+                {
+                    cachedImagePropertyMap.Set(Visual.Property.CornerSquareness, backgroundExtraData.CornerSquareness);
+                }
+            }
+
+            // We already applied background extra data now.
+            backgroundExtraDataUpdatedFlag &= ~BackgroundExtraDataUpdatedFlag.ContentsCornerRadius;
+
             UpdateImageMap();
         }
 
index b2999335fc02ffcc25d991a77d3a23bebcd7f061..48c67cbebe5385579051192d17fe92c315db8e6f 100755 (executable)
@@ -240,6 +240,14 @@ namespace Tizen.NUI.BaseComponents
 
                 Image = map;
 
+                if (backgroundExtraData != null)
+                {
+                    if (backgroundExtraData.CornerRadius != null || backgroundExtraData.CornerSquareness != null)
+                    {
+                        UpdateBackgroundExtraData(BackgroundExtraDataUpdatedFlag.ContentsCornerRadius);
+                    }
+                }
+
                 // All states applied well.
                 currentStates.changed = false;
 
index 91e9971489829f834d5361bcc69d90eff8177add..fa588d25cd27a116a42902a9d617bdefbd7046f9 100755 (executable)
@@ -1479,6 +1479,10 @@ namespace Tizen.NUI.BaseComponents
 
         private void SetInternalCornerRadius(Vector4 cornerRadius)
         {
+            // Set for animation. Will be soon deprecated.
+            (backgroundExtraData ?? (backgroundExtraData = new BackgroundExtraData())).CornerRadius = cornerRadius;
+            UpdateBackgroundExtraData(BackgroundExtraDataUpdatedFlag.CornerRadius);
+
             Object.InternalSetPropertyVector4(SwigCPtr, Property.CornerRadius, cornerRadius.SwigCPtr);
         }
 
@@ -1523,6 +1527,13 @@ namespace Tizen.NUI.BaseComponents
 
         private void SetInternalCornerRadiusPolicy(VisualTransformPolicyType cornerRadiusPolicy)
         {
+            // Set for animation. Will be soon deprecated.
+            (backgroundExtraData ?? (backgroundExtraData = new BackgroundExtraData())).CornerRadiusPolicy = cornerRadiusPolicy;
+            if (backgroundExtraData.CornerRadius != null)
+            {
+                UpdateBackgroundExtraData(BackgroundExtraDataUpdatedFlag.CornerRadius);
+            }
+
             Object.InternalSetPropertyInt(SwigCPtr, Property.CornerRadiusPolicy, (int)cornerRadiusPolicy);
         }
 
@@ -1566,6 +1577,10 @@ namespace Tizen.NUI.BaseComponents
         }
         internal void SetInternalCornerSqureness(Vector4 cornerSquareness)
         {
+            // Set for animation. Will be soon deprecated.
+            (backgroundExtraData ?? (backgroundExtraData = new BackgroundExtraData())).CornerSquareness = cornerSquareness;
+            UpdateBackgroundExtraData(BackgroundExtraDataUpdatedFlag.CornerRadius);
+
             Object.InternalSetPropertyVector4(SwigCPtr, Property.CornerSquareness, cornerSquareness.SwigCPtr);
         }
         internal Vector4 GetInternalCornerSqureness()
index 4afff418ef8d014a60f438f70425e21708f9a885..50d2d6f692cfa322aeff515d3720c801569c62ce 100755 (executable)
@@ -2212,6 +2212,15 @@ namespace Tizen.NUI.BaseComponents
                 map.Add(Visual.Property.Type, (int)Visual.Type.Image);
             }
 
+            if (backgroundExtraData != null)
+            {
+                map.Add(Visual.Property.CornerRadius, backgroundExtraData.CornerRadius)
+                   .Add(Visual.Property.CornerSquareness, backgroundExtraData.CornerSquareness)
+                   .Add(Visual.Property.CornerRadiusPolicy, (int)backgroundExtraData.CornerRadiusPolicy);
+            }
+
+            backgroundExtraDataUpdatedFlag &= ~BackgroundExtraDataUpdatedFlag.Background;
+
             using var mapValue = new PropertyValue(map);
             Object.SetProperty(SwigCPtr, Property.BACKGROUND, mapValue);
         }
@@ -2276,7 +2285,25 @@ namespace Tizen.NUI.BaseComponents
             // Background property will be Color after now. Remove background image url information.
             backgroundImageUrl = null;
 
-            Object.InternalSetPropertyVector4(SwigCPtr, View.Property.BACKGROUND, ((Color)value).SwigCPtr);
+            if (backgroundExtraData == null)
+            {
+                Object.InternalSetPropertyVector4(SwigCPtr, View.Property.BACKGROUND, ((Color)value).SwigCPtr);
+                return;
+            }
+
+            using var map = new PropertyMap();
+
+            map.Add(Visual.Property.Type, (int)Visual.Type.Color)
+               .Add(ColorVisualProperty.MixColor, value);
+
+            map.Add(Visual.Property.CornerRadius, backgroundExtraData.CornerRadius)
+               .Add(Visual.Property.CornerSquareness, backgroundExtraData.CornerSquareness)
+               .Add(Visual.Property.CornerRadiusPolicy, (int)backgroundExtraData.CornerRadiusPolicy);
+
+            backgroundExtraDataUpdatedFlag &= ~BackgroundExtraDataUpdatedFlag.Background;
+
+            using var mapValue = new PropertyValue(map);
+            Object.SetProperty(SwigCPtr, Property.BACKGROUND, mapValue);
         }
 
         private void SetColor(Color value)
@@ -2339,6 +2366,8 @@ namespace Tizen.NUI.BaseComponents
 
         private void SetShadow(ShadowBase value)
         {
+            backgroundExtraDataUpdatedFlag &= ~BackgroundExtraDataUpdatedFlag.Shadow;
+
             using var pv = value == null ? new PropertyValue() : value.ToPropertyValue(this);
             Tizen.NUI.Object.SetProperty(SwigCPtr, View.Property.SHADOW, pv);
         }
index 0f313fdb4c4df8ba96fbd48267eb3932a236f6f9..835334ec21a9792562021871e270091b088f4f6b 100755 (executable)
@@ -31,6 +31,24 @@ namespace Tizen.NUI.BaseComponents
     {
         internal string styleName;
 
+        [Flags]
+        internal enum BackgroundExtraDataUpdatedFlag : byte
+        {
+            BackgroundCornerRadius = 1 << 0,
+            ShadowCornerRadius = 1 << 2,
+            ContentsCornerRadius = 1 << 3, /// Subclass cases.
+
+            Background = BackgroundCornerRadius,
+            Shadow = ShadowCornerRadius,
+
+            CornerRadius = BackgroundCornerRadius | ShadowCornerRadius | ContentsCornerRadius,
+
+            None = 0,
+            All = Background | Shadow,
+        }
+
+        internal BackgroundExtraDataUpdatedFlag backgroundExtraDataUpdatedFlag = BackgroundExtraDataUpdatedFlag.None;
+
         // TODO : Re-open this API when we resolve Animation issue.
         // private bool backgroundExtraDataUpdateProcessAttachedFlag = false;
 
@@ -1144,10 +1162,115 @@ namespace Tizen.NUI.BaseComponents
             return (ResourceLoadingStatusType)Interop.View.GetVisualResourceStatus(this.SwigCPtr, Property.BACKGROUND);
         }
 
-        [Obsolete("Do not use this, that is deprecated in API13.")]
+        /// <summary>
+        /// Lazy call to UpdateBackgroundExtraData.
+        /// Collect Properties need to be update, and set properties that starts the Processing.
+        /// </summary>
+        internal virtual void UpdateBackgroundExtraData(BackgroundExtraDataUpdatedFlag flag)
+        {
+            if (backgroundExtraData == null)
+            {
+                return;
+            }
+
+            if (!backgroundExtraDataUpdatedFlag.HasFlag(flag))
+            {
+                backgroundExtraDataUpdatedFlag |= flag;
+                // TODO : Re-open this API when we resolve Animation issue.
+                // Instead, let we call UpdateBackgroundExtraData() synchronously.
+                UpdateBackgroundExtraData();
+                // if (!backgroundExtraDataUpdateProcessAttachedFlag)
+                // {
+                //     backgroundExtraDataUpdateProcessAttachedFlag = true;
+                //     ProcessorController.Instance.ProcessorOnceEvent += UpdateBackgroundExtraData;
+                //     // Call process hardly.
+                //     ProcessorController.Instance.Awake();
+                // }
+            }
+        }
+
+        /// <summary>
+        /// Callback function to Lazy UpdateBackgroundExtraData.
+        /// </summary>
+        private void UpdateBackgroundExtraData(object source, EventArgs e)
+        {
+            // Note : To allow event attachment during UpdateBackgroundExtraData, let we make flag as false before call UpdateBackgroundExtraData().
+            // TODO : Re-open this API when we resolve Animation issue.
+            // backgroundExtraDataUpdateProcessAttachedFlag = false;
+            UpdateBackgroundExtraData();
+        }
+
+        /// <summary>
+        /// Update background extra data properties synchronously.
+        /// After call this API, All background extra data properties updated.
+        /// </summary>
+        internal virtual void UpdateBackgroundExtraData()
+        {
+            if (Disposed)
+            {
+                return;
+            }
+
+            if (backgroundExtraData == null)
+            {
+                return;
+            }
+
+            if (IsShadowEmpty())
+            {
+                backgroundExtraDataUpdatedFlag &= ~BackgroundExtraDataUpdatedFlag.Shadow;
+            }
+
+            if (!Rectangle.IsNullOrZero(backgroundExtraData.BackgroundImageBorder))
+            {
+                backgroundExtraDataUpdatedFlag &= ~BackgroundExtraDataUpdatedFlag.Background;
+            }
+
+            if (backgroundExtraDataUpdatedFlag == BackgroundExtraDataUpdatedFlag.None)
+            {
+                return;
+            }
+
+            if ((backgroundExtraDataUpdatedFlag & BackgroundExtraDataUpdatedFlag.CornerRadius) != BackgroundExtraDataUpdatedFlag.None)
+            {
+                ApplyCornerRadius();
+            }
+
+            backgroundExtraDataUpdatedFlag = BackgroundExtraDataUpdatedFlag.None;
+        }
+
+        //[Obsolete("Do not use this, that is deprecated in API13.")]
         internal virtual void ApplyCornerRadius()
         {
-            Tizen.Log.Error("NUI", "ApplyCornerRadius() deprecated internally, Please don't use it.\n");
+            //Tizen.Log.Error("NUI", "ApplyCornerRadius() deprecated internally, Please don't use it.\n");
+
+            if (backgroundExtraData == null) return;
+
+            // Update corner radius properties to background and shadow by ActionUpdateProperty
+            if (backgroundExtraDataUpdatedFlag.HasFlag(BackgroundExtraDataUpdatedFlag.BackgroundCornerRadius))
+            {
+                if (backgroundExtraData.CornerRadius != null)
+                {
+                    _ = Interop.View.InternalUpdateVisualPropertyVector4(this.SwigCPtr, View.Property.BACKGROUND, Visual.Property.CornerRadius, Vector4.getCPtr(backgroundExtraData.CornerRadius));
+                }
+                if (backgroundExtraData.CornerSquareness != null)
+                {
+                    _ = Interop.View.InternalUpdateVisualPropertyVector4(this.SwigCPtr, View.Property.BACKGROUND, Visual.Property.CornerSquareness, Vector4.getCPtr(backgroundExtraData.CornerSquareness));
+                }
+                _ = Interop.View.InternalUpdateVisualPropertyInt(this.SwigCPtr, View.Property.BACKGROUND, Visual.Property.CornerRadiusPolicy, (int)backgroundExtraData.CornerRadiusPolicy);
+            }
+            if (backgroundExtraDataUpdatedFlag.HasFlag(BackgroundExtraDataUpdatedFlag.ShadowCornerRadius))
+            {
+                if (backgroundExtraData.CornerRadius != null)
+                {
+                    _ = Interop.View.InternalUpdateVisualPropertyVector4(this.SwigCPtr, View.Property.SHADOW, Visual.Property.CornerRadius, Vector4.getCPtr(backgroundExtraData.CornerRadius));
+                }
+                if (backgroundExtraData.CornerSquareness != null)
+                {
+                    _ = Interop.View.InternalUpdateVisualPropertyVector4(this.SwigCPtr, View.Property.SHADOW, Visual.Property.CornerSquareness, Vector4.getCPtr(backgroundExtraData.CornerSquareness));
+                }
+                _ = Interop.View.InternalUpdateVisualPropertyInt(this.SwigCPtr, View.Property.SHADOW, Visual.Property.CornerRadiusPolicy, (int)backgroundExtraData.CornerRadiusPolicy);
+            }
         }
 
         [Obsolete("Do not use this, that is deprecated in API13.")]
index 623fd49f2a9e94ba8f6d6992d9cec3971e96f9d8..d37517104b472bb3e85a615755d92f8092b64e2b 100755 (executable)
@@ -27,7 +27,24 @@ namespace Tizen.NUI.BaseComponents
             // Background property will be Color after now. Remove background image url information.
             backgroundImageUrl = null;
 
-            Object.InternalSetPropertyColor(SwigCPtr, Property.BACKGROUND, color);
+
+            if (backgroundExtraData == null)
+            {
+                Object.InternalSetPropertyColor(SwigCPtr, Property.BACKGROUND, color);
+            }
+            else
+            {
+                using var map = new PropertyMap()
+                    .Append(Visual.Property.Type, (int)Visual.Type.Color)
+                    .Append(ColorVisualProperty.MixColor, color)
+                    .Append(Visual.Property.CornerRadius, backgroundExtraData.CornerRadius)
+                    .Append(Visual.Property.CornerSquareness, backgroundExtraData.CornerSquareness)
+                    .Append(Visual.Property.CornerRadiusPolicy, (int)backgroundExtraData.CornerRadiusPolicy);
+
+                backgroundExtraDataUpdatedFlag &= ~BackgroundExtraDataUpdatedFlag.Background;
+
+                Object.InternalSetPropertyMap(SwigCPtr, Property.BACKGROUND, map.SwigCPtr);
+            }
 
             NotifyPropertyChanged(nameof(BackgroundColor));
             NotifyBackgroundChanged();
@@ -38,6 +55,8 @@ namespace Tizen.NUI.BaseComponents
         {
             themeData?.selectorData?.ClearShadow(this);
 
+            backgroundExtraDataUpdatedFlag &= ~BackgroundExtraDataUpdatedFlag.Shadow;
+
             using var map = shadow.BuildMap(this);
 
             Object.InternalSetPropertyMap(SwigCPtr, Property.SHADOW, map.SwigCPtr);
index ad2be670cd626a7ec031bda9da0627904cf0bddb..c7e9f5c8307759ac2486968116bb5b9fe9c0f5b3 100755 (executable)
@@ -32,6 +32,11 @@ namespace Tizen.NUI
         internal BackgroundExtraData(BackgroundExtraData other)
         {
             BackgroundImageBorder = other.BackgroundImageBorder;
+
+            // Deprecated in API13
+            CornerRadius = other.CornerRadius;
+            CornerSquareness = other.CornerSquareness;
+            CornerRadiusPolicy = other.CornerRadiusPolicy;
         }
 
         private Rectangle backgroundImageBorder;
index dc93dab4e2dfe6102adf410306a77dcc8a5417f3..29a9bdddd9451275bfe039ff5da7c1f9ee07bf77 100755 (executable)
@@ -3131,6 +3131,27 @@ namespace Tizen.NUI.BaseComponents
             return ret;
         }
 
+        internal override void ApplyCornerRadius()
+        {
+            base.ApplyCornerRadius();
+
+            if (backgroundExtraData == null) 
+            {
+                return;
+            }
+
+            // Update corner radius properties to webView by ActionUpdateProperty
+            if (backgroundExtraData.CornerRadius != null)
+            {
+                _ = Interop.View.InternalUpdateVisualPropertyVector4(this.SwigCPtr, WebView.Property.Url, Visual.Property.CornerRadius, Vector4.getCPtr(backgroundExtraData.CornerRadius));
+            }
+            if (backgroundExtraData.CornerSquareness != null)
+            {
+                _ = Interop.View.InternalUpdateVisualPropertyVector4(this.SwigCPtr, WebView.Property.Url, Visual.Property.CornerSquareness, Vector4.getCPtr(backgroundExtraData.CornerSquareness));
+            }
+            _ = Interop.View.InternalUpdateVisualPropertyInt(this.SwigCPtr, WebView.Property.Url, Visual.Property.CornerRadiusPolicy, (int)backgroundExtraData.CornerRadiusPolicy);
+        }
+
         private void OnPageLoadStarted(string pageUrl)
         {
             WebViewPageLoadEventArgs e = new WebViewPageLoadEventArgs();