File: Metafiles\RecordTypes\EMREXTSELECTCLIPRGN.cs
Web Access
Project: src\src\System.Windows.Forms.Primitives\tests\TestUtilities\System.Windows.Forms.Primitives.TestUtilities.csproj (System.Windows.Forms.Primitives.TestUtilities)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#nullable enable
 
using System.Runtime.InteropServices;
using System.Text;
 
namespace System.Windows.Forms.Metafiles;
 
[StructLayout(LayoutKind.Sequential)]
internal unsafe struct EMREXTSELECTCLIPRGN
{
    public EMR emr;
    public uint cbRgnData;          // Size of region data in bytes
    public RGN_COMBINE_MODE iMode;
    public byte RgnData;
 
    public RGNDATAHEADER* RegionDataHeader
    {
        get
        {
            fixed (void* data = &RgnData)
            {
                return cbRgnData >= sizeof(RGNDATAHEADER) ? (RGNDATAHEADER*)data : null;
            }
        }
    }
 
    public RECT[] ClippingRectangles => RGNDATAHEADER.GetRegionRects(RegionDataHeader);
 
    public override string ToString()
    {
        if (RegionDataHeader is null)
        {
            return $"[{nameof(EMREXTSELECTCLIPRGN)}] Mode: Set Default";
        }
 
        StringBuilder sb = new(512);
        sb.Append($@"[{nameof(EMREXTSELECTCLIPRGN)}] Mode: {iMode} Bounds: {RegionDataHeader->rcBound} Rects: {RegionDataHeader->nCount}");
 
        RECT[] clippingRects = ClippingRectangles;
        for (int i = 0; i < clippingRects.Length; i++)
        {
            sb.Append($"\n\tRect index {i}: {clippingRects[i]}");
        }
 
        return sb.ToString();
    }
}