misc/libfreetype/src/cache/ftcbasic.c
author sheepluva
Fri, 17 May 2013 22:01:23 +0200
changeset 9010 d1f9197027b2
parent 5172 88f2e05288ba
permissions -rw-r--r--
changed icon for freezer ( issue #614 ), for rope (to be easier to recognize) and cluster bomb (to be easier to recognize and to so that it can be distinguished from the regular grenade's icon even when no color is present or perceived
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5172
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     1
/***************************************************************************/
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     2
/*                                                                         */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     3
/*  ftcbasic.c                                                             */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     4
/*                                                                         */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     5
/*    The FreeType basic cache interface (body).                           */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     6
/*                                                                         */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     7
/*  Copyright 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011 by            */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     8
/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     9
/*                                                                         */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    10
/*  This file is part of the FreeType project, and may only be used,       */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    11
/*  modified, and distributed under the terms of the FreeType project      */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    12
/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    13
/*  this file you indicate that you have read the license and              */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    14
/*  understand and accept it fully.                                        */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    15
/*                                                                         */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    16
/***************************************************************************/
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    17
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    18
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    19
#include <ft2build.h>
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    20
#include FT_INTERNAL_OBJECTS_H
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    21
#include FT_INTERNAL_DEBUG_H
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    22
#include FT_CACHE_H
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    23
#include "ftcglyph.h"
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    24
#include "ftcimage.h"
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    25
#include "ftcsbits.h"
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    26
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    27
#include "ftccback.h"
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    28
#include "ftcerror.h"
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    29
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    30
#define FT_COMPONENT  trace_cache
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    31
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    32
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    33
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    34
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    35
  /*
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    36
   *  These structures correspond to the FTC_Font and FTC_ImageDesc types
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    37
   *  that were defined in version 2.1.7.
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    38
   */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    39
  typedef struct  FTC_OldFontRec_
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    40
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    41
    FTC_FaceID  face_id;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    42
    FT_UShort   pix_width;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    43
    FT_UShort   pix_height;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    44
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    45
  } FTC_OldFontRec, *FTC_OldFont;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    46
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    47
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    48
  typedef struct  FTC_OldImageDescRec_
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    49
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    50
    FTC_OldFontRec  font;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    51
    FT_UInt32       flags;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    52
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    53
  } FTC_OldImageDescRec, *FTC_OldImageDesc;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    54
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    55
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    56
  /*
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    57
   *  Notice that FTC_OldImageDescRec and FTC_ImageTypeRec are nearly
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    58
   *  identical, bit-wise.  The only difference is that the `width' and
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    59
   *  `height' fields are expressed as 16-bit integers in the old structure,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    60
   *  and as normal `int' in the new one.
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    61
   *
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    62
   *  We are going to perform a weird hack to detect which structure is
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    63
   *  being passed to the image and sbit caches.  If the new structure's
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    64
   *  `width' is larger than 0x10000, we assume that we are really receiving
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    65
   *  an FTC_OldImageDesc.
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    66
   */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    67
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    68
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    69
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    70
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    71
  /*
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    72
   *  Basic Families
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    73
   *
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    74
   */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    75
  typedef struct  FTC_BasicAttrRec_
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    76
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    77
    FTC_ScalerRec  scaler;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    78
    FT_UInt        load_flags;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    79
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    80
  } FTC_BasicAttrRec, *FTC_BasicAttrs;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    81
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    82
#define FTC_BASIC_ATTR_COMPARE( a, b )                                 \
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    83
          FT_BOOL( FTC_SCALER_COMPARE( &(a)->scaler, &(b)->scaler ) && \
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    84
                   (a)->load_flags == (b)->load_flags               )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    85
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    86
#define FTC_BASIC_ATTR_HASH( a )                                   \
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    87
          ( FTC_SCALER_HASH( &(a)->scaler ) + 31*(a)->load_flags )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    88
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    89
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    90
  typedef struct  FTC_BasicQueryRec_
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    91
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    92
    FTC_GQueryRec     gquery;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    93
    FTC_BasicAttrRec  attrs;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    94
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    95
  } FTC_BasicQueryRec, *FTC_BasicQuery;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    96
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    97
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    98
  typedef struct  FTC_BasicFamilyRec_
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    99
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   100
    FTC_FamilyRec     family;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   101
    FTC_BasicAttrRec  attrs;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   102
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   103
  } FTC_BasicFamilyRec, *FTC_BasicFamily;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   104
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   105
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   106
  FT_CALLBACK_DEF( FT_Bool )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   107
  ftc_basic_family_compare( FTC_MruNode  ftcfamily,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   108
                            FT_Pointer   ftcquery )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   109
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   110
    FTC_BasicFamily  family = (FTC_BasicFamily)ftcfamily;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   111
    FTC_BasicQuery   query  = (FTC_BasicQuery)ftcquery;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   112
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   113
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   114
    return FTC_BASIC_ATTR_COMPARE( &family->attrs, &query->attrs );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   115
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   116
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   117
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   118
  FT_CALLBACK_DEF( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   119
  ftc_basic_family_init( FTC_MruNode  ftcfamily,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   120
                         FT_Pointer   ftcquery,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   121
                         FT_Pointer   ftccache )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   122
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   123
    FTC_BasicFamily  family = (FTC_BasicFamily)ftcfamily;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   124
    FTC_BasicQuery   query  = (FTC_BasicQuery)ftcquery;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   125
    FTC_Cache        cache  = (FTC_Cache)ftccache;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   126
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   127
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   128
    FTC_Family_Init( FTC_FAMILY( family ), cache );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   129
    family->attrs = query->attrs;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   130
    return 0;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   131
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   132
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   133
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   134
  FT_CALLBACK_DEF( FT_UInt )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   135
  ftc_basic_family_get_count( FTC_Family   ftcfamily,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   136
                              FTC_Manager  manager )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   137
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   138
    FTC_BasicFamily  family = (FTC_BasicFamily)ftcfamily;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   139
    FT_Error         error;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   140
    FT_Face          face;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   141
    FT_UInt          result = 0;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   142
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   143
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   144
    error = FTC_Manager_LookupFace( manager, family->attrs.scaler.face_id,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   145
                                    &face );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   146
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   147
    if ( error || !face )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   148
      return result;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   149
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   150
    if ( (FT_ULong)face->num_glyphs > FT_UINT_MAX || 0 > face->num_glyphs )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   151
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   152
      FT_TRACE1(( "ftc_basic_family_get_count: too large number of glyphs " ));
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   153
      FT_TRACE1(( "in this face, truncated\n", face->num_glyphs ));
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   154
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   155
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   156
    if ( !error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   157
      result = (FT_UInt)face->num_glyphs;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   158
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   159
    return result;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   160
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   161
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   162
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   163
  FT_CALLBACK_DEF( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   164
  ftc_basic_family_load_bitmap( FTC_Family   ftcfamily,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   165
                                FT_UInt      gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   166
                                FTC_Manager  manager,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   167
                                FT_Face     *aface )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   168
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   169
    FTC_BasicFamily  family = (FTC_BasicFamily)ftcfamily;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   170
    FT_Error         error;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   171
    FT_Size          size;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   172
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   173
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   174
    error = FTC_Manager_LookupSize( manager, &family->attrs.scaler, &size );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   175
    if ( !error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   176
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   177
      FT_Face  face = size->face;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   178
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   179
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   180
      error = FT_Load_Glyph( face, gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   181
                             family->attrs.load_flags | FT_LOAD_RENDER );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   182
      if ( !error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   183
        *aface = face;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   184
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   185
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   186
    return error;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   187
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   188
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   189
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   190
  FT_CALLBACK_DEF( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   191
  ftc_basic_family_load_glyph( FTC_Family  ftcfamily,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   192
                               FT_UInt     gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   193
                               FTC_Cache   cache,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   194
                               FT_Glyph   *aglyph )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   195
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   196
    FTC_BasicFamily  family = (FTC_BasicFamily)ftcfamily;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   197
    FT_Error         error;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   198
    FTC_Scaler       scaler = &family->attrs.scaler;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   199
    FT_Face          face;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   200
    FT_Size          size;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   201
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   202
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   203
    /* we will now load the glyph image */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   204
    error = FTC_Manager_LookupSize( cache->manager,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   205
                                    scaler,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   206
                                    &size );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   207
    if ( !error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   208
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   209
      face = size->face;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   210
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   211
      error = FT_Load_Glyph( face, gindex, family->attrs.load_flags );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   212
      if ( !error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   213
      {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   214
        if ( face->glyph->format == FT_GLYPH_FORMAT_BITMAP  ||
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   215
             face->glyph->format == FT_GLYPH_FORMAT_OUTLINE )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   216
        {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   217
          /* ok, copy it */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   218
          FT_Glyph  glyph;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   219
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   220
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   221
          error = FT_Get_Glyph( face->glyph, &glyph );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   222
          if ( !error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   223
          {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   224
            *aglyph = glyph;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   225
            goto Exit;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   226
          }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   227
        }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   228
        else
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   229
          error = FTC_Err_Invalid_Argument;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   230
      }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   231
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   232
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   233
  Exit:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   234
    return error;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   235
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   236
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   237
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   238
  FT_CALLBACK_DEF( FT_Bool )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   239
  ftc_basic_gnode_compare_faceid( FTC_Node    ftcgnode,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   240
                                  FT_Pointer  ftcface_id,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   241
                                  FTC_Cache   cache,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   242
                                  FT_Bool*    list_changed )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   243
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   244
    FTC_GNode        gnode   = (FTC_GNode)ftcgnode;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   245
    FTC_FaceID       face_id = (FTC_FaceID)ftcface_id;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   246
    FTC_BasicFamily  family  = (FTC_BasicFamily)gnode->family;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   247
    FT_Bool          result;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   248
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   249
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   250
    if ( list_changed )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   251
      *list_changed = FALSE;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   252
    result = FT_BOOL( family->attrs.scaler.face_id == face_id );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   253
    if ( result )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   254
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   255
      /* we must call this function to avoid this node from appearing
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   256
       * in later lookups with the same face_id!
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   257
       */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   258
      FTC_GNode_UnselectFamily( gnode, cache );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   259
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   260
    return result;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   261
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   262
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   263
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   264
 /*
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   265
  *
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   266
  * basic image cache
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   267
  *
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   268
  */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   269
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   270
  FT_CALLBACK_TABLE_DEF
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   271
  const FTC_IFamilyClassRec  ftc_basic_image_family_class =
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   272
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   273
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   274
      sizeof ( FTC_BasicFamilyRec ),
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   275
      ftc_basic_family_compare,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   276
      ftc_basic_family_init,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   277
      0,                        /* FTC_MruNode_ResetFunc */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   278
      0                         /* FTC_MruNode_DoneFunc  */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   279
    },
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   280
    ftc_basic_family_load_glyph
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   281
  };
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   282
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   283
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   284
  FT_CALLBACK_TABLE_DEF
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   285
  const FTC_GCacheClassRec  ftc_basic_image_cache_class =
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   286
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   287
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   288
      ftc_inode_new,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   289
      ftc_inode_weight,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   290
      ftc_gnode_compare,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   291
      ftc_basic_gnode_compare_faceid,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   292
      ftc_inode_free,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   293
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   294
      sizeof ( FTC_GCacheRec ),
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   295
      ftc_gcache_init,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   296
      ftc_gcache_done
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   297
    },
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   298
    (FTC_MruListClass)&ftc_basic_image_family_class
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   299
  };
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   300
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   301
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   302
  /* documentation is in ftcache.h */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   303
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   304
  FT_EXPORT_DEF( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   305
  FTC_ImageCache_New( FTC_Manager      manager,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   306
                      FTC_ImageCache  *acache )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   307
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   308
    return FTC_GCache_New( manager, &ftc_basic_image_cache_class,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   309
                           (FTC_GCache*)acache );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   310
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   311
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   312
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   313
  /* documentation is in ftcache.h */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   314
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   315
  FT_EXPORT_DEF( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   316
  FTC_ImageCache_Lookup( FTC_ImageCache  cache,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   317
                         FTC_ImageType   type,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   318
                         FT_UInt         gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   319
                         FT_Glyph       *aglyph,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   320
                         FTC_Node       *anode )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   321
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   322
    FTC_BasicQueryRec  query;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   323
    FTC_Node           node = 0; /* make compiler happy */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   324
    FT_Error           error;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   325
    FT_PtrDist         hash;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   326
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   327
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   328
    /* some argument checks are delayed to FTC_Cache_Lookup */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   329
    if ( !aglyph )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   330
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   331
      error = FTC_Err_Invalid_Argument;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   332
      goto Exit;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   333
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   334
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   335
    *aglyph = NULL;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   336
    if ( anode )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   337
      *anode  = NULL;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   338
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   339
#if defined( FT_CONFIG_OPTION_OLD_INTERNALS ) && ( FT_INT_MAX > 0xFFFFU )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   340
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   341
    /*
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   342
     *  This one is a major hack used to detect whether we are passed a
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   343
     *  regular FTC_ImageType handle, or a legacy FTC_OldImageDesc one.
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   344
     */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   345
    if ( (FT_ULong)type->width >= 0x10000L )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   346
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   347
      FTC_OldImageDesc  desc = (FTC_OldImageDesc)type;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   348
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   349
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   350
      query.attrs.scaler.face_id = desc->font.face_id;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   351
      query.attrs.scaler.width   = desc->font.pix_width;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   352
      query.attrs.scaler.height  = desc->font.pix_height;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   353
      query.attrs.load_flags     = desc->flags;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   354
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   355
    else
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   356
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   357
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   358
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   359
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   360
      if ( (FT_ULong)(type->flags - FT_INT_MIN) > FT_UINT_MAX )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   361
      {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   362
        FT_TRACE1(( "FTC_ImageCache_Lookup: higher bits in load_flags" ));
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   363
        FT_TRACE1(( "0x%x are dropped\n", (type->flags & ~((FT_ULong)FT_UINT_MAX)) ));
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   364
      }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   365
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   366
      query.attrs.scaler.face_id = type->face_id;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   367
      query.attrs.scaler.width   = type->width;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   368
      query.attrs.scaler.height  = type->height;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   369
      query.attrs.load_flags     = (FT_UInt)type->flags;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   370
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   371
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   372
    query.attrs.scaler.pixel = 1;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   373
    query.attrs.scaler.x_res = 0;  /* make compilers happy */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   374
    query.attrs.scaler.y_res = 0;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   375
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   376
    hash = FTC_BASIC_ATTR_HASH( &query.attrs ) + gindex;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   377
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   378
#if 1  /* inlining is about 50% faster! */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   379
    FTC_GCACHE_LOOKUP_CMP( cache,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   380
                           ftc_basic_family_compare,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   381
                           FTC_GNode_Compare,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   382
                           hash, gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   383
                           &query,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   384
                           node,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   385
                           error );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   386
#else
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   387
    error = FTC_GCache_Lookup( FTC_GCACHE( cache ),
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   388
                               hash, gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   389
                               FTC_GQUERY( &query ),
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   390
                               &node );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   391
#endif
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   392
    if ( !error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   393
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   394
      *aglyph = FTC_INODE( node )->glyph;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   395
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   396
      if ( anode )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   397
      {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   398
        *anode = node;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   399
        node->ref_count++;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   400
      }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   401
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   402
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   403
  Exit:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   404
    return error;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   405
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   406
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   407
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   408
  /* documentation is in ftcache.h */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   409
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   410
  FT_EXPORT_DEF( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   411
  FTC_ImageCache_LookupScaler( FTC_ImageCache  cache,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   412
                               FTC_Scaler      scaler,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   413
                               FT_ULong        load_flags,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   414
                               FT_UInt         gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   415
                               FT_Glyph       *aglyph,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   416
                               FTC_Node       *anode )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   417
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   418
    FTC_BasicQueryRec  query;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   419
    FTC_Node           node = 0; /* make compiler happy */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   420
    FT_Error           error;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   421
    FT_PtrDist         hash;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   422
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   423
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   424
    /* some argument checks are delayed to FTC_Cache_Lookup */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   425
    if ( !aglyph || !scaler )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   426
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   427
      error = FTC_Err_Invalid_Argument;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   428
      goto Exit;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   429
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   430
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   431
    *aglyph = NULL;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   432
    if ( anode )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   433
      *anode  = NULL;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   434
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   435
    /* FT_Load_Glyph(), FT_Load_Char() take FT_UInt flags */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   436
    if ( load_flags > FT_UINT_MAX )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   437
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   438
      FT_TRACE1(( "FTC_ImageCache_LookupScaler: higher bits in load_flags" ));
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   439
      FT_TRACE1(( "0x%x are dropped\n", (load_flags & ~((FT_ULong)FT_UINT_MAX)) ));
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   440
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   441
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   442
    query.attrs.scaler     = scaler[0];
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   443
    query.attrs.load_flags = (FT_UInt)load_flags;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   444
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   445
    hash = FTC_BASIC_ATTR_HASH( &query.attrs ) + gindex;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   446
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   447
    FTC_GCACHE_LOOKUP_CMP( cache,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   448
                           ftc_basic_family_compare,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   449
                           FTC_GNode_Compare,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   450
                           hash, gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   451
                           &query,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   452
                           node,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   453
                           error );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   454
    if ( !error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   455
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   456
      *aglyph = FTC_INODE( node )->glyph;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   457
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   458
      if ( anode )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   459
      {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   460
        *anode = node;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   461
        node->ref_count++;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   462
      }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   463
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   464
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   465
  Exit:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   466
    return error;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   467
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   468
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   469
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   470
  
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   471
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   472
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   473
  /* yet another backwards-legacy structure */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   474
  typedef struct  FTC_OldImage_Desc_
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   475
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   476
    FTC_FontRec  font;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   477
    FT_UInt      image_type;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   478
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   479
  } FTC_OldImage_Desc;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   480
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   481
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   482
#define FTC_OLD_IMAGE_FORMAT( x )  ( (x) & 7 )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   483
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   484
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   485
#define ftc_old_image_format_bitmap    0x0000
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   486
#define ftc_old_image_format_outline   0x0001
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   487
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   488
#define ftc_old_image_format_mask      0x000F
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   489
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   490
#define ftc_old_image_flag_monochrome  0x0010
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   491
#define ftc_old_image_flag_unhinted    0x0020
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   492
#define ftc_old_image_flag_autohinted  0x0040
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   493
#define ftc_old_image_flag_unscaled    0x0080
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   494
#define ftc_old_image_flag_no_sbits    0x0100
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   495
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   496
  /* monochrome bitmap */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   497
#define ftc_old_image_mono             ftc_old_image_format_bitmap   | \
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   498
                                       ftc_old_image_flag_monochrome
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   499
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   500
  /* anti-aliased bitmap */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   501
#define ftc_old_image_grays            ftc_old_image_format_bitmap
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   502
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   503
  /* scaled outline */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   504
#define ftc_old_image_outline          ftc_old_image_format_outline
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   505
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   506
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   507
  static void
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   508
  ftc_image_type_from_old_desc( FTC_ImageType       typ,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   509
                                FTC_OldImage_Desc*  desc )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   510
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   511
    typ->face_id = desc->font.face_id;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   512
    typ->width   = desc->font.pix_width;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   513
    typ->height  = desc->font.pix_height;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   514
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   515
    /* convert image type flags to load flags */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   516
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   517
      FT_UInt  load_flags = FT_LOAD_DEFAULT;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   518
      FT_UInt  type       = desc->image_type;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   519
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   520
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   521
      /* determine load flags, depending on the font description's */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   522
      /* image type                                                */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   523
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   524
      if ( FTC_OLD_IMAGE_FORMAT( type ) == ftc_old_image_format_bitmap )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   525
      {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   526
        if ( type & ftc_old_image_flag_monochrome )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   527
          load_flags |= FT_LOAD_MONOCHROME;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   528
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   529
        /* disable embedded bitmaps loading if necessary */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   530
        if ( type & ftc_old_image_flag_no_sbits )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   531
          load_flags |= FT_LOAD_NO_BITMAP;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   532
      }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   533
      else
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   534
      {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   535
        /* we want an outline, don't load embedded bitmaps */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   536
        load_flags |= FT_LOAD_NO_BITMAP;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   537
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   538
        if ( type & ftc_old_image_flag_unscaled )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   539
          load_flags |= FT_LOAD_NO_SCALE;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   540
      }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   541
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   542
      /* always render glyphs to bitmaps */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   543
      load_flags |= FT_LOAD_RENDER;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   544
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   545
      if ( type & ftc_old_image_flag_unhinted )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   546
        load_flags |= FT_LOAD_NO_HINTING;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   547
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   548
      if ( type & ftc_old_image_flag_autohinted )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   549
        load_flags |= FT_LOAD_FORCE_AUTOHINT;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   550
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   551
      typ->flags = load_flags;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   552
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   553
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   554
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   555
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   556
  FT_EXPORT( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   557
  FTC_Image_Cache_New( FTC_Manager      manager,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   558
                       FTC_ImageCache  *acache );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   559
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   560
  FT_EXPORT( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   561
  FTC_Image_Cache_Lookup( FTC_ImageCache      icache,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   562
                          FTC_OldImage_Desc*  desc,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   563
                          FT_UInt             gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   564
                          FT_Glyph           *aglyph );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   565
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   566
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   567
  FT_EXPORT_DEF( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   568
  FTC_Image_Cache_New( FTC_Manager      manager,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   569
                       FTC_ImageCache  *acache )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   570
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   571
    return FTC_ImageCache_New( manager, (FTC_ImageCache*)acache );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   572
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   573
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   574
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   575
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   576
  FT_EXPORT_DEF( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   577
  FTC_Image_Cache_Lookup( FTC_ImageCache      icache,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   578
                          FTC_OldImage_Desc*  desc,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   579
                          FT_UInt             gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   580
                          FT_Glyph           *aglyph )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   581
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   582
    FTC_ImageTypeRec  type0;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   583
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   584
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   585
    if ( !desc )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   586
      return FTC_Err_Invalid_Argument;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   587
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   588
    ftc_image_type_from_old_desc( &type0, desc );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   589
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   590
    return FTC_ImageCache_Lookup( (FTC_ImageCache)icache,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   591
                                   &type0,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   592
                                   gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   593
                                   aglyph,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   594
                                   NULL );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   595
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   596
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   597
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   598
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   599
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   600
 /*
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   601
  *
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   602
  * basic small bitmap cache
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   603
  *
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   604
  */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   605
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   606
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   607
  FT_CALLBACK_TABLE_DEF
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   608
  const FTC_SFamilyClassRec  ftc_basic_sbit_family_class =
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   609
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   610
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   611
      sizeof( FTC_BasicFamilyRec ),
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   612
      ftc_basic_family_compare,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   613
      ftc_basic_family_init,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   614
      0,                            /* FTC_MruNode_ResetFunc */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   615
      0                             /* FTC_MruNode_DoneFunc  */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   616
    },
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   617
    ftc_basic_family_get_count,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   618
    ftc_basic_family_load_bitmap
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   619
  };
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   620
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   621
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   622
  FT_CALLBACK_TABLE_DEF
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   623
  const FTC_GCacheClassRec  ftc_basic_sbit_cache_class =
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   624
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   625
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   626
      ftc_snode_new,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   627
      ftc_snode_weight,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   628
      ftc_snode_compare,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   629
      ftc_basic_gnode_compare_faceid,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   630
      ftc_snode_free,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   631
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   632
      sizeof ( FTC_GCacheRec ),
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   633
      ftc_gcache_init,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   634
      ftc_gcache_done
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   635
    },
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   636
    (FTC_MruListClass)&ftc_basic_sbit_family_class
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   637
  };
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   638
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   639
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   640
  /* documentation is in ftcache.h */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   641
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   642
  FT_EXPORT_DEF( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   643
  FTC_SBitCache_New( FTC_Manager     manager,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   644
                     FTC_SBitCache  *acache )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   645
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   646
    return FTC_GCache_New( manager, &ftc_basic_sbit_cache_class,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   647
                           (FTC_GCache*)acache );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   648
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   649
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   650
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   651
  /* documentation is in ftcache.h */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   652
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   653
  FT_EXPORT_DEF( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   654
  FTC_SBitCache_Lookup( FTC_SBitCache  cache,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   655
                        FTC_ImageType  type,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   656
                        FT_UInt        gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   657
                        FTC_SBit      *ansbit,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   658
                        FTC_Node      *anode )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   659
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   660
    FT_Error           error;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   661
    FTC_BasicQueryRec  query;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   662
    FTC_Node           node = 0; /* make compiler happy */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   663
    FT_PtrDist         hash;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   664
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   665
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   666
    if ( anode )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   667
      *anode = NULL;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   668
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   669
    /* other argument checks delayed to FTC_Cache_Lookup */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   670
    if ( !ansbit )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   671
      return FTC_Err_Invalid_Argument;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   672
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   673
    *ansbit = NULL;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   674
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   675
#if defined( FT_CONFIG_OPTION_OLD_INTERNALS ) && ( FT_INT_MAX > 0xFFFFU )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   676
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   677
    /*  This one is a major hack used to detect whether we are passed a
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   678
     *  regular FTC_ImageType handle, or a legacy FTC_OldImageDesc one.
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   679
     */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   680
    if ( (FT_ULong)type->width >= 0x10000L )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   681
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   682
      FTC_OldImageDesc  desc = (FTC_OldImageDesc)type;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   683
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   684
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   685
      query.attrs.scaler.face_id = desc->font.face_id;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   686
      query.attrs.scaler.width   = desc->font.pix_width;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   687
      query.attrs.scaler.height  = desc->font.pix_height;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   688
      query.attrs.load_flags     = desc->flags;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   689
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   690
    else
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   691
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   692
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   693
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   694
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   695
      if ( (FT_ULong)(type->flags - FT_INT_MIN) > FT_UINT_MAX )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   696
      {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   697
        FT_TRACE1(( "FTC_ImageCache_Lookup: higher bits in load_flags" ));
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   698
        FT_TRACE1(( "0x%x are dropped\n", (type->flags & ~((FT_ULong)FT_UINT_MAX)) ));
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   699
      }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   700
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   701
      query.attrs.scaler.face_id = type->face_id;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   702
      query.attrs.scaler.width   = type->width;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   703
      query.attrs.scaler.height  = type->height;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   704
      query.attrs.load_flags     = (FT_UInt)type->flags;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   705
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   706
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   707
    query.attrs.scaler.pixel = 1;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   708
    query.attrs.scaler.x_res = 0;  /* make compilers happy */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   709
    query.attrs.scaler.y_res = 0;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   710
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   711
    /* beware, the hash must be the same for all glyph ranges! */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   712
    hash = FTC_BASIC_ATTR_HASH( &query.attrs ) +
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   713
           gindex / FTC_SBIT_ITEMS_PER_NODE;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   714
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   715
#if 1  /* inlining is about 50% faster! */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   716
    FTC_GCACHE_LOOKUP_CMP( cache,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   717
                           ftc_basic_family_compare,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   718
                           FTC_SNode_Compare,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   719
                           hash, gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   720
                           &query,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   721
                           node,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   722
                           error );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   723
#else
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   724
    error = FTC_GCache_Lookup( FTC_GCACHE( cache ),
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   725
                               hash,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   726
                               gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   727
                               FTC_GQUERY( &query ),
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   728
                               &node );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   729
#endif
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   730
    if ( error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   731
      goto Exit;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   732
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   733
    *ansbit = FTC_SNODE( node )->sbits +
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   734
              ( gindex - FTC_GNODE( node )->gindex );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   735
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   736
    if ( anode )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   737
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   738
      *anode = node;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   739
      node->ref_count++;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   740
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   741
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   742
  Exit:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   743
    return error;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   744
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   745
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   746
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   747
  /* documentation is in ftcache.h */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   748
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   749
  FT_EXPORT_DEF( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   750
  FTC_SBitCache_LookupScaler( FTC_SBitCache  cache,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   751
                              FTC_Scaler     scaler,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   752
                              FT_ULong       load_flags,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   753
                              FT_UInt        gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   754
                              FTC_SBit      *ansbit,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   755
                              FTC_Node      *anode )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   756
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   757
    FT_Error           error;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   758
    FTC_BasicQueryRec  query;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   759
    FTC_Node           node = 0; /* make compiler happy */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   760
    FT_PtrDist         hash;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   761
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   762
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   763
    if ( anode )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   764
        *anode = NULL;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   765
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   766
    /* other argument checks delayed to FTC_Cache_Lookup */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   767
    if ( !ansbit || !scaler )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   768
        return FTC_Err_Invalid_Argument;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   769
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   770
    *ansbit = NULL;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   771
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   772
    /* FT_Load_Glyph(), FT_Load_Char() take FT_UInt flags */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   773
    if ( load_flags > FT_UINT_MAX )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   774
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   775
      FT_TRACE1(( "FTC_ImageCache_LookupScaler: higher bits in load_flags" ));
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   776
      FT_TRACE1(( "0x%x are dropped\n", (load_flags & ~((FT_ULong)FT_UINT_MAX)) ));
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   777
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   778
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   779
    query.attrs.scaler     = scaler[0];
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   780
    query.attrs.load_flags = (FT_UInt)load_flags;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   781
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   782
    /* beware, the hash must be the same for all glyph ranges! */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   783
    hash = FTC_BASIC_ATTR_HASH( &query.attrs ) +
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   784
             gindex / FTC_SBIT_ITEMS_PER_NODE;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   785
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   786
    FTC_GCACHE_LOOKUP_CMP( cache,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   787
                           ftc_basic_family_compare,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   788
                           FTC_SNode_Compare,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   789
                           hash, gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   790
                           &query,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   791
                           node,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   792
                           error );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   793
    if ( error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   794
      goto Exit;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   795
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   796
    *ansbit = FTC_SNODE( node )->sbits +
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   797
              ( gindex - FTC_GNODE( node )->gindex );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   798
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   799
    if ( anode )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   800
    {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   801
      *anode = node;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   802
      node->ref_count++;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   803
    }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   804
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   805
  Exit:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   806
    return error;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   807
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   808
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   809
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   810
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   811
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   812
  FT_EXPORT( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   813
  FTC_SBit_Cache_New( FTC_Manager     manager,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   814
                      FTC_SBitCache  *acache );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   815
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   816
  FT_EXPORT( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   817
  FTC_SBit_Cache_Lookup( FTC_SBitCache       cache,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   818
                         FTC_OldImage_Desc*  desc,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   819
                         FT_UInt             gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   820
                         FTC_SBit           *ansbit );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   821
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   822
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   823
  FT_EXPORT_DEF( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   824
  FTC_SBit_Cache_New( FTC_Manager     manager,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   825
                      FTC_SBitCache  *acache )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   826
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   827
    return FTC_SBitCache_New( manager, (FTC_SBitCache*)acache );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   828
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   829
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   830
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   831
  FT_EXPORT_DEF( FT_Error )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   832
  FTC_SBit_Cache_Lookup( FTC_SBitCache       cache,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   833
                         FTC_OldImage_Desc*  desc,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   834
                         FT_UInt             gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   835
                         FTC_SBit           *ansbit )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   836
  {
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   837
    FTC_ImageTypeRec  type0;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   838
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   839
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   840
    if ( !desc )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   841
      return FTC_Err_Invalid_Argument;
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   842
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   843
    ftc_image_type_from_old_desc( &type0, desc );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   844
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   845
    return FTC_SBitCache_Lookup( (FTC_SBitCache)cache,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   846
                                  &type0,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   847
                                  gindex,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   848
                                  ansbit,
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   849
                                  NULL );
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   850
  }
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   851
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   852
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   853
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   854
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   855
/* END */