Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[NUI] Remove old frame range if we set marker + Minor fix up when marker invalid #5747

Merged
merged 1 commit into from
Nov 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ private int InternalRepeatCount

/// <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
Expand Down Expand Up @@ -318,6 +319,10 @@ public void SetMinAndMaxFrame(int minFrame, int maxFrame)
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]");
Expand All @@ -332,6 +337,10 @@ public void SetMinAndMaxFrame(int minFrame, int maxFrame)
/// 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)]
Expand All @@ -343,6 +352,10 @@ public void SetMinAndMaxFrameByMarker(string marker1, string marker2 = null)
maximumFrameMarker = marker2;
isMinMaxFrameSet = minMaxSetTypes.SetByMinAndMaxFrameByMarkerMethod;

// Remove frame information.
minimumFrame = -1;
maximumFrame = -1;

NUILog.Debug($" [{GetId()}] minimumFrameMarker:{minimumFrameMarker}, maximumFrameMarker:{maximumFrameMarker}) ]AnimatedVectorImageView END]");
}

Expand All @@ -360,6 +373,10 @@ public void SetMinAndMaxFrameByMarker(string marker1, string marker2 = null)
maximumFrame = (maxFrame) > 0 ? maxFrame : 0;
isMinMaxFrameSet = minMaxSetTypes.SetByBaseSetMinMaxFrameMethod;

// Remove marker information.
minimumFrameMarker = null;
maximumFrameMarker = null;

if (minimumFrame >= totalFrameNum)
{
minimumFrame = totalFrameNum - 1;
Expand All @@ -384,7 +401,15 @@ public void SetMinAndMaxFrameByMarker(string marker1, string marker2 = null)
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);
}

Expand Down Expand Up @@ -416,6 +441,12 @@ public void SetMinAndMaxFrameByMarker(string marker1, string marker2 = null)
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:
Expand Down Expand Up @@ -522,8 +553,28 @@ public void Stop(EndActions endAction = EndActions.Cancel)
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)
Expand Down Expand Up @@ -630,7 +681,7 @@ internal bool GetFrameValueFromMarkerInfo()
{
if (markerInfo.Item1 == minimumFrameMarker)
{
if (maximumFrameMarker == null)
if (string.IsNullOrEmpty(maximumFrameMarker))
{
minimumMarkerFoundSuccess = true;
maximumMarkerFoundSuccess = true;
Expand Down Expand Up @@ -662,16 +713,14 @@ internal bool GetFrameValueFromMarkerInfo()
}

// 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;
}
Expand Down
20 changes: 15 additions & 5 deletions src/Tizen.NUI/src/public/BaseComponents/LottieAnimationView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,8 @@ public PlayStateType PlayState
}

/// <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
Expand Down Expand Up @@ -552,6 +553,10 @@ public void SetMinMaxFrame(int minFrame, int maxFrame)
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})>");
Expand Down Expand Up @@ -714,22 +719,27 @@ public List<Tuple<string, int, int>> GetMarkerInfo()
/// <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>
// This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
[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);
Expand Down
Loading