diff --git a/src/hb-open-type.hh b/src/hb-open-type.hh index 4ff69c7a3..16bf005c8 100644 --- a/src/hb-open-type.hh +++ b/src/hb-open-type.hh @@ -213,6 +213,11 @@ typedef Index NameID; struct VarIdx : HBUINT32 { static constexpr unsigned NO_VARIATION = 0xFFFFFFFFu; static_assert (NO_VARIATION == HB_OT_LAYOUT_NO_VARIATIONS_INDEX, ""); + static uint32_t add (uint32_t i, unsigned short v) + { + if (i == NO_VARIATION) return i; + return i + v; + } VarIdx& operator = (uint32_t i) { HBUINT32::operator= (i); return *this; } }; DECLARE_NULL_NAMESPACE_BYTES (OT, VarIdx); diff --git a/src/hb-ot-color-colr-table.hh b/src/hb-ot-color-colr-table.hh index 43f17c01a..545448534 100644 --- a/src/hb-ot-color-colr-table.hh +++ b/src/hb-ot-color-colr-table.hh @@ -940,13 +940,13 @@ struct ClipBox int ymin = u.format1.yMin; int xmax = u.format1.xMax; int ymax = u.format1.yMax; - if (u.format == 2 && instancer && u.format2.varIdxBase != VarIdx::NO_VARIATION) + if (u.format == 2 && instancer) { uint32_t varIdx = u.format2.varIdxBase; - xmin += _hb_roundf (instancer (varIdx+0)); - ymin += _hb_roundf (instancer (varIdx+1)); - xmax += _hb_roundf (instancer (varIdx+2)); - ymax += _hb_roundf (instancer (varIdx+3)); + xmin += _hb_roundf (instancer (VarIdx::add (varIdx, 0))); + ymin += _hb_roundf (instancer (VarIdx::add (varIdx, 1))); + xmax += _hb_roundf (instancer (VarIdx::add (varIdx, 2))); + ymax += _hb_roundf (instancer (VarIdx::add (varIdx, 3))); } extents->x_bearing = xmin; extents->y_bearing = ymax;