Dalamud/Dalamud/Utility/ClipboardFormats.cs
srkizer 4dce0c00e8
Implement DrawListTextureWrap (#2036)
* Implement DrawListTextureWrap

* Fix unloading

* minor fixes

* Add CreateFromClipboardAsync

---------

Co-authored-by: goat <16760685+goaaats@users.noreply.github.com>
2025-05-09 22:47:42 +02:00

40 lines
1.6 KiB
C#

using System.Runtime.InteropServices;
using TerraFX.Interop.Windows;
using static TerraFX.Interop.Windows.Windows;
namespace Dalamud.Utility;
/// <summary>Clipboard formats, looked up by their names.</summary>
internal static class ClipboardFormats
{
/// <inheritdoc cref="CFSTR.CFSTR_FILECONTENTS"/>
public static uint FileContents { get; } = ClipboardFormatFromName(CFSTR.CFSTR_FILECONTENTS);
/// <summary>Gets the clipboard format corresponding to the PNG file format.</summary>
public static uint Png { get; } = ClipboardFormatFromName("PNG");
/// <inheritdoc cref="CFSTR.CFSTR_FILEDESCRIPTORW"/>
public static uint FileDescriptorW { get; } = ClipboardFormatFromName(CFSTR.CFSTR_FILEDESCRIPTORW);
/// <inheritdoc cref="CFSTR.CFSTR_FILEDESCRIPTORA"/>
public static uint FileDescriptorA { get; } = ClipboardFormatFromName(CFSTR.CFSTR_FILEDESCRIPTORA);
/// <inheritdoc cref="CFSTR.CFSTR_FILENAMEW"/>
public static uint FileNameW { get; } = ClipboardFormatFromName(CFSTR.CFSTR_FILENAMEW);
/// <inheritdoc cref="CFSTR.CFSTR_FILENAMEA"/>
public static uint FileNameA { get; } = ClipboardFormatFromName(CFSTR.CFSTR_FILENAMEA);
private static unsafe uint ClipboardFormatFromName(ReadOnlySpan<char> name)
{
uint cf;
fixed (void* p = name)
cf = RegisterClipboardFormatW((ushort*)p);
if (cf != 0)
return cf;
throw Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error()) ??
new InvalidOperationException($"RegisterClipboardFormatW({name}) failed.");
}
}