/// <summary>
/// TotalFrame of animation.
+ /// If resouce is still not be loaded, or invalid resource, the value is 0.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public new int TotalFrame
maximumFrame = (maxFrame) > 0 ? maxFrame : 0;
isMinMaxFrameSet = minMaxSetTypes.SetByMinAndMaxFrameMethod;
+ // Remove marker information.
+ minimumFrameMarker = null;
+ maximumFrameMarker = null;
+
if (minimumFrame > maximumFrame)
{
NUILog.Debug($" [{GetId()}] minimumFrame:{minimumFrame} > maximumFrame:{maximumFrame}) ]AnimatedVectorImageView END]");
/// 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>
+ /// <remarks>
+ /// If we use invaliad markers, or we load image asynchronous and load is not finished yet,
+ /// CurrentFrame might not be matched with real value.
+ /// </remarks>
/// <param name="marker1">First marker</param>
/// <param name="marker2">Second marker</param>
[EditorBrowsable(EditorBrowsableState.Never)]
maximumFrameMarker = marker2;
isMinMaxFrameSet = minMaxSetTypes.SetByMinAndMaxFrameByMarkerMethod;
+ // Remove frame information.
+ minimumFrame = -1;
+ maximumFrame = -1;
+
NUILog.Debug($" [{GetId()}] minimumFrameMarker:{minimumFrameMarker}, maximumFrameMarker:{maximumFrameMarker}) ]AnimatedVectorImageView END]");
}
maximumFrame = (maxFrame) > 0 ? maxFrame : 0;
isMinMaxFrameSet = minMaxSetTypes.SetByBaseSetMinMaxFrameMethod;
+ // Remove marker information.
+ minimumFrameMarker = null;
+ maximumFrameMarker = null;
+
if (minimumFrame >= totalFrameNum)
{
minimumFrame = totalFrameNum - 1;
public new void SetMinMaxFrameByMarker(string marker1, string marker2 = null)
{
NUILog.Debug($"SetMinMaxFrameByMarker({marker1}, {marker2})");
+
+ minimumFrameMarker = marker1;
+ maximumFrameMarker = marker2;
isMinMaxFrameSet = minMaxSetTypes.SetByMarker;
+
+ // Remove frame information.
+ minimumFrame = -1;
+ maximumFrame = -1;
+
base.SetMinMaxFrameByMarker(marker1, marker2);
}
base.CurrentFrame = minimumFrame;
innerCurrentFrame = minimumFrame;
}
+ else
+ {
+ Tizen.Log.Error("NUI", $"[Warning] Play with invalid marker! Current frame become 0\n");
+ base.CurrentFrame = 0;
+ innerCurrentFrame = 0;
+ }
break;
case minMaxSetTypes.SetByMinAndMaxFrameMethod:
break;
case minMaxSetTypes.SetByMinAndMaxFrameByMarkerMethod:
- GetFrameValueFromMarkerInfo();
- goto case minMaxSetTypes.SetByMinAndMaxFrameMethod;
+ if (GetFrameValueFromMarkerInfo())
+ {
+ goto case minMaxSetTypes.SetByMinAndMaxFrameMethod;
+ }
+ else
+ {
+ switch (endAction)
+ {
+ case EndActions.Cancel:
+ innerCurrentFrame = base.CurrentFrame;
+ break;
+ case EndActions.Discard:
+ Tizen.Log.Error("NUI", $"[Warning] Stop(Discard) with invalid marker! Current frame become 0\n");
+ base.CurrentFrame = innerCurrentFrame = 0;
+ break;
+ case EndActions.StopFinal:
+ Tizen.Log.Error("NUI", $"[Warning] Stop(StopFinal) with invalid marker! Current frame become {totalFrameNum - 1}\n");
+ base.CurrentFrame = innerCurrentFrame = totalFrameNum - 1;
+ break;
+ }
+ break;
+ }
case minMaxSetTypes.SetByMinAndMaxFrameMethod:
switch (endAction)
{
if (markerInfo.Item1 == minimumFrameMarker)
{
- if (maximumFrameMarker == null)
+ if (string.IsNullOrEmpty(maximumFrameMarker))
{
minimumMarkerFoundSuccess = true;
maximumMarkerFoundSuccess = true;
}
// Note : let we insure to get marker frame value only one time per each frame marker setter
- minimumFrameMarker = maximumFrameMarker = null;
+ minimumFrameMarker = null;
+ maximumFrameMarker = null;
isMinMaxFrameSet = minMaxSetTypes.SetByMinAndMaxFrameMethod;
return true;
}
else
{
Tizen.Log.Error("NUI", $"Fail to get frame from marker = (minimumFrameMarker:{minimumFrameMarker}, maximumFrameMarker:{maximumFrameMarker}). Maybe file is not loaded yet, or invalid marker used. url : {resourceUrl}\n");
-
- minimumFrame = 0;
- maximumFrame = totalFrameNum - 1;
NUILog.Debug($" [{GetId()}] GetFrameValueFromMarkerInfo Failed! frame set as {minimumFrame} ~ {maximumFrame} : marker = (minimumFrameMarker:{minimumFrameMarker}, maximumFrameMarker:{maximumFrameMarker})");
return false;
}
}
/// <summary>
- /// Get the number of total frames
+ /// Get the number of total frames.
+ /// If resouce is still not be loaded, or invalid resource, the value is 0.
/// </summary>
/// <since_tizen> 7 </since_tizen>
public int TotalFrame
currentStates.framePlayRangeMin = minFrame;
currentStates.framePlayRangeMax = maxFrame;
+ // Remove marker information.
+ currentStates.mark1 = null;
+ currentStates.mark2 = null;
+
Interop.View.InternalUpdateVisualPropertyIntPair(this.SwigCPtr, ImageView.Property.IMAGE, ImageVisualProperty.PlayRange, currentStates.framePlayRangeMin, currentStates.framePlayRangeMax);
NUILog.Debug($" [{GetId()}] currentStates.min:({currentStates.framePlayRangeMin}, max:{currentStates.framePlayRangeMax})>");
/// <summary>
/// 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. *
+ /// 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>
/// <param name="marker1">First marker</param>
/// <param name="marker2">Second marker</param>
[EditorBrowsable(EditorBrowsableState.Never)]
public void SetMinMaxFrameByMarker(string marker1, string marker2 = null)
{
- if (currentStates.mark1 != marker1 || currentStates.mark2 != marker2)
+ string marker1OrEmpty = marker1 ?? ""; // mark1 should not be null
+ if (currentStates.mark1 != marker1OrEmpty || currentStates.mark2 != marker2)
{
- NUILog.Debug($"< [{GetId()}] SetMinMaxFrameByMarker({marker1}, {marker2})");
+ NUILog.Debug($"< [{GetId()}] SetMinMaxFrameByMarker({marker1OrEmpty}, {marker2})");
currentStates.changed = true;
- currentStates.mark1 = marker1;
+ currentStates.mark1 = marker1OrEmpty;
currentStates.mark2 = marker2;
+ // Remove frame information.
+ currentStates.framePlayRangeMin = -1;
+ currentStates.framePlayRangeMax = -1;
+
if (string.IsNullOrEmpty(currentStates.mark2))
{
Interop.View.InternalUpdateVisualPropertyString(this.SwigCPtr, ImageView.Property.IMAGE, ImageVisualProperty.PlayRange, currentStates.mark1);