parseHmtx method
Returns (advanceWidth, lsb) pairs in font units for each glyph.
The list length equals numGlyphs. Glyphs beyond _numberOfHMetrics
share the last advance width (per the TTF spec).
Implementation
List<({int advanceWidth, int lsb})> parseHmtx() {
final hmtx = _tableOffsets['hmtx'];
if (hmtx == null) return [];
final result = <({int advanceWidth, int lsb})>[];
int lastAw = 0;
for (int i = 0; i < _numberOfHMetrics; i++) {
final off = hmtx + i * 4;
final aw = _data.getUint16(off);
final lsb = _data.getInt16(off + 2);
result.add((advanceWidth: aw, lsb: lsb));
lastAw = aw;
}
// Remaining glyphs reuse lastAw with individual lsb values.
final extraBase = hmtx + _numberOfHMetrics * 4;
for (int i = _numberOfHMetrics; i < _numGlyphs; i++) {
final lsb = _data.getInt16(extraBase + (i - _numberOfHMetrics) * 2);
result.add((advanceWidth: lastAw, lsb: lsb));
}
return result;
}