Skip to content

Commit

Permalink
Fix loop property mapping (#24)
Browse files Browse the repository at this point in the history
  • Loading branch information
matmork authored Aug 30, 2024
2 parents b0f5d9b + 4add8d1 commit e06ddb5
Show file tree
Hide file tree
Showing 45 changed files with 1,917 additions and 222 deletions.
2 changes: 2 additions & 0 deletions samples/Example/Pages/ControlPlaybackPage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@
<riveMaui:RivePlayer x:Name="RivePlayer"
Margin="0,20,0,0"
AutoPlay="False"
Loop="Loop"
ResourceName="runner"
Fit="Cover"
AnimationName="run"
HeightRequest="500" />

<HorizontalStackLayout Spacing="10"
Expand Down
4 changes: 2 additions & 2 deletions samples/Example/Resources/Styles/Styles.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -412,8 +412,8 @@

<Style TargetType="NavigationPage">
<Setter Property="BarBackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource OffBlack}}" />
<Setter Property="BarTextColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource White}}" />
<Setter Property="IconColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource White}}" />
<Setter Property="BarTextColor" Value="{AppThemeBinding Light={StaticResource OffBlack}, Dark={StaticResource White}}" />
<Setter Property="IconColor" Value="{AppThemeBinding Light={StaticResource OffBlack}, Dark={StaticResource White}}" />
</Style>

<Style TargetType="TabbedPage">
Expand Down
2 changes: 1 addition & 1 deletion src/Rive.Android/Rive.Android.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<PackageId>Rive.Android</PackageId>
<Title>Rive Android</Title>
<Description>Wrapper around the Android runtime</Description>
<VersionPrefix>1.0.1</VersionPrefix>
<VersionPrefix>1.0.2</VersionPrefix>
<PackageProjectUrl>https://github.com/matmork/rive-maui</PackageProjectUrl>
<RepositoryUrl>https://github.com/matmork/rive-maui</RepositoryUrl>
<IncludeSymbols>true</IncludeSymbols>
Expand Down
2 changes: 1 addition & 1 deletion src/Rive.Android/Transforms/Metadata.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
<remove-node path="/api/package[@name='app.rive.runtime.kotlin.core']/class[@name='BytesRequest']"/>

<attr path="/api/package[@name='app.rive.runtime.kotlin.core']/class[@name='Loop']/field[@name='LOOP']"
name="name">LOOP2
name="managedName">Loop2
</attr>

</metadata>
2 changes: 1 addition & 1 deletion src/Rive.Maui/EventReceivedArgs.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
namespace Rive.Maui;

public record EventReceivedArgs(string Name, RivePlayerEvent Type, Dictionary<string, object> Properties);
public record EventReceivedArgs(string Name, RivePlayerEvent Type, Dictionary<string, object>? Properties);
50 changes: 43 additions & 7 deletions src/Rive.Maui/Platforms/Android/RivePlayerRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -124,14 +124,18 @@ public static void MapArtboardName(RivePlayerRenderer handler, RivePlayer view)
handler._riveAnimationView.ArtboardName = view.ArtboardName;
}

public static void MapAnimationProperties(RivePlayerRenderer handler, RivePlayer view)
public static void MapAnimationName(RivePlayerRenderer handler, RivePlayer view)
{
if (!string.IsNullOrWhiteSpace(view.AnimationName))
{
var riveLoop = view.Loop.AsRive();
var riveDirection = view.Direction.AsRive();
if (string.IsNullOrWhiteSpace(view.AnimationName))
return;

handler._riveAnimationView?.Play(view.AnimationName, riveLoop, riveDirection, string.IsNullOrWhiteSpace(view.StateMachineName), true);
var riveLoop = view.Loop.AsRive();
var riveDirection = view.Direction.AsRive();

if (view.AutoPlay)
{
handler._riveAnimationView?.Stop();
handler._riveAnimationView?.Play(view.AnimationName, riveLoop, riveDirection, false, true);
}
}

Expand Down Expand Up @@ -173,12 +177,44 @@ public static void MapAlignment(RivePlayerRenderer handler, RivePlayer view)
handler._riveAnimationView.Alignment = riveAlignment;
}

public static void MapLoop(RivePlayerRenderer handler, RivePlayer view)
{
var rendererAttributes = handler._riveAnimationView?.GetRendererAttributes();
if (rendererAttributes != null)
rendererAttributes.Loop = view.Loop.AsRive();
}

