/[freetype]/freetype2/src/autofit/aflatin.c
ViewVC logotype

Diff of /freetype2/src/autofit/aflatin.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.14 by wl, Wed Mar 2 11:24:23 2005 UTC revision 1.15 by wl, Thu Mar 3 17:09:07 2005 UTC
# Line 1  Line 1 
1    /***************************************************************************/
2    /*                                                                         */
3    /*  aflatin.c                                                              */
4    /*                                                                         */
5    /*    Auto-fitter hinting routines for latin script (body).                */
6    /*                                                                         */
7    /*  Copyright 2003, 2004, 2005 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 "aflatin.h"  #include "aflatin.h"
20    
21    
# Line 26  Line 44 
44      {      {
45        FT_Error             error;        FT_Error             error;
46        FT_UInt              glyph_index;        FT_UInt              glyph_index;
47        AF_Dimension         dim;        int                  dim;
48        AF_ScriptMetricsRec  dummy[1];        AF_ScriptMetricsRec  dummy[1];
49        AF_Scaler            scaler = &dummy->scaler;        AF_Scaler            scaler = &dummy->scaler;
50    
# Line 44  Line 62 
62        scaler->x_scale     = scaler->y_scale = 0x10000L;        scaler->x_scale     = scaler->y_scale = 0x10000L;
63        scaler->x_delta     = scaler->y_delta = 0;        scaler->x_delta     = scaler->y_delta = 0;
64        scaler->face        = face;        scaler->face        = face;
65        scaler->render_mode = 0;        scaler->render_mode = FT_RENDER_MODE_NORMAL;
66        scaler->flags       = 0;        scaler->flags       = 0;
67    
68        af_glyph_hints_rescale( hints, dummy );        af_glyph_hints_rescale( hints, dummy );
# Line 63  Line 81 
81          FT_Pos        edge_distance_threshold = 32000;          FT_Pos        edge_distance_threshold = 32000;
82    
83    
84          error = af_latin_hints_compute_segments( hints, dim );          error = af_latin_hints_compute_segments( hints,
85                                                     (AF_Dimension)dim );
86          if ( error )          if ( error )
87            goto Exit;            goto Exit;
88    
89          af_latin_hints_link_segments( hints, dim );          af_latin_hints_link_segments( hints,
90                                          (AF_Dimension)dim );
91    
92          seg   = axhints->segments;          seg   = axhints->segments;
93          limit = seg + axhints->num_segments;          limit = seg + axhints->num_segments;
# Line 399  Line 419 
419        delta = scaler->y_delta;        delta = scaler->y_delta;
420      }      }
421    
422      axis = & metrics->axis[dim];      axis = &metrics->axis[dim];
423    
424      if ( axis->org_scale == scale && axis->org_delta == delta )      if ( axis->org_scale == scale && axis->org_delta == delta )
425        return;        return;
# Line 412  Line 432 
432       * letters to the pixel grid       * letters to the pixel grid
433       */       */
434      {      {
435        AF_LatinAxis  axis = &metrics->axis[AF_DIMENSION_VERT];        AF_LatinAxis  Axis = &metrics->axis[AF_DIMENSION_VERT];
436        AF_LatinBlue  blue = NULL;        AF_LatinBlue  blue = NULL;
       FT_UInt       nn;  
437    
438    
439        for ( nn = 0; nn < axis->blue_count; nn++ )        for ( nn = 0; nn < Axis->blue_count; nn++ )
440        {        {
441          if ( axis->blues[nn].flags & AF_LATIN_BLUE_ADJUSTMENT )          if ( Axis->blues[nn].flags & AF_LATIN_BLUE_ADJUSTMENT )
442          {          {
443            blue = &axis->blues[nn];            blue = &Axis->blues[nn];
444            break;            break;
445          }          }
446        }        }
# Line 490  Line 509 
509          dist = FT_MulFix( blue->ref.org - blue->shoot.org, scale );          dist = FT_MulFix( blue->ref.org - blue->shoot.org, scale );
510          if ( dist <= 48 && dist >= -48 )          if ( dist <= 48 && dist >= -48 )
511          {          {
512            FT_Pos  delta, delta2;            FT_Pos  delta1, delta2;
513    
514    
515            delta  = blue->shoot.org - blue->ref.org;            delta1 = blue->shoot.org - blue->ref.org;
516            delta2 = delta;            delta2 = delta1;
517            if ( delta < 0 )            if ( delta1 < 0 )
518              delta2 = -delta2;              delta2 = -delta2;
519    
520            delta2 = FT_MulFix( delta2, scale );            delta2 = FT_MulFix( delta2, scale );
# Line 507  Line 526 
526            else            else
527              delta2 = FT_PIX_ROUND( delta2 );              delta2 = FT_PIX_ROUND( delta2 );
528    
529            if ( delta < 0 )            if ( delta1 < 0 )
530              delta2 = -delta2;              delta2 = -delta2;
531    
532            blue->ref.fit   = FT_PIX_ROUND( blue->ref.cur );            blue->ref.fit   = FT_PIX_ROUND( blue->ref.cur );
# Line 556  Line 575 
575      FT_Pos    max_coord = -32000;      FT_Pos    max_coord = -32000;
576  #endif  #endif
577    
578      major_dir   = FT_ABS( axis->major_dir );      major_dir   = (AF_Direction)FT_ABS( axis->major_dir );
579      segment_dir = major_dir;      segment_dir = major_dir;
580    
581      axis->num_segments = 0;      axis->num_segments = 0;
# Line 690  Line 709 
709          if ( !on_edge && FT_ABS( point->out_dir ) == major_dir )          if ( !on_edge && FT_ABS( point->out_dir ) == major_dir )
710          {          {
711            /* this is the start of a new segment! */            /* this is the start of a new segment! */
712            segment_dir = point->out_dir;            segment_dir = (AF_Direction)point->out_dir;
713    
714            /* clear all segment fields */            /* clear all segment fields */
715            error = af_axis_hints_new_segment( axis, memory, &segment );            error = af_axis_hints_new_segment( axis, memory, &segment );
# Line 1508  Line 1527 
1527    {    {
1528      FT_Pos  dist = stem_edge->opos - base_edge->opos;      FT_Pos  dist = stem_edge->opos - base_edge->opos;
1529    
1530      FT_Pos  fitted_width = af_latin_compute_stem_width( hints,      FT_Pos  fitted_width = af_latin_compute_stem_width(
1531                                                          dim,                               hints, dim, dist,
1532                                                          dist,                               (AF_Edge_Flags)base_edge->flags,
1533                                                          base_edge->flags,                               (AF_Edge_Flags)stem_edge->flags );
                                                         stem_edge->flags );  
1534    
1535    
1536      stem_edge->pos = base_edge->pos + fitted_width;      stem_edge->pos = base_edge->pos + fitted_width;
# Line 1635  Line 1653 
1653    
1654    
1655          org_len = edge2->opos - edge->opos;          org_len = edge2->opos - edge->opos;
1656          cur_len = af_latin_compute_stem_width( hints, dim, org_len,          cur_len = af_latin_compute_stem_width(
1657                                                 edge->flags, edge2->flags );                      hints, dim, org_len,
1658                        (AF_Edge_Flags)edge->flags,
1659                        (AF_Edge_Flags)edge2->flags );
1660          if ( cur_len <= 64 )          if ( cur_len <= 64 )
1661            u_off = d_off = 32;            u_off = d_off = 32;
1662          else          else
# Line 1687  Line 1707 
1707          org_len    = edge2->opos - edge->opos;          org_len    = edge2->opos - edge->opos;
1708          org_center = org_pos + ( org_len >> 1 );          org_center = org_pos + ( org_len >> 1 );
1709    
1710          cur_len = af_latin_compute_stem_width( hints, dim, org_len,          cur_len = af_latin_compute_stem_width(
1711                                                 edge->flags, edge2->flags  );                     hints, dim, org_len,
1712                       (AF_Edge_Flags)edge->flags,
1713                       (AF_Edge_Flags)edge2->flags );
1714    
1715          if ( cur_len < 96 )          if ( cur_len < 96 )
1716          {          {
# Line 1728  Line 1750 
1750            org_center = org_pos + ( org_len >> 1 );            org_center = org_pos + ( org_len >> 1 );
1751    
1752            cur_len    = af_latin_compute_stem_width(            cur_len    = af_latin_compute_stem_width(
1753                           hints, dim, org_len, edge->flags, edge2->flags );                           hints, dim, org_len,
1754                             (AF_Edge_Flags)edge->flags,
1755                             (AF_Edge_Flags)edge2->flags );
1756    
1757            cur_pos1   = FT_PIX_ROUND( org_pos );            cur_pos1   = FT_PIX_ROUND( org_pos );
1758            delta1     = cur_pos1 + ( cur_len >> 1 ) - org_center;            delta1     = cur_pos1 + ( cur_len >> 1 ) - org_center;
# Line 1855  Line 1879 
1879                          FT_Outline*      outline,                          FT_Outline*      outline,
1880                          AF_LatinMetrics  metrics )                          AF_LatinMetrics  metrics )
1881    {    {
1882      FT_Error      error;      FT_Error  error;
1883      AF_Dimension  dim;      int       dim;
1884    
1885    
1886      error = af_glyph_hints_reload( hints, outline );      error = af_glyph_hints_reload( hints, outline );
# Line 1886  Line 1910 
1910        if ( ( dim == AF_DIMENSION_HORZ && AF_HINTS_DO_HORIZONTAL( hints ) ) ||        if ( ( dim == AF_DIMENSION_HORZ && AF_HINTS_DO_HORIZONTAL( hints ) ) ||
1911             ( dim == AF_DIMENSION_VERT && AF_HINTS_DO_VERTICAL( hints ) )   )             ( dim == AF_DIMENSION_VERT && AF_HINTS_DO_VERTICAL( hints ) )   )
1912        {        {
1913          af_latin_hint_edges( hints, dim );          af_latin_hint_edges( hints, (AF_Dimension)dim );
1914          af_glyph_hints_align_edge_points( hints, dim );          af_glyph_hints_align_edge_points( hints, (AF_Dimension)dim );
1915          af_glyph_hints_align_strong_points( hints, dim );          af_glyph_hints_align_strong_points( hints, (AF_Dimension)dim );
1916          af_glyph_hints_align_weak_points( hints, dim );          af_glyph_hints_align_weak_points( hints, (AF_Dimension)dim );
1917        }        }
1918      }      }
1919      af_glyph_hints_save( hints, outline );      af_glyph_hints_save( hints, outline );

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.15

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26