Add IconCache
This commit is contained in:
parent
89448838a1
commit
7f83ece6a0
53
IconCache.cs
Normal file
53
IconCache.cs
Normal file
@ -0,0 +1,53 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Dalamud.Interface.Internal;
|
||||
using Dalamud.Plugin.Services;
|
||||
|
||||
namespace LLib;
|
||||
|
||||
public sealed class IconCache : IDisposable
|
||||
{
|
||||
private readonly ITextureProvider _textureProvider;
|
||||
private readonly Dictionary<uint, TextureContainer> _textureWraps = new();
|
||||
|
||||
public IconCache(ITextureProvider textureProvider)
|
||||
{
|
||||
_textureProvider = textureProvider;
|
||||
}
|
||||
|
||||
public IDalamudTextureWrap? GetIcon(uint iconId)
|
||||
{
|
||||
if (_textureWraps.TryGetValue(iconId, out TextureContainer? container))
|
||||
return container.Texture;
|
||||
|
||||
var iconTex = _textureProvider.GetIcon(iconId);
|
||||
if (iconTex != null)
|
||||
{
|
||||
if (iconTex.ImGuiHandle != nint.Zero)
|
||||
{
|
||||
_textureWraps[iconId] = new TextureContainer { Texture = iconTex };
|
||||
return iconTex;
|
||||
}
|
||||
|
||||
iconTex.Dispose();
|
||||
}
|
||||
|
||||
_textureWraps[iconId] = new TextureContainer { Texture = null };
|
||||
return null;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
foreach (TextureContainer container in _textureWraps.Values)
|
||||
container.Dispose();
|
||||
|
||||
_textureWraps.Clear();
|
||||
}
|
||||
|
||||
private sealed class TextureContainer : IDisposable
|
||||
{
|
||||
public required IDalamudTextureWrap? Texture { get; init; }
|
||||
|
||||
public void Dispose() => Texture?.Dispose();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user