public static void MapDirection(RivePlayerRenderer handler, RivePlayer view)
{
//
}

public static void MapPlay(RivePlayerRenderer handler, RivePlayer view, object? args)
{
var riveLoop = view.Loop.AsRive();
var riveDirection = view.Direction.AsRive();

handler._riveAnimationView?.Play(riveLoop, riveDirection, true);
if (!string.IsNullOrWhiteSpace(view.AnimationName))
{
handler._riveAnimationView?.Play(view.AnimationName, riveLoop, riveDirection, false, true);
return;
}

var stateMachineName = !string.IsNullOrWhiteSpace(view.StateMachineName)
? view.StateMachineName
: handler._riveAnimationView?.Controller.ActiveArtboard?.StateMachineNames.FirstOrDefault();

if (!string.IsNullOrWhiteSpace(stateMachineName))
{
handler._riveAnimationView?.Play(stateMachineName, riveLoop, riveDirection, true, true);
return;
}

var firstAnimationName = handler._riveAnimationView?.Controller.ActiveArtboard?.AnimationNames.FirstOrDefault();
if (!string.IsNullOrWhiteSpace(firstAnimationName))
{
handler._riveAnimationView?.Play(firstAnimationName, riveLoop, riveDirection, false, true);
}
}

public static void MapPause(RivePlayerRenderer handler, RivePlayer view, object? args)
Expand Down
27 changes: 5 additions & 22 deletions src/Rive.Maui/Platforms/iOS/CustomRiveView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ public void UpdateAnimation()

if (!string.IsNullOrWhiteSpace(AnimationName) || _riveArtboard?.StateMachineCount == 0)
{
_riveAnimation?.Dispose();
_riveAnimation = !string.IsNullOrWhiteSpace(AnimationName)
? _riveArtboard?.AnimationFromName(AnimationName, out _)
: _riveArtboard?.AnimationFromIndex(0, out _);
Expand Down Expand Up @@ -118,7 +119,7 @@ private void Tick()
if (evt != null)
{
var properties = evt.Properties
.ToDictionary<KeyValuePair<NSString, NSObject>, string, object>(k => k.Key, k => k.Value);
?.ToDictionary<KeyValuePair<NSString, NSObject>, string, object>(k => k.Key, k => k.Value);
var args = new EventReceivedArgs(evt.Name, (RivePlayerEvent)evt.Type, properties);
control.EventReceivedManager.HandleEvent(this, args, nameof(RivePlayer.EventReceived));
control.EventReceivedCommand?.Execute(args);
Expand Down Expand Up @@ -201,29 +202,11 @@ public override void DrawRive(CGRect rect, CGSize size)
DrawWithArtboard(_riveArtboard);
}

public void PlayAnimation(string animationName)
{
if (string.Equals(animationName, AnimationName, StringComparison.OrdinalIgnoreCase))
return;

if (_riveArtboard?.AnimationFromName(animationName, out var error) is { } animation && error == null)
{
animation.Loop((int)Loop);
animation.Direction((int)Direction);

if (animation.HasEnded())
{
animation.Time = 0;
}

_riveAnimation?.Dispose();
_riveAnimation = null;
_riveAnimation = animation;
}
}

public void Play()
{
if (_riveAnimation?.HasEnded() == true)
_riveAnimation.Time = 0;

if (_displayLink == null)
{
CreateDisplayLink();
Expand Down
26 changes: 19 additions & 7 deletions src/Rive.Maui/Platforms/iOS/RivePlayerRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,14 +71,14 @@ public static void MapArtboardName(RivePlayerRenderer handler, RivePlayer view)
}
}

public static void MapAnimationProperties(RivePlayerRenderer handler, RivePlayer view)
public static void MapAnimationName(RivePlayerRenderer handler, RivePlayer view)
{
if (handler._riveAnimationView != null && !string.IsNullOrWhiteSpace(view.AnimationName))
{
handler._riveAnimationView.Loop = view.Loop.AsRive();
handler._riveAnimationView.Direction = view.Direction.AsRive();
handler._riveAnimationView.PlayAnimation(view.AnimationName);
}
if (handler._riveAnimationView == null || string.IsNullOrWhiteSpace(view.AnimationName))
return;

handler._riveAnimationView.AnimationName = view.AnimationName;
handler._riveAnimationView.ResetProperties(false);
handler._riveAnimationView.UpdateAnimation();
}

public static void MapStateMachineName(RivePlayerRenderer handler, RivePlayer view)
Expand Down Expand Up @@ -113,6 +113,18 @@ public static void MapAlignment(RivePlayerRenderer handler, RivePlayer view)
handler._riveAnimationView.Alignment = view.Alignment.AsRive();
}

