/*
- * Copyright(c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright(c) 2020 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
using global::System.Runtime.InteropServices;
using System.ComponentModel;
using System.Collections.Generic;
+using System.Globalization;
namespace Tizen.NUI.BaseComponents
{
- #if (NUI_DEBUG_ON)
- using tlog = Tizen.Log;
- #endif
-
/// <summary>
/// LottieAnimationView renders an animated vector image (Lottie file).
/// </summary>
/// <since_tizen> 7 </since_tizen>
- public class LottieAnimationView : ImageView
+ public partial class LottieAnimationView : ImageView
{
- #region Constructor, Distructor, Dispose
+ #region Constructor, Destructor, Dispose
/// <summary>
/// LottieAnimationView constructor
/// </summary>
/// <param name="scale">The factor of scaling image, default : 1.0f</param>
/// <param name="shown">false : not displayed (hidden), true : displayed (shown), default : true</param>
/// <remarks>
- /// If shown parameter is false, it is not visible even the LottieAnimationView instance is created.
+ /// If the shown parameter is false, the animation is not visible even if the LottieAnimationView instance is created.
/// </remarks>
/// <example>
/// <code>
/// <since_tizen> 7 </since_tizen>
public LottieAnimationView(float scale = 1.0f, bool shown = true) : base()
{
- tlog.Fatal(tag, $"< constructor GetId={GetId()} >");
+ ActionPlay = Interop.LottieAnimationView.AnimatedVectorImageVisualActionPlayGet();
+ ActionPause = Interop.LottieAnimationView.AnimatedVectorImageVisualActionPauseGet();
+ ActionStop = Interop.LottieAnimationView.AnimatedVectorImageVisualActionStopGet();
+
+ NUILog.Debug($"< constructor GetId={GetId()} >");
currentStates.url = "";
currentStates.frame = -1;
currentStates.loopCount = 1;
currentStates.changed = false;
currentStates.totalFrame = -1;
currentStates.scale = scale;
+ currentStates.redrawInScalingDown = true;
SetVisible(shown);
}
return;
}
- tlog.Fatal(tag, $"<[{GetId()}] type={type}");
-
//Release your own unmanaged resources here.
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
{
VisualEventSignal().Disconnect(visualEventSignalCallback);
finishedEventHandler = null;
- tlog.Fatal(tag, $"disconnect event signal");
+ NUILog.Debug($"disconnect event signal");
}
base.Dispose(type);
- tlog.Fatal(tag, $"[{GetId()}]>");
}
- #endregion Constructor, Distructor, Dispose
+ #endregion Constructor, Destructor, Dispose
#region Property
/// <since_tizen> 7 </since_tizen>
public string URL
{
+ get
+ {
+ return GetValue(URLProperty) as string;
+ }
+ set
+ {
+ SetValue(URLProperty, value);
+ NotifyPropertyChanged();
+ }
+ }
+
+ private string InternalURL
+ {
set
{
string ret = (value == null ? "" : value);
currentStates.url = ret;
currentStates.changed = true;
- tlog.Fatal(tag, $"<[{GetId()}]SET url={currentStates.url}");
+ NUILog.Debug($"<[{GetId()}]SET url={currentStates.url}");
PropertyMap map = new PropertyMap();
map.Add(Visual.Property.Type, new PropertyValue((int)DevelVisual.Type.AnimatedVectorImage))
{
Scale = new Vector3(currentStates.scale, currentStates.scale, 0.0f);
}
- tlog.Fatal(tag, $"<[{GetId()}]>");
+ NUILog.Debug($"<[{GetId()}]>");
}
get
{
string ret = currentStates.url;
- tlog.Fatal(tag, $"<[{GetId()}] GET");
+ NUILog.Debug($"<[{GetId()}] GET");
- PropertyMap map = Image;
+ PropertyMap map = base.Image;
if (map != null)
{
PropertyValue val = map.Find(ImageVisualProperty.URL);
{
if (val.Get(out ret))
{
- tlog.Fatal(tag, $"gotten url={ret} >");
+ NUILog.Debug($"gotten url={ret} >");
return ret;
}
}
}
/// <summary>
- /// Get playing state
+ /// Gets the playing state
/// </summary>
/// <since_tizen> 7 </since_tizen>
public PlayStateType PlayState
{
get
{
- tlog.Fatal(tag, $"< Get!");
+ NUILog.Debug($"< Get!");
PropertyMap map = base.Image;
var ret = 0;
if (map != null)
if (val.Get(out ret))
{
currentStates.playState = (PlayStateType)ret;
- tlog.Fatal(tag, $"gotten play state={ret} >");
+ NUILog.Debug($"gotten play state={ret} >");
}
}
}
}
/// <summary>
- /// Get the number of total frame
+ /// Get the number of total frames
/// </summary>
/// <since_tizen> 7 </since_tizen>
public int TotalFrame
get
{
int ret = -1;
- PropertyMap map = Image;
+ PropertyMap map = base.Image;
if (map != null)
{
PropertyValue val = map.Find(ImageVisualProperty.TotalFrameNumber);
{
if (val.Get(out ret))
{
- //tlog.Fatal(tag, $"TotalFrameNumber get! ret={ret}");
+ //NUILog.Debug( $"TotalFrameNumber get! ret={ret}");
currentStates.totalFrame = ret;
return ret;
}
}
/// <summary>
- /// Set or Get current frame. When setting a specific frame, it is displayed as a still image.
+ /// Set or get the current frame. When setting a specific frame, it is displayed as a still image.
/// </summary>
/// <remarks>
- /// Giving user set value when getting. If the out ranged frame is set, it is reset as minimum frame or maximum frame.
+ /// Gets the value set by a user. If the setting value is out-ranged, it is reset as a minimum frame or a maximum frame.
/// </remarks>
/// <example>
- /// Let's say myLottie.json file has 100 frames originally, then it will have 0 ~ 99 range of frame index.
+ /// We assume that the animation in myLottie.json file has 100 frames originally. If so, its frame index will be 0 - 99.
/// <code>
/// LottieAnimationView myLottie = new LottieAnimationView();
/// myLottie.URL = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "myLottie.json"; //myLottie.json's total frame is 100 (frame: 0~99)
- /// Window.Instance.GetDefaultLayer().Add(myLottie);
+ /// NUIApplication.GetDefaultWindow().GetDefaultLayer().Add(myLottie);
/// myLottie.CurrentFrame = 200; //display 99 frame
/// myLottie.SetMinMaxFrame(10, 20);
/// myLottie.CurrentFrame = 15; //display 15 frame
/// <since_tizen> 7 </since_tizen>
public int CurrentFrame
{
+ get
+ {
+ return (int)GetValue(CurrentFrameProperty);
+ }
+ set
+ {
+ SetValue(CurrentFrameProperty, value);
+ NotifyPropertyChanged();
+ }
+ }
+
+ private int InternalCurrentFrame
+ {
set
{
currentStates.frame = value;
- tlog.Fatal(tag, $"<[{GetId()}]SET frame={currentStates.frame}>");
- DoAction(vectorImageVisualIndex, (int)actionType.jumpTo, new PropertyValue(currentStates.frame));
+ NUILog.Debug($"<[{GetId()}]SET frame={currentStates.frame}>");
+ DoAction(ImageView.Property.IMAGE, ActionJumpTo, new PropertyValue(currentStates.frame));
}
get
{
int ret = 0;
- PropertyMap map = Image;
+ PropertyMap map = base.Image;
if (map != null)
{
PropertyValue val = map.Find(ImageVisualProperty.CurrentFrameNumber);
{
if (val.Get(out ret))
{
- //tlog.Fatal(tag, $"CurrentFrameNumber get! val={ret}");
+ //NUILog.Debug( $"CurrentFrameNumber get! val={ret}");
return ret;
}
}
}
/// <summary>
- /// Set or Get looping mode of Lottie animation.
+ /// Sets or gets the looping mode of Lottie animation.
/// </summary>
/// <since_tizen> 7 </since_tizen>
public LoopingModeType LoopingMode
{
+ get
+ {
+ return (LoopingModeType)GetValue(LoopingModeProperty);
+ }
+ set
+ {
+ SetValue(LoopingModeProperty, value);
+ NotifyPropertyChanged();
+ }
+ }
+
+ private LoopingModeType InternalLoopingMode
+ {
set
{
currentStates.loopMode = (LoopingModeType)value;
currentStates.changed = true;
- tlog.Fatal(tag, $"<[{GetId()}] SET loopMode={currentStates.loopMode}>");
+ NUILog.Debug($"<[{GetId()}] SET loopMode={currentStates.loopMode}>");
PropertyMap map = new PropertyMap();
map.Add(ImageVisualProperty.LoopingMode, new PropertyValue((int)currentStates.loopMode));
- DoAction(vectorImageVisualIndex, (int)actionType.updateProperty, new PropertyValue(map));
+ DoAction(ImageView.Property.IMAGE, ActionUpdateProperty, new PropertyValue(map));
}
get
{
- //tlog.Fatal(tag, $"LoopMode get!");
+ //NUILog.Debug( $"LoopMode get!");
PropertyMap map = base.Image;
var ret = 0;
if (map != null)
{
if (val.Get(out ret))
{
- //tlog.Fatal(tag, $"gotten LoopMode={ret}");
+ //NUILog.Debug( $"gotten LoopMode={ret}");
if (ret != (int)currentStates.loopMode && ret > 0)
{
- tlog.Fatal(tag, $" [ERROR][{GetId()}](LottieAnimationView) different LoopMode! gotten={ret}, loopMode={currentStates.loopMode}");
+ NUILog.Debug($" [ERROR][{GetId()}](LottieAnimationView) different LoopMode! gotten={ret}, loopMode={currentStates.loopMode}");
}
currentStates.loopMode = (LoopingModeType)ret;
return (LoopingModeType)ret;
}
/// <summary>
- /// Set or Get loop count.
+ /// Sets or gets the loop count.
/// </summary>
/// <remarks>
- /// Minus value means infinite loop count.
+ /// The minus value means the infinite loop count.
/// </remarks>
/// <example>
/// <code>
/// LottieAnimationView myLottie = new LottieAnimationView();
/// myLottie.URL = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "myLottie.json"; //myLottie.json's total frame is 100 (frame: 0~99)
- /// Window.Instance.GetDefaultLayer().Add(myLottie);
+ /// NUIApplication.GetDefaultWindow().GetDefaultLayer().Add(myLottie);
/// myLottie.LoopCount = -1; //infinite loop
/// myLottie.Play();
/// myLottie.Stop(); //it plays continuously unless Stop() is called
/// <since_tizen> 7 </since_tizen>
public int LoopCount
{
+ get
+ {
+ return (int)GetValue(LoopCountProperty);
+ }
+ set
+ {
+ SetValue(LoopCountProperty, value);
+ NotifyPropertyChanged();
+ }
+ }
+
+ private int InternalLoopCount
+ {
set
{
currentStates.changed = true;
currentStates.loopCount = value;
- tlog.Fatal(tag, $"<[{GetId()}]SET currentStates.loopCount={currentStates.loopCount}>");
+ NUILog.Debug($"<[{GetId()}]SET currentStates.loopCount={currentStates.loopCount}>");
PropertyMap map = new PropertyMap();
map.Add(ImageVisualProperty.LoopCount, new PropertyValue(currentStates.loopCount));
- DoAction(vectorImageVisualIndex, (int)actionType.updateProperty, new PropertyValue(map));
+ DoAction(ImageView.Property.IMAGE, ActionUpdateProperty, new PropertyValue(map));
}
get
{
- //tlog.Fatal(tag, $"LoopCount get!");
+ //NUILog.Debug( $"LoopCount get!");
PropertyMap map = base.Image;
var ret = 0;
if (map != null)
{
if (val.Get(out ret))
{
- //tlog.Fatal(tag, $"gotten loop count={ret}");
+ //NUILog.Debug( $"gotten loop count={ret}");
if (ret != currentStates.loopCount && ret > 0)
{
- tlog.Fatal(tag, $"<[ERROR][{GetId()}](LottieAnimationView) different loop count! gotten={ret}, loopCount={currentStates.loopCount}>");
+ NUILog.Debug($"<[ERROR][{GetId()}](LottieAnimationView) different loop count! gotten={ret}, loopCount={currentStates.loopCount}>");
}
currentStates.loopCount = ret;
return currentStates.loopCount;
}
/// <summary>
- /// Set or Get stop behavior.
+ /// Sets or gets the stop behavior.
/// </summary>
/// <since_tizen> 7 </since_tizen>
public StopBehaviorType StopBehavior
{
+ get
+ {
+ return (StopBehaviorType)GetValue(StopBehaviorProperty);
+ }
+ set
+ {
+ SetValue(StopBehaviorProperty, value);
+ NotifyPropertyChanged();
+ }
+ }
+
+ private StopBehaviorType InternalStopBehavior
+ {
set
{
currentStates.stopEndAction = (StopBehaviorType)value;
currentStates.changed = true;
- tlog.Fatal(tag, $"<[{GetId()}]SET val={currentStates.stopEndAction}>");
+ NUILog.Debug($"<[{GetId()}]SET val={currentStates.stopEndAction}>");
PropertyMap map = new PropertyMap();
map.Add(ImageVisualProperty.StopBehavior, new PropertyValue((int)currentStates.stopEndAction));
- DoAction(vectorImageVisualIndex, (int)actionType.updateProperty, new PropertyValue(map));
+ DoAction(ImageView.Property.IMAGE, ActionUpdateProperty, new PropertyValue(map));
}
get
{
- //tlog.Fatal(tag, $"StopBehavior get!");
+ //NUILog.Debug( $"StopBehavior get!");
PropertyMap map = base.Image;
var ret = 0;
if (map != null)
{
if (val.Get(out ret))
{
- //tlog.Fatal(tag, $"gotten StopBehavior={ret}");
+ //NUILog.Debug( $"gotten StopBehavior={ret}");
if (ret != (int)currentStates.stopEndAction)
{
- tlog.Fatal(tag, $"<[ERROR][{GetId()}](LottieAnimationView) different StopBehavior! gotten={ret}, StopBehavior={currentStates.stopEndAction}>");
+ NUILog.Debug($"<[ERROR][{GetId()}](LottieAnimationView) different StopBehavior! gotten={ret}, StopBehavior={currentStates.stopEndAction}>");
}
currentStates.stopEndAction = (StopBehaviorType)ret;
return (StopBehaviorType)ret;
return currentStates.stopEndAction;
}
}
+
+ /// <summary>
+ /// Whether to redraw the image when the visual is scaled down.
+ /// </summary>
+ /// <remarks>
+ /// Inhouse API.
+ /// It is used in the AnimatedVectorImageVisual.The default is true.
+ /// </remarks>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public bool RedrawInScalingDown
+ {
+ get
+ {
+ return (bool)GetValue(RedrawInScalingDownProperty);
+ }
+ set
+ {
+ SetValue(RedrawInScalingDownProperty, value);
+ NotifyPropertyChanged();
+ }
+ }
+
+ private bool InternalRedrawInScalingDown
+ {
+ set
+ {
+ currentStates.changed = true;
+ currentStates.redrawInScalingDown = value;
+ NUILog.Debug($"<[{GetId()}]SET currentStates.redrawInScalingDown={currentStates.redrawInScalingDown}>");
+ PropertyMap map = new PropertyMap();
+ map.Add(ImageVisualProperty.RedrawInScalingDown, new PropertyValue(currentStates.redrawInScalingDown));
+ DoAction(ImageView.Property.IMAGE, ActionUpdateProperty, new PropertyValue(map));
+ }
+ get
+ {
+ PropertyMap map = base.Image;
+ var ret = true;
+ if (map != null)
+ {
+ PropertyValue val = map.Find(ImageVisualProperty.RedrawInScalingDown);
+ if (val != null)
+ {
+ if (val.Get(out ret))
+ {
+ if (ret != currentStates.redrawInScalingDown)
+ {
+ NUILog.Debug($"<[ERROR][{GetId()}](LottieAnimationView) different redrawInScalingDown! gotten={ret}, redrawInScalingDown={currentStates.redrawInScalingDown}>");
+ }
+ currentStates.redrawInScalingDown = ret;
+ return currentStates.redrawInScalingDown;
+ }
+ }
+ }
+ Tizen.Log.Error(tag, $"<[ERROR][{GetId()}](LottieAnimationView) Fail to get redrawInScalingDown from dali currentStates.redrawInScalingDown={currentStates.redrawInScalingDown}>");
+ return currentStates.redrawInScalingDown;
+ }
+ }
+
+
+ /// <summary>
+ /// Actions property value to Jump to the specified frame.
+ /// This property can be redefined by child class if it use different value.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected int ActionJumpTo { get; set; } = Interop.LottieAnimationView.AnimatedVectorImageVisualActionJumpToGet();
#endregion Property
#region Method
/// <summary>
- /// Set minimum and maximum frame.
+ /// Set the minimum and the maximum frame.
/// </summary>
/// <param name="minFrame">minimum frame</param>
/// <param name="maxFrame">maximum frame</param>
/// <since_tizen> 7 </since_tizen>
public void SetMinMaxFrame(int minFrame, int maxFrame)
{
- tlog.Fatal(tag, $"< [{GetId()}] SetPlayRange({minFrame}, {maxFrame})");
+ NUILog.Debug($"< [{GetId()}] SetPlayRange({minFrame}, {maxFrame})");
currentStates.changed = true;
currentStates.framePlayRangeMin = minFrame;
PropertyMap map = new PropertyMap();
map.Add(ImageVisualProperty.PlayRange, new PropertyValue(array));
- DoAction(vectorImageVisualIndex, (int)actionType.updateProperty, new PropertyValue(map));
- tlog.Fatal(tag, $" [{GetId()}] currentStates.min:({currentStates.framePlayRangeMin}, max:{currentStates.framePlayRangeMax})>");
+ DoAction(ImageView.Property.IMAGE, ActionUpdateProperty, new PropertyValue(map));
+ NUILog.Debug($" [{GetId()}] currentStates.min:({currentStates.framePlayRangeMin}, max:{currentStates.framePlayRangeMax})>");
}
/// <summary>
/// <since_tizen> 7 </since_tizen>
public new void Play()
{
- tlog.Fatal(tag, $"<[{GetId()}] Play()");
+ NUILog.Debug($"<[{GetId()}] Play()");
debugPrint();
base.Play();
- tlog.Fatal(tag, $"[{GetId()}]>");
+ NUILog.Debug($"[{GetId()}]>");
}
/// <summary>
/// <since_tizen> 7 </since_tizen>
public new void Pause()
{
- tlog.Fatal(tag, $"<[{GetId()}] Pause()>");
+ NUILog.Debug($"<[{GetId()}] Pause()>");
debugPrint();
base.Pause();
- tlog.Fatal(tag, $"[{GetId()}]>");
+ NUILog.Debug($"[{GetId()}]>");
}
/// <summary>
/// <since_tizen> 7 </since_tizen>
public new void Stop()
{
- tlog.Fatal(tag, $"<[{GetId()}] Stop()");
+ NUILog.Debug($"<[{GetId()}] Stop()");
debugPrint();
base.Stop();
- tlog.Fatal(tag, $"[{GetId()}]>");
+ NUILog.Debug($"[{GetId()}]>");
}
/// <summary>
- /// Get the list of layers' information (start frame, end frame) in Lottie file.
+ /// Get the list of layers' information such as the start frame and the end frame in the Lottie file.
/// </summary>
/// <returns>List of Tuple (string of layer name, integer of start frame, integer of end frame)</returns>
/// <since_tizen> 7 </since_tizen>
public List<Tuple<string, int, int>> GetContentInfo()
{
- tlog.Fatal(tag, $"<");
+ NUILog.Debug($"<");
if (currentStates.contentInfo != null)
{
return currentStates.contentInfo;
arr.GetElementAt(0).Get(out startFrame);
arr.GetElementAt(1).Get(out endFrame);
- tlog.Fatal(tag, $"[{i}] layer name={key}, startFrame={startFrame}, endFrame={endFrame}");
+ NUILog.Debug($"[{i}] layer name={key}, startFrame={startFrame}, endFrame={endFrame}");
Tuple<string, int, int> item = new Tuple<string, int, int>(key, startFrame, endFrame);
}
}
}
- tlog.Fatal(tag, $">");
+ NUILog.Debug($">");
return currentStates.contentInfo;
}
/// <summary>
- /// A marker has its start frame and end frame.
+ /// A marker has its start frame and end frame.
/// Animation will play between the start frame and the end frame of the marker if one marker is specified.
/// Or animation will play between the start frame of the first marker and the end frame of the second marker if two markers are specified. *
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public void SetMinMaxFrameByMarker(string marker1, string marker2 = null)
{
- tlog.Fatal(tag, $"< [{GetId()}] SetMinMaxFrameByMarker({marker1}, {marker2})");
+ NUILog.Debug($"< [{GetId()}] SetMinMaxFrameByMarker({marker1}, {marker2})");
currentStates.changed = true;
currentStates.mark1 = marker1;
PropertyMap map = new PropertyMap();
map.Add(ImageVisualProperty.PlayRange, new PropertyValue(array));
- DoAction(vectorImageVisualIndex, (int)actionType.updateProperty, new PropertyValue(map));
- tlog.Fatal(tag, $" [{GetId()}] currentStates.mark1:{currentStates.mark1}, mark2:{currentStates.mark2} >");
+ DoAction(ImageView.Property.IMAGE, ActionUpdateProperty, new PropertyValue(map));
+ NUILog.Debug($" [{GetId()}] currentStates.mark1:{currentStates.mark1}, mark2:{currentStates.mark2} >");
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public Tuple<int, int> GetMinMaxFrame()
{
- tlog.Fatal(tag, $"< [{GetId()}] GetMinMaxFrame()! total frame={currentStates.totalFrame}");
+ NUILog.Debug($"< [{GetId()}] GetMinMaxFrame()! total frame={currentStates.totalFrame}");
PropertyMap map = Image;
if (map != null)
int intRet;
if (v.Get(out intRet))
{
- tlog.Fatal(tag, $"Got play range of string [{i}]: {intRet}");
+ NUILog.Debug($"Got play range of string [{i}]: {intRet}");
if (i == 0)
{
item1 = intRet;
Tizen.Log.Error("NUI", $"[ERR] fail to get play range from dali! case#1");
}
}
- tlog.Fatal(tag, $" [{GetId()}] GetMinMaxFrame(min:{item1}, max:{item2})! >");
+ NUILog.Debug($" [{GetId()}] GetMinMaxFrame(min:{item1}, max:{item2})! >");
return new Tuple<int, int>(item1, item2);
}
}
{
if (finishedEventHandler == null)
{
- tlog.Fatal(tag, $"<[{GetId()}] Finished eventhandler added>");
+ NUILog.Debug($"<[{GetId()}] Finished eventhandler added>");
visualEventSignalCallback = onVisualEventSignal;
VisualEventSignal().Connect(visualEventSignalCallback);
}
}
remove
{
- tlog.Fatal(tag, $"<[{GetId()}] Finished eventhandler removed>");
+ NUILog.Debug($"<[{GetId()}] Finished eventhandler removed>");
finishedEventHandler -= value;
if (finishedEventHandler == null && visualEventSignalCallback != null)
{
internal PlayStateType playState;
internal List<Tuple<string, int, int>> contentInfo;
internal string mark1, mark2;
+ internal bool redrawInScalingDown;
};
private states currentStates;
- private enum actionType
- {
- play,
- pause,
- stop,
- jumpTo,
- updateProperty,
- };
-
private struct DevelVisual
{
internal enum Type
}
private const string tag = "NUITEST";
- private const int vectorImageVisualIndex = 10000000 + 1000 + 2;
private event EventHandler finishedEventHandler;
private void OnFinished()
{
- tlog.Fatal(tag, $"<[{GetId()}] OnFinished()>");
+ NUILog.Debug($"<[{GetId()}] OnFinished()>");
finishedEventHandler?.Invoke(this, null);
}
View v = Registry.GetManagedBaseHandleFromNativePtr(targetView) as View;
if (v != null)
{
- tlog.Fatal(tag, $"targetView is not null! name={v.Name}");
+ NUILog.Debug($"targetView is not null! name={v.Name}");
}
else
{
- tlog.Fatal(tag, $"target is something created from dali");
+ NUILog.Debug($"target is something created from dali");
}
}
VisualEventSignalArgs e = new VisualEventSignalArgs();
e.SignalId = signalId;
visualEventSignalHandler?.Invoke(this, e);
- tlog.Fatal(tag, $"<[{GetId()}] onVisualEventSignal()! visualIndex={visualIndex}, signalId={signalId}>");
+ NUILog.Debug($"<[{GetId()}] onVisualEventSignal()! visualIndex={visualIndex}, signalId={signalId}>");
}
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
private void debugPrint()
{
- tlog.Fatal(tag, $"===================================");
- tlog.Fatal(tag, $"<[{GetId()}] get currentStates : url={currentStates.url}, loopCount={currentStates.loopCount}, framePlayRangeMin/Max({currentStates.framePlayRangeMin},{currentStates.framePlayRangeMax}) ");
- tlog.Fatal(tag, $" get from Property : StopBehavior={StopBehavior}, LoopMode={LoopingMode}, LoopCount={LoopCount}, PlayState={PlayState} >");
- tlog.Fatal(tag, $"===================================");
+ NUILog.Debug($"===================================");
+ NUILog.Debug($"<[{GetId()}] get currentStates : url={currentStates.url}, loopCount={currentStates.loopCount}, \nframePlayRangeMin/Max({currentStates.framePlayRangeMin},{currentStates.framePlayRangeMax}) ");
+ NUILog.Debug($" get from Property : StopBehavior={StopBehavior}, LoopMode={LoopingMode}, LoopCount={LoopCount}, PlayState={PlayState}");
+ NUILog.Debug($" RedrawInScalingDown={RedrawInScalingDown} >");
+ NUILog.Debug($"===================================");
}
#endregion Private
}
/// A class containing frame informations for a LottieAnimationView.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public class LottieFrameInfo
+ public class LottieFrameInfo : ICloneable
{
/// <summary>
/// Creates a new instance with a playing range.
}
/// <summary>
+ /// Create a new instance from string.
+ /// Possible input : "0, 10", "10"
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static implicit operator LottieFrameInfo(string pair)
+ {
+ if (pair == null)
+ {
+ return null;
+ }
+
+ string[] parts = pair.Split(',');
+ if (parts.Length == 1)
+ {
+ return new LottieFrameInfo(Int32.Parse(parts[0].Trim(), CultureInfo.InvariantCulture));
+ }
+ else if (parts.Length == 2)
+ {
+ return new LottieFrameInfo(Int32.Parse(parts[0].Trim(), CultureInfo.InvariantCulture), Int32.Parse(parts[1].Trim(), CultureInfo.InvariantCulture));
+ }
+
+ Tizen.Log.Error("NUI", $"Can not convert string {pair} to LottieFrameInfo");
+ return null;
+ }
+
+ /// <summary>
/// The start frame of the lottie animation.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
return new LottieFrameInfo(stillImageFrame, stillImageFrame);
}
- internal bool IsStillImage()
+ /// <summary>
+ /// Inhouse API.
+ /// Whether this LottieFrameInfo represents one frame or more.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public bool IsStillImage()
{
return StartFrame == EndFrame;
}
- internal void Show(LottieAnimationView lottieView, bool noPlay = false)
+ /// <summary>
+ /// Inhouse API.
+ /// Play specified LottieAnimationView with this frame information.
+ /// </summary>
+ /// <param name="lottieView">The target LottieAnimationView to play.</param>
+ /// <param name="noPlay">Whether go direct to the EndFrame. It is false by default.</param>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public void Show(LottieAnimationView lottieView, bool noPlay = false)
{
if (!BeReadyToShow(lottieView))
{
}
lottieView.SetMinMaxFrame(StartFrame, Math.Min(EndFrame, lottieView.TotalFrame - 1));
- lottieView.CurrentFrame = StartFrame;
- if (!noPlay && !IsStillImage())
+ if (IsStillImage() || noPlay)
{
+ lottieView.CurrentFrame = EndFrame;
+ }
+ else
+ {
+ lottieView.CurrentFrame = StartFrame;
lottieView.Play();
}
}
+ /// <inheritdoc/>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public object Clone() => new LottieFrameInfo(StartFrame, EndFrame);
+
private bool BeReadyToShow(LottieAnimationView lottieView)
{
// Validate input lottieView
- if (null== lottieView || lottieView.PlayState == LottieAnimationView.PlayStateType.Invalid)
+ if (null == lottieView || lottieView.PlayState == LottieAnimationView.PlayStateType.Invalid)
{
return false;
}
return true;
}
}
-}
\ No newline at end of file
+}