Dalamud/Dalamud/Interface/ManagedFontAtlas/Internals/LockedImFont.cs
2025-04-06 20:59:23 +02:00

61 lines
1.6 KiB
C#

using Dalamud.Bindings.ImGui;
using Dalamud.Utility;
namespace Dalamud.Interface.ManagedFontAtlas.Internals;
/// <summary>
/// The implementation for <see cref="ILockedImFont"/>.
/// </summary>
internal class LockedImFont : ILockedImFont
{
private IRefCountable? owner;
/// <summary>
/// Initializes a new instance of the <see cref="LockedImFont"/> class.
/// Ownership of reference of <paramref name="owner"/> is transferred.
/// </summary>
/// <param name="font">The contained font.</param>
/// <param name="owner">The owner.</param>
/// <returns>The rented instance of <see cref="LockedImFont"/>.</returns>
internal LockedImFont(ImFontPtr font, IRefCountable owner)
{
this.ImFont = font;
this.owner = owner;
}
/// <summary>
/// Finalizes an instance of the <see cref="LockedImFont"/> class.
/// </summary>
~LockedImFont() => this.FreeOwner();
/// <inheritdoc/>
public ImFontPtr ImFont { get; private set; }
/// <inheritdoc/>
public ILockedImFont NewRef()
{
if (this.owner is null)
throw new ObjectDisposedException(nameof(LockedImFont));
var newRef = new LockedImFont(this.ImFont, this.owner);
this.owner.AddRef();
return newRef;
}
/// <inheritdoc/>
public void Dispose()
{
this.FreeOwner();
GC.SuppressFinalize(this);
}
private void FreeOwner()
{
if (this.owner is null)
return;
this.owner.Release();
this.owner = null;
this.ImFont = default;
}
}