public static void MapLoop(RivePlayerRenderer handler, RivePlayer view)
{
if (handler._riveAnimationView != null)
handler._riveAnimationView.Loop = view.Loop.AsRive();
}

public static void MapDirection(RivePlayerRenderer handler, RivePlayer view)
{
if (handler._riveAnimationView != null)
handler._riveAnimationView.Direction = view.Direction.AsRive();
}

public static void MapPlay(RivePlayerRenderer handler, RivePlayer view, object? args)
=> handler._riveAnimationView?.Play();

Expand Down
2 changes: 1 addition & 1 deletion src/Rive.Maui/Rive.Maui.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<PackageId>Rive.Maui</PackageId>
<Title>Rive Maui</Title>
<Description>Rive animations in Maui using iOS/Android runtimes</Description>
<VersionPrefix>1.0.1</VersionPrefix>
<VersionPrefix>1.0.2</VersionPrefix>
<PackageProjectUrl>https://github.com/matmork/rive-maui</PackageProjectUrl>
<RepositoryUrl>https://github.com/matmork/rive-maui</RepositoryUrl>
<IncludeSymbols>true</IncludeSymbols>
Expand Down
2 changes: 1 addition & 1 deletion src/Rive.Maui/RivePlayerEnums.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,6 @@ public enum RiveIOSRendererType

