GpRegionExtensions
using System;
using System.Runtime.CompilerServices;
using Windows.Win32.Foundation;
using Windows.Win32.Graphics.Gdi;
namespace Windows.Win32.Graphics.GdiPlus
{
internal static class GpRegionExtensions
{
[NullableContext(1)]
public unsafe static RegionScope GetRegionScope(this IPointer<GpRegion> region, IPointer<GpGraphics> graphics)
{
RegionScope result = new RegionScope(InitializeFromGdiPlus(region.GetPointer(), graphics.GetPointer()));
GC.KeepAlive(region);
GC.KeepAlive(graphics);
return result;
}
[NullableContext(1)]
public unsafe static RegionScope GetRegionScope(this IPointer<GpRegion> region, HWND hwnd)
{
GpGraphics* graphics = null;
PInvokeGdiPlus.GdipCreateFromHWND(hwnd, &graphics).ThrowIfFailed();
RegionScope result = new RegionScope(InitializeFromGdiPlus(region.GetPointer(), graphics));
GC.KeepAlive(region);
return result;
}
private unsafe static HRGN InitializeFromGdiPlus(GpRegion* region, GpGraphics* graphics)
{
BOOL value = default(BOOL);
PInvokeGdiPlus.GdipIsInfiniteRegion(region, graphics, &value).ThrowIfFailed();
if ((bool)value)
return HRGN.Null;
HRGN result = default(HRGN);
PInvokeGdiPlus.GdipGetRegionHRgn(region, graphics, &result).ThrowIfFailed();
return result;
}
}
}