[truetype] Actually scale varied CVT values.

Up to now, only the unscaled CVT values were varied; in other words,
the `CVAR' data was never used for bytecode hinting.

* src/truetype/ttgxvar.c (tt_cvt_ready_iterator): New auxiliary
function.
(tt_face_vary_cvt): Use it to trigger rescaling of CVT values.
This commit is contained in:
Werner Lemberg 2019-05-16 12:52:57 +02:00
parent 37580053b4
commit b0522701f8
3 changed files with 40 additions and 0 deletions

View File

@ -1,3 +1,14 @@
2019-05-16 Werner Lemberg <wl@gnu.org>
[truetype] Actually scale varied CVT values.
Up to now, only the unscaled CVT values were varied; in other words,
the `CVAR' data was never used for bytecode hinting.
* src/truetype/ttgxvar.c (tt_cvt_ready_iterator): New auxiliary
function.
(tt_face_vary_cvt): Use it to trigger rescaling of CVT values.
2019-05-16 Werner Lemberg <wl@gnu.org>
[truetype] Use 26.6 format for storing unscaled CVT values.

View File

@ -3,6 +3,9 @@ CHANGES BETWEEN 2.10.0 and 2.10.1
I. IMPORTANT BUG FIXES
- The bytecode hinting of OpenType variation fonts was flawed, since
the data in the `CVAR' table wasn't correctly applied.
II. MISCELLANEOUS
@ -19,6 +22,9 @@ CHANGES BETWEEN 2.10.0 and 2.10.1
twice in a row, the function returned an incorrect error code the
second time.
- Increased precision while computing OpenType font variation
instances.
======================================================================

View File

@ -3113,6 +3113,21 @@
/*************************************************************************/
static FT_Error
tt_cvt_ready_iterator( FT_ListNode node,
void* user )
{
TT_Size size = (TT_Size)node->data;
FT_UNUSED( user );
size->cvt_ready = -1;
return FT_Err_Ok;
}
/**************************************************************************
*
* @Function:
@ -3143,6 +3158,8 @@
FT_Error error;
FT_Memory memory = stream->memory;
FT_Face root = &face->root;
FT_ULong table_start;
FT_ULong table_len;
@ -3451,6 +3468,12 @@
FT_FREE( im_end_coords );
FT_FREE( cvt_deltas );
/* iterate over all FT_Size objects and set `cvt_ready' to -1 */
/* to trigger rescaling of all CVT values */
FT_List_Iterate( &root->sizes_list,
tt_cvt_ready_iterator,
NULL );
return error;
}