< prev index next >
src/java.desktop/share/native/libfreetype/src/type1/t1load.c
Print this page
*** 2,12 ****
*
* t1load.c
*
* Type 1 font loader (body).
*
! * Copyright (C) 1996-2019 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
* modified, and distributed under the terms of the FreeType project
* license, LICENSE.TXT. By continuing to use, modify, or distribute
--- 2,12 ----
*
* t1load.c
*
* Type 1 font loader (body).
*
! * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
* modified, and distributed under the terms of the FreeType project
* license, LICENSE.TXT. By continuing to use, modify, or distribute
*** 307,341 ****
FT_Multi_Master mmaster;
FT_Error error;
FT_UInt i;
FT_Fixed axiscoords[T1_MAX_MM_AXIS];
PS_Blend blend = face->blend;
error = T1_Get_Multi_Master( face, &mmaster );
if ( error )
goto Exit;
! if ( FT_ALLOC( mmvar,
! sizeof ( FT_MM_Var ) +
! mmaster.num_axis * sizeof ( FT_Var_Axis ) ) )
goto Exit;
mmvar->num_axis = mmaster.num_axis;
mmvar->num_designs = mmaster.num_designs;
mmvar->num_namedstyles = 0; /* Not supported */
! mmvar->axis = (FT_Var_Axis*)&mmvar[1];
! /* Point to axes after MM_Var struct */
mmvar->namedstyle = NULL;
for ( i = 0; i < mmaster.num_axis; i++ )
{
mmvar->axis[i].name = mmaster.axis[i].name;
mmvar->axis[i].minimum = INT_TO_FIXED( mmaster.axis[i].minimum );
mmvar->axis[i].maximum = INT_TO_FIXED( mmaster.axis[i].maximum );
- mmvar->axis[i].def = ( mmvar->axis[i].minimum +
- mmvar->axis[i].maximum ) / 2;
- /* Does not apply. But this value is in range */
mmvar->axis[i].strid = ~0U; /* Does not apply */
mmvar->axis[i].tag = ~0U; /* Does not apply */
if ( !mmvar->axis[i].name )
continue;
--- 307,365 ----
FT_Multi_Master mmaster;
FT_Error error;
FT_UInt i;
FT_Fixed axiscoords[T1_MAX_MM_AXIS];
PS_Blend blend = face->blend;
+ FT_UShort* axis_flags;
+
+ FT_Offset mmvar_size;
+ FT_Offset axis_flags_size;
+ FT_Offset axis_size;
error = T1_Get_Multi_Master( face, &mmaster );
if ( error )
goto Exit;
!
! /* the various `*_size' variables, which we also use as */
! /* offsets into the `mmvar' array, must be multiples of the */
! /* pointer size (except the last one); without such an */
! /* alignment there might be runtime errors due to */
! /* misaligned addresses */
! #undef ALIGN_SIZE
! #define ALIGN_SIZE( n ) \
! ( ( (n) + sizeof (void*) - 1 ) & ~( sizeof (void*) - 1 ) )
!
! mmvar_size = ALIGN_SIZE( sizeof ( FT_MM_Var ) );
! axis_flags_size = ALIGN_SIZE( mmaster.num_axis *
! sizeof ( FT_UShort ) );
! axis_size = mmaster.num_axis * sizeof ( FT_Var_Axis );
!
! if ( FT_ALLOC( mmvar, mmvar_size +
! axis_flags_size +
! axis_size ) )
goto Exit;
mmvar->num_axis = mmaster.num_axis;
mmvar->num_designs = mmaster.num_designs;
mmvar->num_namedstyles = 0; /* Not supported */
!
! /* while axis flags are meaningless here, we have to provide the array */
! /* to make `FT_Get_Var_Axis_Flags' work: the function expects that the */
! /* values directly follow the data of `FT_MM_Var' */
! axis_flags = (FT_UShort*)( (char*)mmvar + mmvar_size );
! for ( i = 0; i < mmaster.num_axis; i++ )
! axis_flags[i] = 0;
!
! mmvar->axis = (FT_Var_Axis*)( (char*)axis_flags + axis_flags_size );
mmvar->namedstyle = NULL;
for ( i = 0; i < mmaster.num_axis; i++ )
{
mmvar->axis[i].name = mmaster.axis[i].name;
mmvar->axis[i].minimum = INT_TO_FIXED( mmaster.axis[i].minimum );
mmvar->axis[i].maximum = INT_TO_FIXED( mmaster.axis[i].maximum );
mmvar->axis[i].strid = ~0U; /* Does not apply */
mmvar->axis[i].tag = ~0U; /* Does not apply */
if ( !mmvar->axis[i].name )
continue;
< prev index next >