[NUI] Add EnableFrameCache in LottieAnimationView
authorsunghyun kim <scholb.kim@samsung.com>
Thu, 30 Nov 2023 03:48:29 +0000 (12:48 +0900)
committerSangHyeon Jade Lee <dltkdgus1764@gmail.com>
Tue, 2 Jan 2024 10:49:57 +0000 (19:49 +0900)
src/Tizen.NUI/src/public/BaseComponents/LottieAnimationView.cs
src/Tizen.NUI/src/public/BaseComponents/LottieAnimationViewBindableProperty.cs
src/Tizen.NUI/src/public/Visuals/VisualConstants.cs

index 1ffaded..7ce0558 100755 (executable)
@@ -160,6 +160,7 @@ namespace Tizen.NUI.BaseComponents
                 currentStates.framePlayRangeMin = -1;
                 currentStates.framePlayRangeMax = -1;
                 currentStates.totalFrame = -1;
+                currentStates.enableFrameCache = false;
 
                 string ret = (value == null ? "" : value);
                 currentStates.url = ret;
@@ -534,6 +535,42 @@ namespace Tizen.NUI.BaseComponents
                 return currentStates.redrawInScalingDown;
             }
         }
+
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public bool EnableFrameCache
+        {
+            get
+            {
+                return (bool)GetValue(EnableFrameCacheProperty);
+            }
+            set
+            {
+                SetValue(EnableFrameCacheProperty, value);
+                NotifyPropertyChanged();
+            }
+        }
+
+        private bool InternalEnableFrameCache
+        {
+            set
+            {
+                if (currentStates.enableFrameCache != value)
+                {
+                    currentStates.changed = true;
+                    currentStates.enableFrameCache = value;
+
+                    NUILog.Debug($"<[{GetId()}]SET currentStates.EnableFrameCache={currentStates.enableFrameCache}>");
+
+                    Interop.View.InternalUpdateVisualPropertyBool(this.SwigCPtr, ImageView.Property.IMAGE, ImageVisualProperty.EnableFrameCache, currentStates.enableFrameCache);
+                }
+            }
+            get
+            {
+                NUILog.Debug($"EnableFrameCache get! {currentStates.enableFrameCache}");
+                return currentStates.enableFrameCache;
+            }
+        }
         #endregion Property
 
 
@@ -1252,6 +1289,7 @@ namespace Tizen.NUI.BaseComponents
             internal bool redrawInScalingDown;
             internal int desiredWidth, desiredHeight;
             internal bool synchronousLoading;
+            internal bool enableFrameCache;
             internal bool changed;
         };
         private states currentStates;
index f4fefd8..e0ffb3d 100755 (executable)
@@ -129,5 +129,23 @@ namespace Tizen.NUI.BaseComponents
             var instance = (Tizen.NUI.BaseComponents.LottieAnimationView)bindable;
             return instance.InternalRedrawInScalingDown;
         });
+
+        /// <summary>
+        /// EnableFrameCacheProperty
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public static readonly BindableProperty EnableFrameCacheProperty = BindableProperty.Create(nameof(EnableFrameCache), typeof(bool), typeof(Tizen.NUI.BaseComponents.LottieAnimationView), false, propertyChanged: (bindable, oldValue, newValue) =>
+        {
+            var instance = (Tizen.NUI.BaseComponents.LottieAnimationView)bindable;
+            if (newValue != null)
+            {
+                instance.InternalEnableFrameCache = (bool)newValue;
+            }
+        },
+        defaultValueCreator: (bindable) =>
+        {
+            var instance = (Tizen.NUI.BaseComponents.LottieAnimationView)bindable;
+            return instance.InternalEnableFrameCache;
+        });
     }
 }
index a4100ae..bfbdbd5 100755 (executable)
@@ -987,6 +987,17 @@ namespace Tizen.NUI
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
         public static readonly int MarkerInfo = NDalic.ImageVisualOrientationCorrection + 15;
+
+        /// <summary>
+        /// @brief Whether to animated image visual uses fixed cache or not.
+        /// @details type Property::BOOLEAN.
+        /// If this property is true, animated image visual uses fixed cache for loading and keeps loaded frame
+        /// until the visual is removed. It reduces CPU cost when the animated image will be looping.
+        /// But it can spend a lot of memory if the resource has high resolution image or many frame count.
+        /// @note It is used in the AnimatedImageVisual. The default is false
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public static readonly int EnableFrameCache = NDalic.ImageVisualOrientationCorrection + 16;
     }
 
     /// <summary>