ReFuel.FreeType/Structures.cs

183 lines
5.2 KiB
C#
Raw Normal View History

2024-03-23 09:56:10 +01:00
using System;
using System.Runtime.InteropServices;
// Disable unused warnings for native types.
#pragma warning disable CS0649
2024-06-20 11:39:15 +02:00
namespace ReFuel.FreeType
2024-03-23 09:56:10 +01:00
{
public struct FTLibrary
{
private IntPtr _handle;
public IntPtr Handle => _handle;
}
public unsafe struct FTFace
{
private IntPtr _handle;
public IntPtr Handle => _handle;
private unsafe FTFaceInternal* Ptr => (FTFaceInternal*)_handle;
public long NumberOfGlyphs => Ptr->NumberOfGlyphs;
public long FaceIndex => Ptr->FaceIndex;
public FaceFlag FaceFlags => (FaceFlag)Ptr->FaceFlags;
public long StyleFlags => Ptr->StyleFlags;
public string FamilyName => Marshal.PtrToStringUTF8(Ptr->FamilyName);
public string StyleName => Marshal.PtrToStringUTF8(Ptr->StyleName);
public int NumberOfFixedSizes => Ptr->NumberOfFixedSizes;
public int NumberOfCharMaps => Ptr->NumberOfCharMaps;
public FTGlyphSlot Glyph => Ptr->Glyph;
public short Ascender => Ptr->Ascender;
public short Descender => Ptr->Descender;
public ref readonly FTSizeMetrics ScaledSize => ref ((FTSize*)Ptr->Size)->Metrics;
}
public struct FTBox
{
public long XMin;
public long YMin;
public long XMax;
public long YMax;
}
internal struct FTFaceInternal
{
public long NumberOfFaces;
public long FaceIndex;
public long FaceFlags;
public long StyleFlags;
public long NumberOfGlyphs;
public IntPtr FamilyName;
public IntPtr StyleName;
public int NumberOfFixedSizes;
public IntPtr AvailableSizes;
public int NumberOfCharMaps;
public IntPtr Charmaps;
public FTGeneric Generic;
public FTBox BoundingBox;
public ushort UnitsPerEm;
public short Ascender;
public short Descender;
public short Height;
public short MaxAdvanceWidth;
public short MaxAdvanceHeight;
public short UnderlinePosition;
public short UnderlineThickness;
public FTGlyphSlot Glyph;
public IntPtr Size;
public IntPtr Charmap;
// Rest of the struct is private to implementation.
}
public struct FTGeneric
{
public IntPtr Data;
public IntPtr Finalizer;
}
public struct FTVector
{
public long X;
public long Y;
}
public struct FTBitmap
{
public uint Rows;
public uint Width;
public int Pitch;
public IntPtr Buffer;
public ushort NumberOfGrays;
public byte PixelMode;
public byte PaletteMode;
public IntPtr Palette;
}
public struct FTOutline
{
public short NumberOfContours;
public short NumberOfPoints;
public IntPtr Points;
public IntPtr Tags;
public IntPtr Contours;
public int Flags;
}
internal struct FTGlyphSlotInternal
{
public FTLibrary Library;
public FTFace Face;
public FTGlyphSlot Next;
public uint GlyphIndex;
public FTGeneric Generic;
public FTGlyphMetrics Metrics;
public int LinearHorizontalAdvance;
public int LinearVerticalAdvance;
2024-03-23 09:56:10 +01:00
public FTVector Advance;
public int Format;
public FTBitmap Bitmap;
public int BitmapLeft;
public int BitmapTop;
public FTOutline Outline;
public uint NumberOfSubGlyphs;
public IntPtr SubGlyphs;
public IntPtr ControlData;
public long ControlLength;
public long LsbDelta;
public long RsbDelta;
public IntPtr Other;
public IntPtr Internal;
}
public unsafe struct FTGlyphSlot
{
private IntPtr _handle;
public IntPtr Handle => _handle;
private FTGlyphSlotInternal* Ptr => (FTGlyphSlotInternal*) _handle;
public FTLibrary Library => Ptr->Library;
public FTFace Face => Ptr->Face;
public FTGlyphSlot Next => Ptr->Next;
public uint GlyphIndex => Ptr->GlyphIndex;
public ref readonly FTGlyphMetrics Metrics => ref Ptr->Metrics;
public long LinearHorizontalAdvance => Ptr->LinearHorizontalAdvance;
public long LinearVerticalAdvance => Ptr->LinearVerticalAdvance;
public FTVector Advance => Ptr->Advance;
public ref readonly FTBitmap Bitmap => ref Ptr->Bitmap;
public long BitmapLeft => Ptr->BitmapLeft;
public long BitmapTop => Ptr->BitmapTop;
}
public struct FTGlyphMetrics
{
public long Width;
public long Height;
public long HorizontalBearingX;
public long HorizontalBearingY;
public long HorizontalAdvance;
public long VerticalBearingX;
public long VerticalBearingY;
public long VerticalAdvance;
}
public struct FTSizeMetrics
{
public short Xppem;
public short Yppem;
public long XScale;
public long YScale;
public long Ascender;
public long Descender;
public long Height;
public long MaxAdvance;
}
public struct FTSize
{
public IntPtr Face;
public FTGeneric Generic;
public FTSizeMetrics Metrics;
private IntPtr Privates;
}
}