src/java.desktop/share/native/libfreetype/src/sfnt/ttmtx.c
author prr
Thu, 09 May 2019 16:09:39 -0700
changeset 54876 da3834261f0c
parent 49234 3375a8039fde
permissions -rw-r--r--
8222362: Upgrade to Freetype 2.10.0 Reviewed-by: serb, erikj
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     1
/****************************************************************************
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     2
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     3
 * ttmtx.c
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     4
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     5
 *   Load the metrics tables common to TTF and OTF fonts (body).
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     6
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     7
 * Copyright (C) 2006-2019 by
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     8
 * David Turner, Robert Wilhelm, and Werner Lemberg.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     9
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    10
 * This file is part of the FreeType project, and may only be used,
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    11
 * modified, and distributed under the terms of the FreeType project
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    12
 * license, LICENSE.TXT.  By continuing to use, modify, or distribute
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    13
 * this file you indicate that you have read the license and
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    14
 * understand and accept it fully.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    15
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    16
 */
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    17
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    18
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    19
#include <ft2build.h>
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    20
#include FT_INTERNAL_DEBUG_H
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    21
#include FT_INTERNAL_STREAM_H
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    22
#include FT_TRUETYPE_TAGS_H
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    23
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    24
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    25
#include FT_SERVICE_METRICS_VARIATIONS_H
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    26
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    27
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    28
#include "ttmtx.h"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    29
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    30
#include "sferrors.h"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    31
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    32
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    33
  /* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    34
  /*            be identical except for the names of their fields,      */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    35
  /*            which are different.                                    */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    36
  /*                                                                    */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    37
  /*            This ensures that `tt_face_load_hmtx' is able to read   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    38
  /*            both the horizontal and vertical headers.               */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    39
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    40
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    41
  /**************************************************************************
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    42
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    43
   * The macro FT_COMPONENT is used in trace mode.  It is an implicit
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    44
   * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    45
   * messages during execution.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    46
   */
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    47
#undef  FT_COMPONENT
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    48
#define FT_COMPONENT  ttmtx
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    49
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    50
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    51
  /**************************************************************************
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    52
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    53
   * @Function:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    54
   *   tt_face_load_hmtx
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    55
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    56
   * @Description:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    57
   *   Load the `hmtx' or `vmtx' table into a face object.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    58
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    59
   * @Input:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    60
   *   face ::
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    61
   *     A handle to the target face object.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    62
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    63
   *   stream ::
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    64
   *     The input stream.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    65
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    66
   *   vertical ::
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    67
   *     A boolean flag.  If set, load `vmtx'.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    68
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    69
   * @Return:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    70
   *   FreeType error code.  0 means success.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    71
   */
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    72
  FT_LOCAL_DEF( FT_Error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    73
  tt_face_load_hmtx( TT_Face    face,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    74
                     FT_Stream  stream,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    75
                     FT_Bool    vertical )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    76
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    77
    FT_Error   error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    78
    FT_ULong   tag, table_size;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    79
    FT_ULong*  ptable_offset;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    80
    FT_ULong*  ptable_size;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    81
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    82
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    83
    if ( vertical )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    84
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    85
      tag           = TTAG_vmtx;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    86
      ptable_offset = &face->vert_metrics_offset;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    87
      ptable_size   = &face->vert_metrics_size;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    88
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    89
    else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    90
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    91
      tag           = TTAG_hmtx;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    92
      ptable_offset = &face->horz_metrics_offset;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    93
      ptable_size   = &face->horz_metrics_size;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    94
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    95
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    96
    error = face->goto_table( face, tag, stream, &table_size );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    97
    if ( error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    98
      goto Fail;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    99
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   100
    *ptable_size   = table_size;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   101
    *ptable_offset = FT_STREAM_POS();
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   102
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   103
  Fail:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   104
    return error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   105
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   106
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   107
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   108
  /**************************************************************************
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   109
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   110
   * @Function:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   111
   *   tt_face_load_hhea
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   112
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   113
   * @Description:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   114
   *   Load the `hhea' or 'vhea' table into a face object.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   115
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   116
   * @Input:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   117
   *   face ::
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   118
   *     A handle to the target face object.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   119
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   120
   *   stream ::
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   121
   *     The input stream.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   122
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   123
   *   vertical ::
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   124
   *     A boolean flag.  If set, load `vhea'.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   125
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   126
   * @Return:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   127
   *   FreeType error code.  0 means success.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   128
   */
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   129
  FT_LOCAL_DEF( FT_Error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   130
  tt_face_load_hhea( TT_Face    face,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   131
                     FT_Stream  stream,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   132
                     FT_Bool    vertical )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   133
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   134
    FT_Error        error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   135
    TT_HoriHeader*  header;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   136
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   137
    static const FT_Frame_Field  metrics_header_fields[] =
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   138
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   139
#undef  FT_STRUCTURE
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   140
#define FT_STRUCTURE  TT_HoriHeader
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   141
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   142
      FT_FRAME_START( 36 ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   143
        FT_FRAME_ULONG ( Version ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   144
        FT_FRAME_SHORT ( Ascender ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   145
        FT_FRAME_SHORT ( Descender ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   146
        FT_FRAME_SHORT ( Line_Gap ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   147
        FT_FRAME_USHORT( advance_Width_Max ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   148
        FT_FRAME_SHORT ( min_Left_Side_Bearing ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   149
        FT_FRAME_SHORT ( min_Right_Side_Bearing ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   150
        FT_FRAME_SHORT ( xMax_Extent ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   151
        FT_FRAME_SHORT ( caret_Slope_Rise ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   152
        FT_FRAME_SHORT ( caret_Slope_Run ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   153
        FT_FRAME_SHORT ( caret_Offset ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   154
        FT_FRAME_SHORT ( Reserved[0] ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   155
        FT_FRAME_SHORT ( Reserved[1] ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   156
        FT_FRAME_SHORT ( Reserved[2] ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   157
        FT_FRAME_SHORT ( Reserved[3] ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   158
        FT_FRAME_SHORT ( metric_Data_Format ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   159
        FT_FRAME_USHORT( number_Of_HMetrics ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   160
      FT_FRAME_END
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   161
    };
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   162
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   163
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   164
    if ( vertical )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   165
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   166
      void  *v = &face->vertical;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   167
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   168
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   169
      error = face->goto_table( face, TTAG_vhea, stream, 0 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   170
      if ( error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   171
        goto Fail;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   172
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   173
      header = (TT_HoriHeader*)v;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   174
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   175
    else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   176
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   177
      error = face->goto_table( face, TTAG_hhea, stream, 0 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   178
      if ( error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   179
        goto Fail;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   180
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   181
      header = &face->horizontal;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   182
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   183
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   184
    if ( FT_STREAM_READ_FIELDS( metrics_header_fields, header ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   185
      goto Fail;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   186
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   187
    FT_TRACE3(( "Ascender:          %5d\n", header->Ascender ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   188
    FT_TRACE3(( "Descender:         %5d\n", header->Descender ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   189
    FT_TRACE3(( "number_Of_Metrics: %5u\n", header->number_Of_HMetrics ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   190
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   191
    header->long_metrics  = NULL;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   192
    header->short_metrics = NULL;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   193
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   194
  Fail:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   195
    return error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   196
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   197
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   198
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   199
  /**************************************************************************
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   200
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   201
   * @Function:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   202
   *   tt_face_get_metrics
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   203
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   204
   * @Description:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   205
   *   Return the horizontal or vertical metrics in font units for a
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   206
   *   given glyph.  The values are the left side bearing (top side
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   207
   *   bearing for vertical metrics) and advance width (advance height
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   208
   *   for vertical metrics).
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   209
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   210
   * @Input:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   211
   *   face ::
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   212
   *     A pointer to the TrueType face structure.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   213
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   214
   *   vertical ::
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   215
   *     If set to TRUE, get vertical metrics.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   216
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   217
   *   gindex ::
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   218
   *     The glyph index.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   219
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   220
   * @Output:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   221
   *   abearing ::
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   222
   *     The bearing, either left side or top side.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   223
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   224
   *   aadvance ::
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   225
   *     The advance width or advance height, depending on
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   226
   *     the `vertical' flag.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   227
   */
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   228
  FT_LOCAL_DEF( void )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   229
  tt_face_get_metrics( TT_Face     face,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   230
                       FT_Bool     vertical,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   231
                       FT_UInt     gindex,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   232
                       FT_Short   *abearing,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   233
                       FT_UShort  *aadvance )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   234
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   235
    FT_Error        error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   236
    FT_Stream       stream = face->root.stream;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   237
    TT_HoriHeader*  header;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   238
    FT_ULong        table_pos, table_size, table_end;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   239
    FT_UShort       k;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   240
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   241
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   242
    FT_Service_MetricsVariations  var =
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   243
      (FT_Service_MetricsVariations)face->var;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   244
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   245
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   246
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   247
    if ( vertical )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   248
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   249
      void*  v = &face->vertical;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   250
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   251
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   252
      header     = (TT_HoriHeader*)v;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   253
      table_pos  = face->vert_metrics_offset;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   254
      table_size = face->vert_metrics_size;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   255
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   256
    else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   257
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   258
      header     = &face->horizontal;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   259
      table_pos  = face->horz_metrics_offset;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   260
      table_size = face->horz_metrics_size;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   261
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   262
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   263
    table_end = table_pos + table_size;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   264
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   265
    k = header->number_Of_HMetrics;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   266
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   267
    if ( k > 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   268
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   269
      if ( gindex < (FT_UInt)k )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   270
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   271
        table_pos += 4 * gindex;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   272
        if ( table_pos + 4 > table_end )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   273
          goto NoData;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   274
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   275
        if ( FT_STREAM_SEEK( table_pos ) ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   276
             FT_READ_USHORT( *aadvance ) ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   277
             FT_READ_SHORT( *abearing )  )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   278
          goto NoData;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   279
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   280
      else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   281
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   282
        table_pos += 4 * ( k - 1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   283
        if ( table_pos + 4 > table_end )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   284
          goto NoData;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   285
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   286
        if ( FT_STREAM_SEEK( table_pos ) ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   287
             FT_READ_USHORT( *aadvance ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   288
          goto NoData;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   289
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   290
        table_pos += 4 + 2 * ( gindex - k );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   291
        if ( table_pos + 2 > table_end )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   292
          *abearing = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   293
        else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   294
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   295
          if ( !FT_STREAM_SEEK( table_pos ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   296
            (void)FT_READ_SHORT( *abearing );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   297
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   298
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   299
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   300
    else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   301
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   302
    NoData:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   303
      *abearing = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   304
      *aadvance = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   305
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   306
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   307
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   308
    if ( var )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   309
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   310
      FT_Face  f = FT_FACE( face );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   311
      FT_Int   a = (FT_Int)*aadvance;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   312
      FT_Int   b = (FT_Int)*abearing;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   313
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   314
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   315
      if ( vertical )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   316
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   317
        if ( var->vadvance_adjust )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   318
          var->vadvance_adjust( f, gindex, &a );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   319
        if ( var->tsb_adjust )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   320
          var->tsb_adjust( f, gindex, &b );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   321
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   322
      else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   323
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   324
        if ( var->hadvance_adjust )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   325
          var->hadvance_adjust( f, gindex, &a );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   326
        if ( var->lsb_adjust )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   327
          var->lsb_adjust( f, gindex, &b );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   328
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   329
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   330
      *aadvance = (FT_UShort)a;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   331
      *abearing = (FT_Short)b;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   332
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   333
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   334
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   335
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   336
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   337
/* END */