Files
QuickLook/QuickLook.Plugin/QuickLook.Plugin.FontViewer/Typography.OpenFont/Tables.Others/HorizontalDeviceMetrics.cs
2024-12-30 04:21:24 +08:00

60 lines
2.8 KiB
C#

//Apache2, 2016-present, WinterDev
using System.IO;
namespace Typography.OpenFont.Tables
{
class HorizontalDeviceMetrics : TableEntry
{
public const string _N = "hdmx";
public override string Name => _N;
//
//https://www.microsoft.com/typography/otspec/hdmx.htm
//The hdmx table relates to OpenType™ fonts with TrueType outlines.
//The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes.
//This allows the font manager to build integer width tables without calling the scaler for each glyph.
//Typically this table contains only selected screen sizes.
//This table is sorted by pixel size.
//The checksum for this table applies to both subtables listed.
//Note that for non-square pixel grids,
//the character width (in pixels) will be used to determine which device record to use.
//For example, a 12 point character on a device with a resolution of 72x96 would be 12 pixels high and 16 pixels wide.
//The hdmx device record for 16 pixel characters would be used.
//If bit 4 of the flag field in the 'head' table is not set,
//then it is assumed that the font scales linearly; in this case an 'hdmx' table is not necessary and should not be built.
//If bit 4 of the flag field is set, then one or more glyphs in the font are assumed to scale nonlinearly.
//In this case, performance can be improved by including the 'hdmx' table with one or more important DeviceRecord's for important sizes.
//Please see the chapter “Recommendations for OpenType Fonts” for more detail.
//The table begins as follows:
//hdmx Header
//Type Name Description
//USHORT version Table version number (0)
//SHORT numRecords Number of device records.
//LONG sizeDeviceRecord Size of a device record, long aligned.
//DeviceRecord records[numRecords] Array of device records.
//Each DeviceRecord for format 0 looks like this.
//Device Record
//Type Name Description
//BYTE pixelSize Pixel size for following widths (as ppem).
//BYTE maxWidth Maximum width.
//BYTE widths[numGlyphs] Array of widths (numGlyphs is from the 'maxp' table).
//Each DeviceRecord is padded with 0's to make it long word aligned.
//Each Width value is the width of the particular glyph, in pixels,
//at the pixels per em (ppem) size listed at the start of the DeviceRecord.
//The ppem sizes are measured along the y axis.
protected override void ReadContentFrom(BinaryReader reader)
{
}
}
}