* src/truetype/ttgxvar.c (ft_var_get_item_delta): Optimized.

This commit is contained in:
Alexei Podtelezhnikov 2018-10-31 21:55:40 -04:00
parent c13635ee4b
commit 300da33d61
2 changed files with 24 additions and 24 deletions

View File

@ -1,3 +1,7 @@
2018-10-31 Alexei Podtelezhnikov <apodtele@gmail.com>
* src/truetype/ttgxvar.c (ft_var_get_item_delta): Optimized.
2018-10-29 Werner Lemberg <wl@gnu.org> 2018-10-29 Werner Lemberg <wl@gnu.org>
[base] Fix numeric overflow. [base] Fix numeric overflow.

View File

@ -893,47 +893,43 @@
/* inner loop steps through axes in this region */ /* inner loop steps through axes in this region */
for ( j = 0; j < itemStore->axisCount; j++, axis++ ) for ( j = 0; j < itemStore->axisCount; j++, axis++ )
{ {
FT_Fixed axisScalar;
/* compute the scalar contribution of this axis; */ /* compute the scalar contribution of this axis; */
/* ignore invalid ranges */ /* ignore invalid ranges */
if ( axis->startCoord > axis->peakCoord || if ( axis->startCoord > axis->peakCoord ||
axis->peakCoord > axis->endCoord ) axis->peakCoord > axis->endCoord )
axisScalar = FT_FIXED_ONE; continue;
else if ( axis->startCoord < 0 && else if ( axis->startCoord < 0 &&
axis->endCoord > 0 && axis->endCoord > 0 &&
axis->peakCoord != 0 ) axis->peakCoord != 0 )
axisScalar = FT_FIXED_ONE; continue;
/* peak of 0 means ignore this axis */ /* peak of 0 means ignore this axis */
else if ( axis->peakCoord == 0 ) else if ( axis->peakCoord == 0 )
axisScalar = FT_FIXED_ONE; continue;
/* ignore this region if coords are out of range */ /* ignore this region if coords are out of range */
else if ( face->blend->normalizedcoords[j] < axis->startCoord || else if ( face->blend->normalizedcoords[j] <= axis->startCoord ||
face->blend->normalizedcoords[j] > axis->endCoord ) face->blend->normalizedcoords[j] >= axis->endCoord )
axisScalar = 0;
/* calculate a proportional factor */
else
{ {
if ( face->blend->normalizedcoords[j] == axis->peakCoord ) scalar = 0;
axisScalar = FT_FIXED_ONE; break;
else if ( face->blend->normalizedcoords[j] < axis->peakCoord )
axisScalar =
FT_DivFix( face->blend->normalizedcoords[j] - axis->startCoord,
axis->peakCoord - axis->startCoord );
else
axisScalar =
FT_DivFix( axis->endCoord - face->blend->normalizedcoords[j],
axis->endCoord - axis->peakCoord );
} }
/* take product of all the axis scalars */ else if ( face->blend->normalizedcoords[j] == axis->peakCoord )
scalar = FT_MulFix( scalar, axisScalar ); continue;
/* cumulative product of all the axis scalars */
else if ( face->blend->normalizedcoords[j] < axis->peakCoord )
scalar =
FT_MulDiv( scalar,
face->blend->normalizedcoords[j] - axis->startCoord,
axis->peakCoord - axis->startCoord );
else
scalar =
FT_MulDiv( scalar,
axis->endCoord - face->blend->normalizedcoords[j],
axis->endCoord - axis->peakCoord );
} /* per-axis loop */ } /* per-axis loop */
/* get the scaled delta for this region */ /* get the scaled delta for this region */