~ubuntu-branches/ubuntu/wily/hedgewars/wily

« back to all changes in this revision

Viewing changes to misc/libfreetype/src/cache/ftcimage.c

  • Committer: Package Import Robot
  • Author(s): Dmitry E. Oboukhov
  • Date: 2011-09-23 10:16:55 UTC
  • mfrom: (1.2.11 upstream)
  • Revision ID: package-import@ubuntu.com-20110923101655-3977th2gc5n0a3pv
Tags: 0.9.16-1
* New upstream version.
 + Downloadable content! Simply click to install any content.
   New voices, hats, maps, themes, translations, music, scripts...
   Hedgewars is now more customisable than ever before! As time goes
   by we will be soliciting community content to feature on this page,
   so remember to check it from time to time. If you decide you want
   to go back to standard Hedgewars, just remove the Data directory
   from your Hedgewars config directory.
 + 3-D rendering! Diorama-like rendering of the game in a variety
   of 3D modes. Let us know which ones work best for you, we didn't
   really have the equipment to test them all.
 + Resizable game window.
 + New utilities! The Time Box will remove one of your hedgehogs
   from the game for a while, protecting from attack until it returns,
   somewhere else on the map. Land spray will allow you to build bridges,
   seal up holes, or just make life unpleasant for your enemies.
 + New single player: Bamboo Thicket, That Sinking Feeling, Newton and
   the Tree and multi-player: The Specialists, Space Invaders,
   Racer - scripts! And a ton more script hooks for scripters
 + New twists on old weapons. Drill strike, seduction and fire have
   been adjusted. Defective mines have been added, rope can attach to
   hogs/crates/barrels again, grenades now have variable bounce (use
   precise key + 1-5). Portal gun is now more usable in flight and
   all game actions are a lot faster.
 + New theme - Golf, dozens of new community hats and a new
   localised Default voice, Ukranian.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/***************************************************************************/
 
2
/*                                                                         */
 
3
/*  ftcimage.c                                                             */
 
4
/*                                                                         */
 
5
/*    FreeType Image cache (body).                                         */
 
6
/*                                                                         */
 
7
/*  Copyright 2000-2001, 2003, 2004, 2006, 2010 by                         */
 
8
/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 
9
/*                                                                         */
 
10
/*  This file is part of the FreeType project, and may only be used,       */
 
11
/*  modified, and distributed under the terms of the FreeType project      */
 
12
/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 
13
/*  this file you indicate that you have read the license and              */
 
14
/*  understand and accept it fully.                                        */
 
15
/*                                                                         */
 
16
/***************************************************************************/
 
17
 
 
18
 
 
19
#include <ft2build.h>
 
20
#include FT_CACHE_H
 
21
#include "ftcimage.h"
 
22
#include FT_INTERNAL_MEMORY_H
 
23
 
 
24
#include "ftccback.h"
 
25
#include "ftcerror.h"
 
26
 
 
27
 
 
28
  /* finalize a given glyph image node */
 
29
  FT_LOCAL_DEF( void )
 
30
  ftc_inode_free( FTC_Node   ftcinode,
 
31
                  FTC_Cache  cache )
 
32
  {
 
33
    FTC_INode  inode = (FTC_INode)ftcinode;
 
34
    FT_Memory  memory = cache->memory;
 
35
 
 
36
 
 
37
    if ( inode->glyph )
 
38
    {
 
39
      FT_Done_Glyph( inode->glyph );
 
40
      inode->glyph = NULL;
 
41
    }
 
42
 
 
43
    FTC_GNode_Done( FTC_GNODE( inode ), cache );
 
44
    FT_FREE( inode );
 
45
  }
 
46
 
 
47
 
 
48
  FT_LOCAL_DEF( void )
 
49
  FTC_INode_Free( FTC_INode  inode,
 
50
                  FTC_Cache  cache )
 
51
  {
 
52
    ftc_inode_free( FTC_NODE( inode ), cache );
 
53
  }
 
54
 
 
55
 
 
56
  /* initialize a new glyph image node */
 
57
  FT_LOCAL_DEF( FT_Error )
 