public enum RivePlayerEvent
{
GeneralEvent,
GeneralEvent = 407,
OpenURLEvent
}
10 changes: 6 additions & 4 deletions src/Rive.Maui/RivePlayerRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@ namespace Rive.Maui;
public interface IRivePlayerRenderer
{
static abstract void MapArtboardName(RivePlayerRenderer handler, RivePlayer view);
static abstract void MapAnimationProperties(RivePlayerRenderer handler, RivePlayer view);
static abstract void MapAnimationName(RivePlayerRenderer handler, RivePlayer view);
static abstract void MapStateMachineName(RivePlayerRenderer handler, RivePlayer view);
static abstract void MapResourceName(RivePlayerRenderer handler, RivePlayer view);
static abstract void MapAutoPlay(RivePlayerRenderer handler, RivePlayer view);
static abstract void MapFit(RivePlayerRenderer handler, RivePlayer view);
static abstract void MapAlignment(RivePlayerRenderer handler, RivePlayer view);
static abstract void MapLoop(RivePlayerRenderer handler, RivePlayer view);
static abstract void MapDirection(RivePlayerRenderer handler, RivePlayer view);
static abstract void MapPlay(RivePlayerRenderer handler, RivePlayer view, object? args);
static abstract void MapPause(RivePlayerRenderer handler, RivePlayer view, object? args);
static abstract void MapStop(RivePlayerRenderer handler, RivePlayer view, object? args);
Expand All @@ -25,14 +27,14 @@ public partial class RivePlayerRenderer
new PropertyMapper<RivePlayer, RivePlayerRenderer>(ViewRenderer.VisualElementRendererMapper)
{
[nameof(RivePlayer.ArtboardName)] = MapArtboardName,
[nameof(RivePlayer.AnimationName)] = MapAnimationProperties,
[nameof(RivePlayer.AnimationName)] = MapAnimationName,
[nameof(RivePlayer.StateMachineName)] = MapStateMachineName,
[nameof(RivePlayer.ResourceName)] = MapResourceName,
[nameof(RivePlayer.AutoPlay)] = MapAutoPlay,
[nameof(RivePlayer.Fit)] = MapFit,
[nameof(RivePlayer.Alignment)] = MapAlignment,
[nameof(RivePlayer.Loop)] = MapAnimationProperties,
[nameof(RivePlayer.Direction)] = MapAnimationProperties
[nameof(RivePlayer.Loop)] = MapLoop,
[nameof(RivePlayer.Direction)] = MapDirection
};

public static readonly CommandMapper<RivePlayer, RivePlayerRenderer> CommandMapper = new(ViewRenderer.VisualElementRendererCommandMapper)
Expand Down
18 changes: 14 additions & 4 deletions src/Rive.iOS/ApiDefinitions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -963,6 +963,14 @@ interface RiveView
[NullAllowed, Export ("playerDelegate", ArgumentSemantic.Weak)]
NSObject WeakPlayerDelegate { get; set; }

/*// @property (nonatomic) CGRect bounds;
[Export ("bounds", ArgumentSemantic.Assign)]
CGRect Bounds { get; set; }*/

/*// @property (nonatomic) CGRect frame;
[Export ("frame", ArgumentSemantic.Assign)]
CGRect Frame { get; set; }*/

/*// -(instancetype _Nonnull)initWithCoder:(NSCoder * _Nonnull)aDecoder __attribute__((objc_designated_initializer));
[Export ("initWithCoder:")]
[DesignatedInitializer]
Expand All @@ -976,6 +984,10 @@ interface RiveView
[Export ("drawRive:size:")]
void DrawRive (CGRect rect, CGSize size);*/

/*// -(void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
[Export ("traitCollectionDidChange:")]
void TraitCollectionDidChange ([NullAllowed] UITraitCollection previousTraitCollection);*/

// -(void)touchesBegan:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
[Export ("touchesBegan:withEvent:")]
void TouchesBegan (NSSet<UITouch> touches, [NullAllowed] UIEvent @event);
Expand Down Expand Up @@ -1098,11 +1110,9 @@ interface RiveViewModel : RiveFileDelegate, RivePlayerDelegate, RiveStateMachine
[Export ("playerWithPlayedWithModel:")]
void PlayerWithPlayedWithModel ([NullAllowed] RiveModel riveModel);*/

/*
// -(void)playerWithPausedWithModel:(RiveModel * _Nullable)riveModel;
/*// -(void)playerWithPausedWithModel:(RiveModel * _Nullable)riveModel;
[Export ("playerWithPausedWithModel:")]
void PlayerWithPausedWithModel ([NullAllowed] RiveModel riveModel);
*/
void PlayerWithPausedWithModel ([NullAllowed] RiveModel riveModel);*/

/*// -(void)playerWithLoopedWithModel:(RiveModel * _Nullable)riveModel type:(NSInteger)type;
[Export ("playerWithLoopedWithModel:type:")]
Expand Down
2 changes: 1 addition & 1 deletion src/Rive.iOS/README.MD
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Rive.iOS

Current version
[6.0.4](https://github.com/rive-app/rive-ios)
[6.0.7](https://github.com/rive-app/rive-ios)

```
sharpie bind \
Expand Down
2 changes: 1 addition & 1 deletion src/Rive.iOS/Rive.iOS.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<PackageId>Rive.iOS</PackageId>
<Title>Rive iOS</Title>
<Description>Wrapper around the iOS runtime</Description>
<VersionPrefix>1.0.1</VersionPrefix>
<VersionPrefix>1.0.2</VersionPrefix>
<PackageProjectUrl>https://github.com/matmork/rive-maui</PackageProjectUrl>
<RepositoryUrl>https://github.com/matmork/rive-maui</RepositoryUrl>
<IncludeSymbols>true</IncludeSymbols>
Expand Down
20 changes: 10 additions & 10 deletions src/Rive.iOS/RiveRuntime.xcframework/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
<array>
<dict>
<key>BinaryPath</key>
<string>RiveRuntime.framework/RiveRuntime</string>
<string>RiveRuntime.framework/Versions/A/RiveRuntime</string>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-simulator</string>
<string>macos-arm64_x86_64</string>
<key>LibraryPath</key>
<string>RiveRuntime.framework</string>
<key>SupportedArchitectures</key>
Expand All @@ -17,38 +17,38 @@
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
<string>macos</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>RiveRuntime.framework/Versions/A/RiveRuntime</string>
<string>RiveRuntime.framework/RiveRuntime</string>
<key>LibraryIdentifier</key>
<string>macos-arm64_x86_64</string>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>RiveRuntime.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>macos</string>
<string>ios</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>RiveRuntime.framework/RiveRuntime</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<string>ios-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>RiveRuntime.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
Expand Down
Loading

0 comments on commit e06ddb5

Please sign in to comment.