[truetype] Upstream the hdmx binary search. * src/truetype/ttobjs.h (TT_SizeRec): Add `widthp` for the hdmx widths. * src/truetype/ttobjs.c (tt_size_reset): Initialize `widthp` even though it might never be used by the interpreter. * src/truetype/ttgload.c (tt_loader_init): Avoid repeated searches in the hdmx table.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c
index 0d8f271..796811b 100644
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -2736,9 +2736,7 @@
#endif
!face->postscript.isFixedPitch )
{
- loader->widthp = tt_face_get_device_metrics( face,
- size->metrics->x_ppem,
- 0 );
+ loader->widthp = size->widthp;
}
else
loader->widthp = NULL;
diff --git a/src/truetype/ttobjs.c b/src/truetype/ttobjs.c
index 93fc548..5c07b7a 100644
--- a/src/truetype/ttobjs.c
+++ b/src/truetype/ttobjs.c
@@ -1435,6 +1435,8 @@
size->ttmetrics.y_ratio = 0x10000L;
}
+ size->widthp = tt_face_get_device_metrics( face, size_metrics->x_ppem, 0 );
+
size->metrics = size_metrics;
#ifdef TT_USE_BYTECODE_INTERPRETER
diff --git a/src/truetype/ttobjs.h b/src/truetype/ttobjs.h
index fd72378..1c4b585 100644
--- a/src/truetype/ttobjs.h
+++ b/src/truetype/ttobjs.h
@@ -282,6 +282,8 @@ FT_BEGIN_HEADER
TT_Size_Metrics ttmetrics;
+ FT_Byte* widthp; /* glyph widths from the hdmx table */
+
FT_ULong strike_index; /* 0xFFFFFFFF to indicate invalid */
#ifdef TT_USE_BYTECODE_INTERPRETER