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

« back to all changes in this revision

Viewing changes to misc/libfreetype/src/base/ftsynth.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
/*  ftsynth.c                                                              */
 
4
/*                                                                         */
 
5
/*    FreeType synthesizing code for emboldening and slanting (body).      */
 
6
/*                                                                         */
 
7
/*  Copyright 2000-2001, 2002, 2003, 2004, 2005, 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_SYNTHESIS_H
 
21
#include FT_INTERNAL_DEBUG_H
 
22
#include FT_INTERNAL_OBJECTS_H
 
23
#include FT_OUTLINE_H
 
24
#include FT_BITMAP_H
 
25
 
 
26
 
 
27
  /*************************************************************************/
 
28
  /*                                                                       */
 
29
  /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */
 
30
  /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */
 
31
  /* messages during execution.                                            */
 
32
  /*                                                                       */
 
33
#undef  FT_COMPONENT
 
34
#define FT_COMPONENT  trace_synth
 
35
 
 
36
  /*************************************************************************/
 
37
  /*************************************************************************/
 
38
  /****                                                                 ****/
 
39
  /****   EXPERIMENTAL OBLIQUING SUPPORT                                ****/
 
40
  /****                                                                 ****/
 
41
  /*************************************************************************/
 
42
  /*************************************************************************/
 
43
 
 
44
  /* documentation is in ftsynth.h */
 
45
 
 
46
  FT_EXPORT_DEF( void )
 
47
  FT_GlyphSlot_Oblique( FT_GlyphSlot  slot )
 
48
  {
 
49
    FT_Matrix    transform;
 
50
    FT_Outline*  outline = &slot->outline;
 
51
 
 
52
 
 
53
    /* only oblique outline glyphs */
 
54
    if ( slot->format != FT_GLYPH_FORMAT_OUTLINE )
 
55
      return;
 
56
 
 
57
    /* we don't touch the advance width */
 
58
 
 
59
    /* For italic, simply apply a shear transform, with an angle */
 
60
    /* of about 12 degrees.                                      */
 
61
 
 
62
    transform.xx = 0x10000L;
 
63
    transform.yx = 0x00000L;
 
64
 
 
65
    transform.xy = 0x06000L;
 
66
    transform.yy = 0x10000L;
 
67
 
 
68
    FT_Outline_Transform( outline, &transform );
 
69
  }
 
70
 
 
71
 
 
72
  /*************************************************************************/
 
73
  /*************************************************************************/
 
74
  /****                                                                 ****/
 
75
  /****   EXPERIMENTAL EMBOLDENING/OUTLINING SUPPORT                    ****/
 
76
  /****                                                                 ****/
 
77
  /*************************************************************************/
 
78
  /*************************************************************************/
 
79
 
 
80
 
 
81
  /* documentation is in ftsynth.h */
 
82
 
 
83
  FT_EXPORT_DEF( void )
 
84
  FT_GlyphSlot_Embolden( FT_GlyphSlot  slot )
 
85
  {
 
86
    FT_Library  library = slot->library;
 
87
    FT_Face     face    = slot->face;
 
88
    FT_Error    error;
 
89
    FT_Pos      xstr, ystr;
 
90
 
 
91
 
 
92
    if ( slot->format != FT_GLYPH_FORMAT_OUTLINE &&
 
93
         slot->format != FT_GLYPH_FORMAT_BITMAP  )
 
94
      return;
 
95
 
 
96
    /* some reasonable strength */
 
97
    xstr = FT_MulFix( face->units_per_EM,
 
98
                      face->size->metrics.y_scale ) / 24;
 
99
    ystr = xstr;
 
100
 
 
101
    if ( slot->format == FT_GLYPH_FORMAT_OUTLINE )
 
102
    {
 
103
      /* ignore error */
 
104
      (void)FT_Outline_Embolden( &slot->outline, xstr );
 
105
 
 
106
      /* this is more than enough for most glyphs; if you need accurate */
 
107
      /* values, you have to call FT_Outline_Get_CBox                   */
 
108
      xstr = xstr * 2;
 
109
      ystr = xstr;
 
110
    }
 
111
    else /* slot->format == FT_GLYPH_FORMAT_BITMAP */
 
112
    {
 
113
      /* round to full pixels */
 
114
      xstr &= ~63;
 
115
      if ( xstr == 0 )
 
116
        xstr = 1 << 6;
 
117
      ystr &= ~63;
 
118
 
 
119
      /*
 
120
       * XXX: overflow check for 16-bit system, for compatibility
 
121
       *      with FT_GlyphSlot_Embolden() since freetype-2.1.10.
 
122
       *      unfortunately, this function return no informations
 
123
       *      about the cause of error.
 
124
       */
 
125
      if ( ( ystr >> 6 ) > FT_INT_MAX || ( ystr >> 6 ) < FT_INT_MIN )
 
126
      {
 
127
        FT_TRACE1(( "FT_GlyphSlot_Embolden:" ));
 
128
        FT_TRACE1(( "too strong embolding parameter ystr=%d\n", ystr ));
 
129
        return;
 
130
      }
 
131
      error = FT_GlyphSlot_Own_Bitmap( slot );
 
132
      if ( error )
 
133
        return;
 
134
 
 
135
      error = FT_Bitmap_Embolden( library, &slot->bitmap, xstr, ystr );
 
136
      if ( error )
 
137
        return;
 
138
    }
 
139
 
 
140
    if ( slot->advance.x )
 
141
      slot->advance.x += xstr;
 
142
 
 
143
    if ( slot->advance.y )
 
144
      slot->advance.y += ystr;
 
145
 
 
146
    slot->metrics.width        += xstr;
 
147
    slot->metrics.height       += ystr;
 
148
    slot->metrics.horiBearingY += ystr;
 
149
    slot->metrics.horiAdvance  += xstr;
 
150
    slot->metrics.vertBearingX -= xstr / 2;
 
151
    slot->metrics.vertBearingY += ystr;
 
152
    slot->metrics.vertAdvance  += ystr;
 
153
 
 
154
    /* XXX: 16-bit overflow case must be excluded before here */
 
155
    if ( slot->format == FT_GLYPH_FORMAT_BITMAP )
 
156
      slot->bitmap_top += (FT_Int)( ystr >> 6 );
 
157
  }
 
158
 
 
159
 
 
160
/* END */