[avar] Implement inverse map, unmap
This commit is contained in:
parent
981f5a54c3
commit
3348992844
|
@ -49,9 +49,10 @@ struct AxisValueMap
|
|||
}
|
||||
|
||||
public:
|
||||
F2DOT14 fromCoord; /* A normalized coordinate value obtained using
|
||||
* default normalization. */
|
||||
F2DOT14 toCoord; /* The modified, normalized coordinate value. */
|
||||
F2DOT14 coords[2];
|
||||
// F2DOT14 fromCoord; /* A normalized coordinate value obtained using
|
||||
// * default normalization. */
|
||||
// F2DOT14 toCoord; /* The modified, normalized coordinate value. */
|
||||
|
||||
public:
|
||||
DEFINE_SIZE_STATIC (4);
|
||||
|
@ -59,12 +60,13 @@ struct AxisValueMap
|
|||
|
||||
struct SegmentMaps : ArrayOf<AxisValueMap>
|
||||
{
|
||||
int map (int value) const
|
||||
int map (int value, unsigned int from_stride = 0, unsigned int to_stide = 1) const
|
||||
{
|
||||
/* The following special-cases are not part of OpenType, which requires
|
||||
* that at least -1, 0, and +1 must be mapped. But we include these as
|
||||
* part of a better error recovery scheme. */
|
||||
|
||||
#define fromCoord coords[from_stride]
|
||||
#define toCoord coords[to_stide]
|
||||
if (len < 2)
|
||||
{
|
||||
if (!len)
|
||||
|
@ -91,8 +93,12 @@ struct SegmentMaps : ArrayOf<AxisValueMap>
|
|||
return arrayZ[i-1].toCoord +
|
||||
((arrayZ[i].toCoord - arrayZ[i-1].toCoord) *
|
||||
(value - arrayZ[i-1].fromCoord) + denom/2) / denom;
|
||||
#undef toCoord
|
||||
#undef fromCoord
|
||||
}
|
||||
|
||||
int unmap (int value) const { return map (value, 1, 0); }
|
||||
|
||||
public:
|
||||
DEFINE_SIZE_ARRAY (2, *this);
|
||||
};
|
||||
|
@ -133,6 +139,18 @@ struct avar
|
|||
}
|
||||
}
|
||||
|
||||
void unmap_coords (int *coords, unsigned int coords_length) const
|
||||
{
|
||||
unsigned int count = hb_min (coords_length, axisCount);
|
||||
|
||||
const SegmentMaps *map = &firstAxisSegmentMaps;
|
||||
for (unsigned int i = 0; i < count; i++)
|
||||
{
|
||||
coords[i] = map->unmap (coords[i]);
|
||||
map = &StructAfter<SegmentMaps> (*map);
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
FixedVersion<>version; /* Version of the avar table
|
||||
* initially set to 0x00010000u */
|
||||
|
|
Loading…
Reference in New Issue