binding/SkiaSharp.Skottie/AnimationBuilder.cs (73 lines of code) (raw):
using System;
using System.IO;
using SkiaSharp.Resources;
namespace SkiaSharp.Skottie
{
public sealed unsafe class AnimationBuilder : SKObject, ISKSkipObjectRegistration
{
internal AnimationBuilder (AnimationBuilderFlags flags)
: this (SkottieApi.skottie_animation_builder_new (flags), true)
{
}
internal AnimationBuilder (IntPtr handle, bool owns)
: base (handle, owns)
{
}
public AnimationBuilder SetFontManager (SKFontManager fontManager)
{
_ = fontManager ?? throw new ArgumentNullException (nameof (fontManager));
SkottieApi.skottie_animation_builder_set_font_manager (Handle, fontManager.Handle);
Referenced (this, fontManager);
return this;
}
public AnimationBuilder SetResourceProvider (ResourceProvider resourceProvider)
{
_ = resourceProvider ?? throw new ArgumentNullException (nameof (resourceProvider));
SkottieApi.skottie_animation_builder_set_resource_provider (Handle, resourceProvider.Handle);
Referenced (this, resourceProvider);
return this;
}
public AnimationBuilderStats Stats
{
get
{
AnimationBuilderStats stats;
SkottieApi.skottie_animation_builder_get_stats (Handle, &stats);
return stats;
}
}
public Animation? Build (Stream stream)
{
_ = stream ?? throw new ArgumentNullException (nameof (stream));
using var data = SKData.Create (stream);
return Build (data);
}
public Animation? Build (SKStream stream)
{
_ = stream ?? throw new ArgumentNullException (nameof (stream));
using var data = SKData.Create (stream);
return Build (data);
}
public Animation? Build (SKData data)
{
_ = data ?? throw new ArgumentNullException (nameof (data));
var preamble = Utils.GetPreambleSize (data);
var span = data.AsSpan ().Slice (preamble);
fixed (byte* ptr = span) {
try {
return Animation.GetObject (SkottieApi.skottie_animation_builder_make_from_data (Handle, ptr, (IntPtr)span.Length));
} finally {
GC.KeepAlive(data);
}
}
}
public Animation? Build (string path)
{
_ = path ?? throw new ArgumentNullException (nameof (path));
using var data = SKData.Create (path);
return Build (data);
}
protected override void DisposeNative ()
=> SkottieApi.skottie_animation_builder_delete (Handle);
}
}