/[freetype]/ft2demos/src/ftview.c
ViewVC logotype

Diff of /ft2demos/src/ftview.c

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

revision 1.58 by wl, Fri Mar 4 05:58:35 2005 UTC revision 1.59 by wl, Thu May 26 05:35:59 2005 UTC
# Line 191  Line 191 
191      return error;      return error;
192    }    }
193    
194    
195      /* most code is copied from Render_Stroke */
196      static FT_Error
197      Render_Embolden( int  first_index )
198      {
199        FT_F26Dot6     start_x, start_y, step_x, step_y, x, y;
200        FTC_ScalerRec  scaler;
201        int            i;
202        grBitmap       bit3;
203    
204    
205        start_x = 4;
206        start_y = 16 + current_font.height;
207    
208    
209        scaler.face_id = current_font.face_id;
210        scaler.width   = current_font.width;
211        scaler.height  = current_font.height;
212        scaler.pixel   = 1;
213    
214        error = FTC_Manager_LookupSize( cache_manager, &scaler, &size );
215        if ( error )
216          goto Exit;
217    
218        step_x = size->metrics.x_ppem + 4;
219        step_y = ( size->metrics.height >> 6 ) + 4;
220    
221        x = start_x;
222        y = start_y;
223    
224        i = first_index;
225        i = first_index;
226    
227        while ( i < face->num_glyphs )
228        {
229          int           left, top, x_advance, y_advance, x_top, y_top;
230          FT_GlyphSlot  slot = size->face->glyph;
231          FT_Glyph      glyphp;
232    
233    #if 0
234          gindex = *(unsigned char*)p;
235          if ( encoding == FT_ENCODING_NONE )
236            gindex = get_glyph_index( gindex );
237    #endif
238          error = FT_Load_Glyph( size->face, i, FT_LOAD_DEFAULT );
239          if ( !error )
240          {
241            FT_Glyph  glyphb;
242    
243    
244            FT_GlyphSlot_Embolden( slot );
245            error = FT_Get_Glyph( slot, &glyphp );
246            if ( error )
247              goto Next;
248    
249            error = glyph_to_bitmap( glyphp, &bit3, &left, &top,
250                                     &x_advance, &y_advance,
251                                     (FT_Pointer*)&glyphb );
252            if ( !error )
253            {
254              /* now render the bitmap into the display surface */
255              x_top = x + left;
256              y_top = y - top;
257              grBlitGlyphToBitmap( &bit, &bit3, x_top, y_top, fore_color );
258    
259              FT_Done_Glyph( glyphb );
260              FT_Done_Glyph( glyphp );
261    
262              x += x_advance + 1;
263    
264              if ( x + size->metrics.x_ppem > bit.width )
265              {
266                x  = start_x;
267                y += step_y;
268    
269                if ( y >= bit.rows )
270                  goto Exit;
271              }
272            }
273            else
274              FT_Done_Glyph( glyphp );
275    
276            if ( error )
277              goto Next;
278          }
279          else
280          {
281          Next:
282            Fail++;
283          }
284    
285          i++;
286        }
287    
288      Exit:
289        return error;
290      }
291    
292    
293    static FT_Error    static FT_Error
294    Render_All( int  first_index )    Render_All( int  first_index )
295    {    {
# Line 649  Line 748 
748        break;        break;
749    
750      case grKEY( 'K' ):      case grKEY( 'K' ):
751        render_mode = 4;        render_mode = RENDER_MODE_GAMMAGRID;
752        new_header = (char*)"rendering gamma grid";        new_header = (char*)"rendering gamma grid";
753        break;        break;
754    
755      case grKEY( ' ' ):      case grKEY( ' ' ):
756        render_mode = ( render_mode + 1 ) % 4;        render_mode = ( render_mode + 1 ) % RENDER_MODE_GAMMAGRID;
757        switch ( render_mode )        switch ( render_mode )
758        {        {
759          case 0:        case RENDER_MODE_ALL:
760            new_header = (char*)"rendering all glyphs in font";          new_header = (char*)"rendering all glyphs in font";
761            break;          break;
762          case 1:        case RENDER_MODE_EMBOLDEN:
763            new_header = (char*)"rendering test text string";          new_header = (char*)"rendering emboldened text";
764            break;          break;
765          case 2:        case RENDER_MODE_STROKE:
766            new_header = (char*)"rendering stroked text";          new_header = (char*)"rendering stroked text";
767            break;          break;
768          case RENDER_MODE_TEXT:
769          default:          new_header = (char*)"rendering test text string";
770            new_header = (char*)"rendering glyph waterfall";          break;
771          case RENDER_MODE_WATERFALL:
772            new_header = (char*)"rendering glyph waterfall";
773            break;
774          case RENDER_MODE_GAMMAGRID: /* never happen */
775            new_header = (char*)"rendering gamma grid";
776            break;
777        }        }
778        break;        break;
779    
# Line 890  Line 995 
995    
996          switch ( render_mode )          switch ( render_mode )
997          {          {
998          case 0:          case RENDER_MODE_ALL:
999            error = Render_All( Num );            error = Render_All( Num );
1000            break;            break;
1001    
1002          case 1:          case RENDER_MODE_EMBOLDEN:
1003            error = Render_Text( Num );            error = Render_Embolden( Num );
1004            break;            break;
1005    
1006          case 2:          case RENDER_MODE_STROKE:
1007            error = Render_Stroke( Num );            error = Render_Stroke( Num );
1008            break;            break;
1009    
1010          case 4:          case RENDER_MODE_TEXT:
1011            error = Render_GammaGrid();            error = Render_Text( Num );
           render_mode = 0;  
1012            break;            break;
1013    
1014          default:          case RENDER_MODE_WATERFALL:
1015            error = Render_Waterfall( ptsize );            error = Render_Waterfall( ptsize );
1016              break;
1017    
1018            case RENDER_MODE_GAMMAGRID:
1019              error = Render_GammaGrid();
1020              render_mode = RENDER_MODE_ALL;
1021          }          }
1022    
1023          if ( !new_header )          if ( !new_header )
# Line 991  Line 1100 
1100      done_freetype();      done_freetype();
1101      exit( 0 );      /* for safety reasons */      exit( 0 );      /* for safety reasons */
1102      return 0;       /* never reached */      return 0;       /* never reached */
1103  }    }
1104    
1105    
1106  /* End */  /* End */

Legend:
Removed from v.1.58  
changed lines
  Added in v.1.59

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