58
  FTC_INode_New( FTC_INode   *pinode,
 
59
                 FTC_GQuery   gquery,
 
60
                 FTC_Cache    cache )
 
61
  {
 
62
    FT_Memory  memory = cache->memory;
 
63
    FT_Error   error;
 
64
    FTC_INode  inode  = NULL;
 
65
 
 
66
 
 
67
    if ( !FT_NEW( inode ) )
 
68
    {
 
69
      FTC_GNode         gnode  = FTC_GNODE( inode );
 
70
      FTC_Family        family = gquery->family;
 
71
      FT_UInt           gindex = gquery->gindex;
 
72
      FTC_IFamilyClass  clazz  = FTC_CACHE__IFAMILY_CLASS( cache );
 
73
 
 
74
 
 
75
      /* initialize its inner fields */
 
76
      FTC_GNode_Init( gnode, gindex, family );
 
77
 
 
78
      /* we will now load the glyph image */
 
79
      error = clazz->family_load_glyph( family, gindex, cache,
 
80
                                        &inode->glyph );
 
81
      if ( error )
 
82
      {
 
83
        FTC_INode_Free( inode, cache );
 
84
        inode = NULL;
 
85
      }
 
86
    }
 
87
 
 
88
    *pinode = inode;
 
89
    return error;
 
90
  }
 
91
 
 
92
 
 
93
  FT_LOCAL_DEF( FT_Error )
 
94
  ftc_inode_new( FTC_Node   *ftcpinode,
 
95
                 FT_Pointer  ftcgquery,
 
96
                 FTC_Cache   cache )
 
97
  {
 
98
    FTC_INode  *pinode = (FTC_INode*)ftcpinode;
 
99
    FTC_GQuery  gquery = (FTC_GQuery)ftcgquery;
 
100
 
 
101
 
 
102
    return FTC_INode_New( pinode, gquery, cache );
 
103
  }
 
104
 
 
105
 
 
106
  FT_LOCAL_DEF( FT_Offset )
 
107
  ftc_inode_weight( FTC_Node   ftcinode,
 
108
                    FTC_Cache  ftccache )
 
109
  {
 
110
    FTC_INode  inode = (FTC_INode)ftcinode;
 
111
    FT_Offset  size  = 0;
 
112
    FT_Glyph   glyph = inode->glyph;
 
113
 
 
114
    FT_UNUSED( ftccache );
 
115
 
 
116
 
 
117
    switch ( glyph->format )
 
118
    {
 
119
    case FT_GLYPH_FORMAT_BITMAP:
 
120
      {
 
121
        FT_BitmapGlyph  bitg;
 
122
 
 
123
 
 
124
        bitg = (FT_BitmapGlyph)glyph;
 
125
        size = bitg->bitmap.rows * ft_labs( bitg->bitmap.pitch ) +
 
126
               sizeof ( *bitg );
 
127
      }
 
128
      break;
 
129
 
 
130
    case FT_GLYPH_FORMAT_OUTLINE:
 
131
      {
 
132
        FT_OutlineGlyph  outg;
 
133
 
 
134
 
 
135
        outg = (FT_OutlineGlyph)glyph;
 
136
        size = outg->outline.n_points *
 
137
                 ( sizeof ( FT_Vector ) + sizeof ( FT_Byte ) ) +
 
138
               outg->outline.n_contours * sizeof ( FT_Short ) +
 
139
               sizeof ( *outg );
 
140
      }
 
141
      break;
 
142
 
 
143
    default:
 
144
      ;
 
145
    }
 
146
 
 
147
    size += sizeof ( *inode );
 
148
    return size;
 
149
  }
 
150
 
 
151
 
 
152
#if 0
 
153
 
 
154
  FT_LOCAL_DEF( FT_Offset )
 
155
  FTC_INode_Weight( FTC_INode  inode )
 
156
  {
 
157
    return ftc_inode_weight( FTC_NODE( inode ), NULL );
 
158
  }
 
159
 
 
160
#endif /* 0 */
 
161
 
 
162
 
 
163
/* END */