FT_GlyphLoader_Done( FT_GlyphLoader loader ) { if ( loader ) { FT_Memory memory = loader->memory; FT_GlyphLoader_Reset( loader ); FT_FREE( loader ); } }
FT_GlyphLoader_CheckPoints( FT_GlyphLoader loader, FT_UInt n_points, FT_UInt n_contours ) { FT_Memory memory = loader->memory; FT_Error error = FT_Err_Ok; FT_Outline* base = &loader->base.outline; FT_Outline* current = &loader->current.outline; FT_Bool adjust = 0; FT_UInt new_max, old_max; /* check points & tags */ new_max = (FT_UInt)base->n_points + (FT_UInt)current->n_points + n_points; old_max = loader->max_points; if ( new_max > old_max ) { new_max = FT_PAD_CEIL( new_max, 8 ); if ( new_max > FT_OUTLINE_POINTS_MAX ) return FT_THROW( Array_Too_Large ); if ( FT_RENEW_ARRAY( base->points, old_max, new_max ) || FT_RENEW_ARRAY( base->tags, old_max, new_max ) ) goto Exit; if ( loader->use_extra ) { if ( FT_RENEW_ARRAY( loader->base.extra_points, old_max * 2, new_max * 2 ) ) goto Exit; FT_ARRAY_MOVE( loader->base.extra_points + new_max, loader->base.extra_points + old_max, old_max ); loader->base.extra_points2 = loader->base.extra_points + new_max; } adjust = 1; loader->max_points = new_max; } /* check contours */ old_max = loader->max_contours; new_max = (FT_UInt)base->n_contours + (FT_UInt)current->n_contours + n_contours; if ( new_max > old_max ) { new_max = FT_PAD_CEIL( new_max, 4 ); if ( new_max > FT_OUTLINE_CONTOURS_MAX ) return FT_THROW( Array_Too_Large ); if ( FT_RENEW_ARRAY( base->contours, old_max, new_max ) ) goto Exit; adjust = 1; loader->max_contours = new_max; } if ( adjust ) FT_GlyphLoader_Adjust_Points( loader ); Exit: if ( error ) FT_GlyphLoader_Reset( loader ); return error; }