mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-12 18:27:23 +01:00
Turn impls of IconSource internal
This commit is contained in:
parent
42b6f8fd4b
commit
f434946137
11 changed files with 153 additions and 68 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
using Dalamud.Interface.ImGuiNotification.IconSource;
|
using Dalamud.Interface.ImGuiNotification.Internal.IconSource;
|
||||||
using Dalamud.Interface.Internal.Notifications;
|
using Dalamud.Interface.Internal.Notifications;
|
||||||
|
|
||||||
namespace Dalamud.Interface.ImGuiNotification;
|
namespace Dalamud.Interface.ImGuiNotification;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,10 @@
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
using Dalamud.Game.Text;
|
||||||
|
using Dalamud.Interface.ImGuiNotification.Internal.IconSource;
|
||||||
|
using Dalamud.Interface.Internal;
|
||||||
|
|
||||||
namespace Dalamud.Interface.ImGuiNotification;
|
namespace Dalamud.Interface.ImGuiNotification;
|
||||||
|
|
||||||
/// <summary>Icon source for <see cref="INotification"/>.</summary>
|
/// <summary>Icon source for <see cref="INotification"/>.</summary>
|
||||||
|
|
@ -12,6 +19,67 @@ public interface INotificationIconSource : ICloneable, IDisposable
|
||||||
INotificationMaterializedIcon Materialize();
|
INotificationMaterializedIcon Materialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>Gets a new instance of <see cref="INotificationIconSource"/> that will source the icon from an
|
||||||
|
/// <see cref="SeIconChar"/>.</summary>
|
||||||
|
/// <param name="iconChar">The icon character.</param>
|
||||||
|
/// <returns>A new instance of <see cref="INotificationIconSource"/> that should be disposed after use.</returns>
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static INotificationIconSource From(SeIconChar iconChar) => new SeIconCharIconSource(iconChar);
|
||||||
|
|
||||||
|
/// <summary>Gets a new instance of <see cref="INotificationIconSource"/> that will source the icon from an
|
||||||
|
/// <see cref="FontAwesomeIcon"/>.</summary>
|
||||||
|
/// <param name="iconChar">The icon character.</param>
|
||||||
|
/// <returns>A new instance of <see cref="INotificationIconSource"/> that should be disposed after use.</returns>
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static INotificationIconSource From(FontAwesomeIcon iconChar) => new FontAwesomeIconIconSource(iconChar);
|
||||||
|
|
||||||
|
/// <summary>Gets a new instance of <see cref="INotificationIconSource"/> that will source the icon from an
|
||||||
|
/// <see cref="IDalamudTextureWrap"/>.</summary>
|
||||||
|
/// <param name="wrap">The texture wrap.</param>
|
||||||
|
/// <param name="takeOwnership">
|
||||||
|
/// If <c>true</c>, this class will own the passed <paramref name="wrap"/>, and you <b>must not</b> call
|
||||||
|
/// <see cref="IDisposable.Dispose"/> on the passed wrap.
|
||||||
|
/// If <c>false</c>, this class will create a new reference of the passed wrap, and you <b>should</b> call
|
||||||
|
/// <see cref="IDisposable.Dispose"/> on the passed wrap.
|
||||||
|
/// In both cases, the returned object must be disposed after use.</param>
|
||||||
|
/// <returns>A new instance of <see cref="INotificationIconSource"/> that should be disposed after use.</returns>
|
||||||
|
/// <remarks>If any errors are thrown or <paramref name="wrap"/> is <c>null</c>, the default icon will be displayed
|
||||||
|
/// instead.</remarks>
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static INotificationIconSource From(IDalamudTextureWrap? wrap, bool takeOwnership = true) =>
|
||||||
|
new TextureWrapIconSource(wrap, takeOwnership);
|
||||||
|
|
||||||
|
/// <summary>Gets a new instance of <see cref="INotificationIconSource"/> that will source the icon from an
|
||||||
|
/// <see cref="Func{TResult}"/> returning a <see cref="Task{TResult}"/> resulting in an
|
||||||
|
/// <see cref="IDalamudTextureWrap"/>.</summary>
|
||||||
|
/// <param name="wrapTaskFunc">The function that returns a task that results a texture wrap.</param>
|
||||||
|
/// <returns>A new instance of <see cref="INotificationIconSource"/> that should be disposed after use.</returns>
|
||||||
|
/// <remarks>If any errors are thrown or <paramref name="wrapTaskFunc"/> is <c>null</c>, the default icon will be
|
||||||
|
/// displayed instead.<br />
|
||||||
|
/// Use <see cref="Task.FromResult{TResult}"/> if you will have a wrap available without waiting.<br />
|
||||||
|
/// <paramref name="wrapTaskFunc"/> should not contain a reference to a resource; if it does, the resource will be
|
||||||
|
/// released when all instances of <see cref="INotificationIconSource"/> derived from the returned object are freed
|
||||||
|
/// by the garbage collector, which will result in non-deterministic resource releases.</remarks>
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static INotificationIconSource From(Func<Task<IDalamudTextureWrap?>?>? wrapTaskFunc) =>
|
||||||
|
new TextureWrapTaskIconSource(wrapTaskFunc);
|
||||||
|
|
||||||
|
/// <summary>Gets a new instance of <see cref="INotificationIconSource"/> that will source the icon from a texture
|
||||||
|
/// file shipped as a part of the game resources.</summary>
|
||||||
|
/// <param name="gamePath">The path to a texture file in the game virtual file system.</param>
|
||||||
|
/// <returns>A new instance of <see cref="INotificationIconSource"/> that should be disposed after use.</returns>
|
||||||
|
/// <remarks>If any errors are thrown, the default icon will be displayed instead.</remarks>
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static INotificationIconSource FromGame(string gamePath) => new GamePathIconSource(gamePath);
|
||||||
|
|
||||||
|
/// <summary>Gets a new instance of <see cref="INotificationIconSource"/> that will source the icon from an image
|
||||||
|
/// file from the file system.</summary>
|
||||||
|
/// <param name="filePath">The path to an image file in the file system.</param>
|
||||||
|
/// <returns>A new instance of <see cref="INotificationIconSource"/> that should be disposed after use.</returns>
|
||||||
|
/// <remarks>If any errors are thrown, the default icon will be displayed instead.</remarks>
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static INotificationIconSource FromFile(string filePath) => new FilePathIconSource(filePath);
|
||||||
|
|
||||||
/// <inheritdoc cref="ICloneable.Clone"/>
|
/// <inheritdoc cref="ICloneable.Clone"/>
|
||||||
new INotificationIconSource Clone();
|
new INotificationIconSource Clone();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ using System.Runtime.Loader;
|
||||||
using Dalamud.Interface.Animation;
|
using Dalamud.Interface.Animation;
|
||||||
using Dalamud.Interface.Animation.EasingFunctions;
|
using Dalamud.Interface.Animation.EasingFunctions;
|
||||||
using Dalamud.Interface.Colors;
|
using Dalamud.Interface.Colors;
|
||||||
using Dalamud.Interface.ImGuiNotification.IconSource;
|
using Dalamud.Interface.ImGuiNotification.Internal.IconSource;
|
||||||
using Dalamud.Interface.Internal;
|
using Dalamud.Interface.Internal;
|
||||||
using Dalamud.Interface.Internal.Notifications;
|
using Dalamud.Interface.Internal.Notifications;
|
||||||
using Dalamud.Interface.Utility;
|
using Dalamud.Interface.Utility;
|
||||||
|
|
@ -18,7 +18,7 @@ using Serilog;
|
||||||
namespace Dalamud.Interface.ImGuiNotification.Internal;
|
namespace Dalamud.Interface.ImGuiNotification.Internal;
|
||||||
|
|
||||||
/// <summary>Represents an active notification.</summary>
|
/// <summary>Represents an active notification.</summary>
|
||||||
internal sealed class ActiveNotification : IActiveNotification, IDisposable
|
internal sealed class ActiveNotification : IActiveNotification
|
||||||
{
|
{
|
||||||
private readonly Notification underlyingNotification;
|
private readonly Notification underlyingNotification;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,33 +1,32 @@
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
|
||||||
using Dalamud.Interface.ImGuiNotification.Internal;
|
|
||||||
using Dalamud.Interface.Internal;
|
using Dalamud.Interface.Internal;
|
||||||
using Dalamud.Plugin.Internal.Types;
|
using Dalamud.Plugin.Internal.Types;
|
||||||
|
|
||||||
namespace Dalamud.Interface.ImGuiNotification.IconSource;
|
namespace Dalamud.Interface.ImGuiNotification.Internal.IconSource;
|
||||||
|
|
||||||
/// <summary>Represents the use of a texture from a file as the icon of a notification.</summary>
|
/// <summary>Represents the use of a texture from a file as the icon of a notification.</summary>
|
||||||
/// <remarks>If there was no texture loaded for any reason, the plugin icon will be displayed instead.</remarks>
|
/// <remarks>If there was no texture loaded for any reason, the plugin icon will be displayed instead.</remarks>
|
||||||
public readonly struct FilePathIconSource : INotificationIconSource.IInternal
|
internal class FilePathIconSource : INotificationIconSource.IInternal
|
||||||
{
|
{
|
||||||
/// <summary>The path to a .tex file inside the game resources.</summary>
|
/// <summary>Initializes a new instance of the <see cref="FilePathIconSource"/> class.</summary>
|
||||||
public readonly string FilePath;
|
|
||||||
|
|
||||||
/// <summary>Initializes a new instance of the <see cref="FilePathIconSource"/> struct.</summary>
|
|
||||||
/// <param name="filePath">The path to a .tex file inside the game resources.</param>
|
/// <param name="filePath">The path to a .tex file inside the game resources.</param>
|
||||||
public FilePathIconSource(string filePath) => this.FilePath = filePath;
|
public FilePathIconSource(string filePath) => this.FilePath = filePath;
|
||||||
|
|
||||||
|
/// <summary>Gets the path to a .tex file inside the game resources.</summary>
|
||||||
|
public string FilePath { get; }
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public INotificationIconSource Clone() => this;
|
public INotificationIconSource Clone() => this;
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
void IDisposable.Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
INotificationMaterializedIcon INotificationIconSource.IInternal.Materialize() =>
|
public INotificationMaterializedIcon Materialize() =>
|
||||||
new MaterializedIcon(this.FilePath);
|
new MaterializedIcon(this.FilePath);
|
||||||
|
|
||||||
private sealed class MaterializedIcon : INotificationMaterializedIcon
|
private sealed class MaterializedIcon : INotificationMaterializedIcon
|
||||||
|
|
@ -1,32 +1,31 @@
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
|
||||||
using Dalamud.Interface.ImGuiNotification.Internal;
|
|
||||||
using Dalamud.Plugin.Internal.Types;
|
using Dalamud.Plugin.Internal.Types;
|
||||||
|
|
||||||
using ImGuiNET;
|
using ImGuiNET;
|
||||||
|
|
||||||
namespace Dalamud.Interface.ImGuiNotification.IconSource;
|
namespace Dalamud.Interface.ImGuiNotification.Internal.IconSource;
|
||||||
|
|
||||||
/// <summary>Represents the use of <see cref="FontAwesomeIcon"/> as the icon of a notification.</summary>
|
/// <summary>Represents the use of <see cref="FontAwesomeIcon"/> as the icon of a notification.</summary>
|
||||||
public readonly struct FontAwesomeIconIconSource : INotificationIconSource.IInternal
|
internal class FontAwesomeIconIconSource : INotificationIconSource.IInternal
|
||||||
{
|
{
|
||||||
/// <summary>The icon character.</summary>
|
/// <summary>Initializes a new instance of the <see cref="FontAwesomeIconIconSource"/> class.</summary>
|
||||||
public readonly FontAwesomeIcon Char;
|
/// <param name="iconChar">The character.</param>
|
||||||
|
public FontAwesomeIconIconSource(FontAwesomeIcon iconChar) => this.IconChar = iconChar;
|
||||||
|
|
||||||
/// <summary>Initializes a new instance of the <see cref="FontAwesomeIconIconSource"/> struct.</summary>
|
/// <summary>Gets the icon character.</summary>
|
||||||
/// <param name="c">The character.</param>
|
public FontAwesomeIcon IconChar { get; }
|
||||||
public FontAwesomeIconIconSource(FontAwesomeIcon c) => this.Char = c;
|
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public INotificationIconSource Clone() => this;
|
public INotificationIconSource Clone() => this;
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
void IDisposable.Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
INotificationMaterializedIcon INotificationIconSource.IInternal.Materialize() => new MaterializedIcon(this.Char);
|
public INotificationMaterializedIcon Materialize() => new MaterializedIcon(this.IconChar);
|
||||||
|
|
||||||
/// <summary>Draws the icon.</summary>
|
/// <summary>Draws the icon.</summary>
|
||||||
/// <param name="iconString">The icon string.</param>
|
/// <param name="iconString">The icon string.</param>
|
||||||
|
|
@ -1,34 +1,33 @@
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
|
||||||
using Dalamud.Interface.ImGuiNotification.Internal;
|
|
||||||
using Dalamud.Interface.Internal;
|
using Dalamud.Interface.Internal;
|
||||||
using Dalamud.Plugin.Internal.Types;
|
using Dalamud.Plugin.Internal.Types;
|
||||||
using Dalamud.Plugin.Services;
|
using Dalamud.Plugin.Services;
|
||||||
|
|
||||||
namespace Dalamud.Interface.ImGuiNotification.IconSource;
|
namespace Dalamud.Interface.ImGuiNotification.Internal.IconSource;
|
||||||
|
|
||||||
/// <summary>Represents the use of a game-shipped texture as the icon of a notification.</summary>
|
/// <summary>Represents the use of a game-shipped texture as the icon of a notification.</summary>
|
||||||
/// <remarks>If there was no texture loaded for any reason, the plugin icon will be displayed instead.</remarks>
|
/// <remarks>If there was no texture loaded for any reason, the plugin icon will be displayed instead.</remarks>
|
||||||
public readonly struct GamePathIconSource : INotificationIconSource.IInternal
|
internal class GamePathIconSource : INotificationIconSource.IInternal
|
||||||
{
|
{
|
||||||
/// <summary>The path to a .tex file inside the game resources.</summary>
|
/// <summary>Initializes a new instance of the <see cref="GamePathIconSource"/> class.</summary>
|
||||||
public readonly string GamePath;
|
|
||||||
|
|
||||||
/// <summary>Initializes a new instance of the <see cref="GamePathIconSource"/> struct.</summary>
|
|
||||||
/// <param name="gamePath">The path to a .tex file inside the game resources.</param>
|
/// <param name="gamePath">The path to a .tex file inside the game resources.</param>
|
||||||
/// <remarks>Use <see cref="ITextureProvider.GetIconPath"/> to get the game path from icon IDs.</remarks>
|
/// <remarks>Use <see cref="ITextureProvider.GetIconPath"/> to get the game path from icon IDs.</remarks>
|
||||||
public GamePathIconSource(string gamePath) => this.GamePath = gamePath;
|
public GamePathIconSource(string gamePath) => this.GamePath = gamePath;
|
||||||
|
|
||||||
|
/// <summary>Gets the path to a .tex file inside the game resources.</summary>
|
||||||
|
public string GamePath { get; }
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public INotificationIconSource Clone() => this;
|
public INotificationIconSource Clone() => this;
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
void IDisposable.Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
INotificationMaterializedIcon INotificationIconSource.IInternal.Materialize() =>
|
public INotificationMaterializedIcon Materialize() =>
|
||||||
new MaterializedIcon(this.GamePath);
|
new MaterializedIcon(this.GamePath);
|
||||||
|
|
||||||
private sealed class MaterializedIcon : INotificationMaterializedIcon
|
private sealed class MaterializedIcon : INotificationMaterializedIcon
|
||||||
|
|
@ -1,33 +1,32 @@
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
|
||||||
using Dalamud.Game.Text;
|
using Dalamud.Game.Text;
|
||||||
using Dalamud.Interface.ImGuiNotification.Internal;
|
|
||||||
using Dalamud.Plugin.Internal.Types;
|
using Dalamud.Plugin.Internal.Types;
|
||||||
|
|
||||||
using ImGuiNET;
|
using ImGuiNET;
|
||||||
|
|
||||||
namespace Dalamud.Interface.ImGuiNotification.IconSource;
|
namespace Dalamud.Interface.ImGuiNotification.Internal.IconSource;
|
||||||
|
|
||||||
/// <summary>Represents the use of <see cref="SeIconChar"/> as the icon of a notification.</summary>
|
/// <summary>Represents the use of <see cref="SeIconChar"/> as the icon of a notification.</summary>
|
||||||
public readonly struct SeIconCharIconSource : INotificationIconSource.IInternal
|
internal class SeIconCharIconSource : INotificationIconSource.IInternal
|
||||||
{
|
{
|
||||||
/// <summary>The icon character.</summary>
|
/// <summary>Initializes a new instance of the <see cref="SeIconCharIconSource"/> class.</summary>
|
||||||
public readonly SeIconChar Char;
|
|
||||||
|
|
||||||
/// <summary>Initializes a new instance of the <see cref="SeIconCharIconSource"/> struct.</summary>
|
|
||||||
/// <param name="c">The character.</param>
|
/// <param name="c">The character.</param>
|
||||||
public SeIconCharIconSource(SeIconChar c) => this.Char = c;
|
public SeIconCharIconSource(SeIconChar c) => this.IconChar = c;
|
||||||
|
|
||||||
|
/// <summary>Gets the icon character.</summary>
|
||||||
|
public SeIconChar IconChar { get; }
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public INotificationIconSource Clone() => this;
|
public INotificationIconSource Clone() => this;
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
void IDisposable.Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
INotificationMaterializedIcon INotificationIconSource.IInternal.Materialize() => new MaterializedIcon(this.Char);
|
public INotificationMaterializedIcon Materialize() => new MaterializedIcon(this.IconChar);
|
||||||
|
|
||||||
private sealed class MaterializedIcon : INotificationMaterializedIcon
|
private sealed class MaterializedIcon : INotificationMaterializedIcon
|
||||||
{
|
{
|
||||||
|
|
@ -1,15 +1,14 @@
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
using Dalamud.Interface.ImGuiNotification.Internal;
|
|
||||||
using Dalamud.Interface.Internal;
|
using Dalamud.Interface.Internal;
|
||||||
using Dalamud.Plugin.Internal.Types;
|
using Dalamud.Plugin.Internal.Types;
|
||||||
|
|
||||||
namespace Dalamud.Interface.ImGuiNotification.IconSource;
|
namespace Dalamud.Interface.ImGuiNotification.Internal.IconSource;
|
||||||
|
|
||||||
/// <summary>Represents the use of future <see cref="IDalamudTextureWrap"/> as the icon of a notification.</summary>
|
/// <summary>Represents the use of future <see cref="IDalamudTextureWrap"/> as the icon of a notification.</summary>
|
||||||
/// <remarks>If there was no texture loaded for any reason, the plugin icon will be displayed instead.</remarks>
|
/// <remarks>If there was no texture loaded for any reason, the plugin icon will be displayed instead.</remarks>
|
||||||
public sealed class TextureWrapIconSource : INotificationIconSource.IInternal
|
internal class TextureWrapIconSource : INotificationIconSource.IInternal
|
||||||
{
|
{
|
||||||
private IDalamudTextureWrap? wrap;
|
private IDalamudTextureWrap? wrap;
|
||||||
|
|
||||||
|
|
@ -38,7 +37,7 @@ public sealed class TextureWrapIconSource : INotificationIconSource.IInternal
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
INotificationMaterializedIcon INotificationIconSource.IInternal.Materialize() =>
|
public INotificationMaterializedIcon Materialize() =>
|
||||||
new MaterializedIcon(this.wrap?.CreateWrapSharingLowLevelResource());
|
new MaterializedIcon(this.wrap?.CreateWrapSharingLowLevelResource());
|
||||||
|
|
||||||
private sealed class MaterializedIcon : INotificationMaterializedIcon
|
private sealed class MaterializedIcon : INotificationMaterializedIcon
|
||||||
|
|
@ -1,42 +1,41 @@
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using Dalamud.Interface.ImGuiNotification.Internal;
|
|
||||||
using Dalamud.Interface.Internal;
|
using Dalamud.Interface.Internal;
|
||||||
using Dalamud.Plugin.Internal.Types;
|
using Dalamud.Plugin.Internal.Types;
|
||||||
using Dalamud.Utility;
|
using Dalamud.Utility;
|
||||||
|
|
||||||
using Serilog;
|
using Serilog;
|
||||||
|
|
||||||
namespace Dalamud.Interface.ImGuiNotification.IconSource;
|
namespace Dalamud.Interface.ImGuiNotification.Internal.IconSource;
|
||||||
|
|
||||||
/// <summary>Represents the use of future <see cref="IDalamudTextureWrap"/> as the icon of a notification.</summary>
|
/// <summary>Represents the use of future <see cref="IDalamudTextureWrap"/> as the icon of a notification.</summary>
|
||||||
/// <remarks>If there was no texture loaded for any reason, the plugin icon will be displayed instead.</remarks>
|
/// <remarks>If there was no texture loaded for any reason, the plugin icon will be displayed instead.</remarks>
|
||||||
public readonly struct TextureWrapTaskIconSource : INotificationIconSource.IInternal
|
internal class TextureWrapTaskIconSource : INotificationIconSource.IInternal
|
||||||
{
|
{
|
||||||
/// <summary>The function that returns a task resulting in a new instance of <see cref="IDalamudTextureWrap"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>Dalamud will take ownership of the result. Do not call <see cref="IDisposable.Dispose"/>.</remarks>
|
|
||||||
public readonly Func<Task<IDalamudTextureWrap?>?>? TextureWrapTaskFunc;
|
|
||||||
|
|
||||||
/// <summary>Gets the default materialized icon, for the purpose of displaying the plugin icon.</summary>
|
/// <summary>Gets the default materialized icon, for the purpose of displaying the plugin icon.</summary>
|
||||||
internal static readonly INotificationMaterializedIcon DefaultMaterializedIcon = new MaterializedIcon(null);
|
internal static readonly INotificationMaterializedIcon DefaultMaterializedIcon = new MaterializedIcon(null);
|
||||||
|
|
||||||
/// <summary>Initializes a new instance of the <see cref="TextureWrapTaskIconSource"/> struct.</summary>
|
/// <summary>Initializes a new instance of the <see cref="TextureWrapTaskIconSource"/> class.</summary>
|
||||||
/// <param name="taskFunc">The function.</param>
|
/// <param name="taskFunc">The function.</param>
|
||||||
public TextureWrapTaskIconSource(Func<Task<IDalamudTextureWrap?>?>? taskFunc) =>
|
public TextureWrapTaskIconSource(Func<Task<IDalamudTextureWrap?>?>? taskFunc) =>
|
||||||
this.TextureWrapTaskFunc = taskFunc;
|
this.TextureWrapTaskFunc = taskFunc;
|
||||||
|
|
||||||
|
/// <summary>Gets the function that returns a task resulting in a new instance of <see cref="IDalamudTextureWrap"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>Dalamud will take ownership of the result. Do not call <see cref="IDisposable.Dispose"/>.</remarks>
|
||||||
|
public Func<Task<IDalamudTextureWrap?>?>? TextureWrapTaskFunc { get; }
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public INotificationIconSource Clone() => this;
|
public INotificationIconSource Clone() => this;
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
void IDisposable.Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
INotificationMaterializedIcon INotificationIconSource.IInternal.Materialize() =>
|
public INotificationMaterializedIcon Materialize() =>
|
||||||
new MaterializedIcon(this.TextureWrapTaskFunc);
|
new MaterializedIcon(this.TextureWrapTaskFunc);
|
||||||
|
|
||||||
private sealed class MaterializedIcon : INotificationMaterializedIcon
|
private sealed class MaterializedIcon : INotificationMaterializedIcon
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
|
using System.IO;
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
|
using Dalamud.Game.Text;
|
||||||
using Dalamud.Interface.Internal;
|
using Dalamud.Interface.Internal;
|
||||||
using Dalamud.Interface.Internal.Windows;
|
using Dalamud.Interface.Internal.Windows;
|
||||||
using Dalamud.Plugin.Internal.Types;
|
using Dalamud.Plugin.Internal.Types;
|
||||||
|
|
@ -7,17 +10,37 @@ using Dalamud.Storage.Assets;
|
||||||
|
|
||||||
using ImGuiNET;
|
using ImGuiNET;
|
||||||
|
|
||||||
namespace Dalamud.Interface.ImGuiNotification.Internal;
|
namespace Dalamud.Interface.ImGuiNotification;
|
||||||
|
|
||||||
/// <summary>Utilities for implementing stuff under <see cref="ImGuiNotification"/>.</summary>
|
/// <summary>Utilities for implementing stuff under <see cref="ImGuiNotification"/>.</summary>
|
||||||
internal static class NotificationUtilities
|
public static class NotificationUtilities
|
||||||
{
|
{
|
||||||
|
/// <inheritdoc cref="INotificationIconSource.From(SeIconChar)"/>
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static INotificationIconSource ToIconSource(this SeIconChar iconChar) =>
|
||||||
|
INotificationIconSource.From(iconChar);
|
||||||
|
|
||||||
|
/// <inheritdoc cref="INotificationIconSource.From(FontAwesomeIcon)"/>
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static INotificationIconSource ToIconSource(this FontAwesomeIcon iconChar) =>
|
||||||
|
INotificationIconSource.From(iconChar);
|
||||||
|
|
||||||
|
/// <inheritdoc cref="INotificationIconSource.From(IDalamudTextureWrap,bool)"/>
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static INotificationIconSource ToIconSource(this IDalamudTextureWrap? wrap, bool takeOwnership = true) =>
|
||||||
|
INotificationIconSource.From(wrap, takeOwnership);
|
||||||
|
|
||||||
|
/// <inheritdoc cref="INotificationIconSource.FromFile(string)"/>
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static INotificationIconSource ToIconSource(this FileInfo fileInfo) =>
|
||||||
|
INotificationIconSource.FromFile(fileInfo.FullName);
|
||||||
|
|
||||||
/// <summary>Draws the given texture, or the icon of the plugin if texture is <c>null</c>.</summary>
|
/// <summary>Draws the given texture, or the icon of the plugin if texture is <c>null</c>.</summary>
|
||||||
/// <param name="texture">The texture.</param>
|
/// <param name="texture">The texture.</param>
|
||||||
/// <param name="minCoord">The coordinates of the top left of the icon area.</param>
|
/// <param name="minCoord">The coordinates of the top left of the icon area.</param>
|
||||||
/// <param name="maxCoord">The coordinates of the bottom right of the icon area.</param>
|
/// <param name="maxCoord">The coordinates of the bottom right of the icon area.</param>
|
||||||
/// <param name="initiatorPlugin">The initiator plugin.</param>
|
/// <param name="initiatorPlugin">The initiator plugin.</param>
|
||||||
public static void DrawTexture(
|
internal static void DrawTexture(
|
||||||
IDalamudTextureWrap? texture,
|
IDalamudTextureWrap? texture,
|
||||||
Vector2 minCoord,
|
Vector2 minCoord,
|
||||||
Vector2 maxCoord,
|
Vector2 maxCoord,
|
||||||
|
|
@ -3,8 +3,8 @@ using System.Threading.Tasks;
|
||||||
|
|
||||||
using Dalamud.Game.Text;
|
using Dalamud.Game.Text;
|
||||||
using Dalamud.Interface.ImGuiNotification;
|
using Dalamud.Interface.ImGuiNotification;
|
||||||
using Dalamud.Interface.ImGuiNotification.IconSource;
|
|
||||||
using Dalamud.Interface.ImGuiNotification.Internal;
|
using Dalamud.Interface.ImGuiNotification.Internal;
|
||||||
|
using Dalamud.Interface.ImGuiNotification.Internal.IconSource;
|
||||||
using Dalamud.Interface.Internal.Notifications;
|
using Dalamud.Interface.Internal.Notifications;
|
||||||
using Dalamud.Interface.Windowing;
|
using Dalamud.Interface.Windowing;
|
||||||
using Dalamud.Storage.Assets;
|
using Dalamud.Storage.Assets;
|
||||||
|
|
@ -161,32 +161,32 @@ internal class ImGuiWidget : IDataWindowWidget
|
||||||
},
|
},
|
||||||
IconSource = this.notificationTemplate.IconSourceInt switch
|
IconSource = this.notificationTemplate.IconSourceInt switch
|
||||||
{
|
{
|
||||||
1 => new SeIconCharIconSource(
|
1 => INotificationIconSource.From(
|
||||||
(SeIconChar)(this.notificationTemplate.IconSourceText.Length == 0
|
(SeIconChar)(this.notificationTemplate.IconSourceText.Length == 0
|
||||||
? 0
|
? 0
|
||||||
: this.notificationTemplate.IconSourceText[0])),
|
: this.notificationTemplate.IconSourceText[0])),
|
||||||
2 => new FontAwesomeIconIconSource(
|
2 => INotificationIconSource.From(
|
||||||
(FontAwesomeIcon)(this.notificationTemplate.IconSourceText.Length == 0
|
(FontAwesomeIcon)(this.notificationTemplate.IconSourceText.Length == 0
|
||||||
? 0
|
? 0
|
||||||
: this.notificationTemplate.IconSourceText[0])),
|
: this.notificationTemplate.IconSourceText[0])),
|
||||||
3 => new TextureWrapIconSource(
|
3 => INotificationIconSource.From(
|
||||||
Service<DalamudAssetManager>.Get().GetDalamudTextureWrap(
|
Service<DalamudAssetManager>.Get().GetDalamudTextureWrap(
|
||||||
Enum.Parse<DalamudAsset>(
|
Enum.Parse<DalamudAsset>(
|
||||||
NotificationTemplate.AssetSources[
|
NotificationTemplate.AssetSources[
|
||||||
this.notificationTemplate.IconSourceAssetInt])),
|
this.notificationTemplate.IconSourceAssetInt])),
|
||||||
false),
|
false),
|
||||||
4 => new TextureWrapTaskIconSource(
|
4 => INotificationIconSource.From(
|
||||||
() =>
|
() =>
|
||||||
Service<DalamudAssetManager>.Get().GetDalamudTextureWrapAsync(
|
Service<DalamudAssetManager>.Get().GetDalamudTextureWrapAsync(
|
||||||
Enum.Parse<DalamudAsset>(
|
Enum.Parse<DalamudAsset>(
|
||||||
NotificationTemplate.AssetSources[
|
NotificationTemplate.AssetSources[
|
||||||
this.notificationTemplate.IconSourceAssetInt]))),
|
this.notificationTemplate.IconSourceAssetInt]))),
|
||||||
5 => new GamePathIconSource(this.notificationTemplate.IconSourceText),
|
5 => INotificationIconSource.FromGame(this.notificationTemplate.IconSourceText),
|
||||||
6 => new FilePathIconSource(this.notificationTemplate.IconSourceText),
|
6 => INotificationIconSource.FromFile(this.notificationTemplate.IconSourceText),
|
||||||
7 => new TextureWrapIconSource(
|
7 => INotificationIconSource.From(
|
||||||
Service<TextureManager>.Get().GetTextureFromGame(this.notificationTemplate.IconSourceText),
|
Service<TextureManager>.Get().GetTextureFromGame(this.notificationTemplate.IconSourceText),
|
||||||
false),
|
false),
|
||||||
8 => new TextureWrapIconSource(
|
8 => INotificationIconSource.From(
|
||||||
Service<TextureManager>.Get().GetTextureFromFile(
|
Service<TextureManager>.Get().GetTextureFromFile(
|
||||||
new(this.notificationTemplate.IconSourceText)),
|
new(this.notificationTemplate.IconSourceText)),
|
||||||
false),
|
false),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue