summaryrefslogtreecommitdiff
path: root/Build/source/libs/freetype/freetype-1.5/test/ftstrpnm.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/freetype/freetype-1.5/test/ftstrpnm.c')
-rw-r--r--Build/source/libs/freetype/freetype-1.5/test/ftstrpnm.c534
1 files changed, 0 insertions, 534 deletions
diff --git a/Build/source/libs/freetype/freetype-1.5/test/ftstrpnm.c b/Build/source/libs/freetype/freetype-1.5/test/ftstrpnm.c
deleted file mode 100644
index 73b42ea1c1e..00000000000
--- a/Build/source/libs/freetype/freetype-1.5/test/ftstrpnm.c
+++ /dev/null
@@ -1,534 +0,0 @@
-/****************************************************************************/
-/* */
-/* The FreeType project -- a free and portable quality TrueType renderer. */
-/* */
-/* Copyright 1996-2001 by */
-/* D. Turner, R.Wilhelm, and W. Lemberg */
-/* */
-/* ftstrpnm: convert text to image (in PGM or PBM format) */
-/* */
-/* NOTE: This is just a test program that is used to show off and */
-/* debug the current engine. */
-/* */
-/****************************************************************************/
-
-#define PROGNAME "ftstrpnm"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "common.h"
-#include "freetype.h"
-
-#define TT_VALID( handle ) ( ( handle ).z != NULL )
-
-
- /* Global variables */
-
- TT_Engine engine;
- TT_Face face;
- TT_Instance instance;
-
- TT_Face_Properties properties;
-
- TT_Raster_Map bit;
- TT_Raster_Map small_bit; /* used when font-smoothing is enabled */
-
- int pnm_width, pnm_height;
- int pnm_x_shift, pnm_y_shift;
-
-
- /* Loaded glyphs for all characters */
-
- TT_Glyph *glyphs = NULL;
-
-
- /* Options */
-
- int dpi = 96;
- int ptsize = 12;
- int hinted = 1;
- int smooth = 0;
- int border = 0;
-
- /* color for text in RGB format */
- unsigned short int textclr[3] = { 0, 0, 0 };
-
- /* raster map management */
-
- static void Init_Raster_Map( TT_Raster_Map* bit, int width, int height )
- {
- bit->rows = height;
- bit->width = ( width + 3 ) & -4;
- bit->flow = TT_Flow_Down;
-
- if ( smooth )
- {
- bit->cols = bit->width;
- bit->size = bit->rows * bit->width;
- }
- else
- {
- bit->cols = ( bit->width + 7 ) / 8; /* convert to # of bytes */
- bit->size = bit->rows * bit->cols; /* number of bytes in buffer */
- }
-
- bit->bitmap = (void *) malloc( bit->size );
- if ( !bit->bitmap )
- Panic( "Not enough memory to allocate bitmap!\n" );
- }
-
-
- static void Done_Raster_Map( TT_Raster_Map *bit )
- {
- free( bit->bitmap );
- bit->bitmap = NULL;
- }
-
-
- static void Clear_Raster_Map( TT_Raster_Map* bit )
- {
- memset( bit->bitmap, 0, bit->size );
- }
-
-
- static void Blit_Or( TT_Raster_Map* dst, TT_Raster_Map* src,
- int x_off, int y_off )
- {
- int x, y;
- int x1, x2, y1, y2;
- char *s, *d;
-
-
- /* clipping */
-
- x1 = x_off < 0 ? -x_off : 0;
- y1 = y_off < 0 ? -y_off : 0;
-
- x2 = (int)dst->cols - x_off;
- if ( x2 > src->cols )
- x2 = src->cols;
-
- y2 = (int)dst->rows - y_off;
- if ( y2 > src->rows )
- y2 = src->rows;
-
- if ( x1 >= x2 )
- return;
-
- /* do the real work now */
-
- for ( y = y1; y < y2; ++y )
- {
- s = ( (char*)src->bitmap ) + y * src->cols + x1;
- d = ( (char*)dst->bitmap ) + ( y + y_off ) * dst->cols + x1 + x_off;
-
- for ( x = x1; x < x2; ++x )
- *d++ |= *s++;
- }
- }
-
-
- static void Dump_Raster_Map( TT_Raster_Map* bit, FILE* file )
- {
- /* kudos for this code snippet go to Norman Walsh */
-
- char* bmap;
- int i, j;
- unsigned short int colors[3][5];
-
- bmap = (char *)bit->bitmap;
-
- if ( smooth ) /* anti-aliasing */
- {
- fprintf( file, "P6\n%d %d\n255\n", pnm_width, pnm_height );
-
- /* calculate colors for anti-aliasing */
- for (i = 0; i < 3; i++ )
- for (j = 0; j < 5; j++)
- colors[i][j] = (255 - textclr[i]) * j / 4 + textclr[i];
-
- for ( i = 0; i < bit->size; i++ ) /* iterate pixels */
- bmap[i] = bmap[i] > 4 ? 0 : 4 - bmap[i];
-
- for ( i = pnm_height; i > 0; i--, bmap += bit->cols )
- for ( j = 0; j < pnm_width; j++ )
- fprintf( file, "%c%c%c", colors[0][(unsigned int) bmap[j]],\
- colors[1][(unsigned int) bmap[j]],\
- colors[2][(unsigned int) bmap[j]]);
- }
- else /* no anti-aliasing */
- {
- fprintf( file, "P6\n%d %d\n255\n", pnm_width, pnm_height );
-
- for ( i = 0; i < pnm_height; i++, bmap += bit->cols ) /* iterate rows */
- for ( j = 0; j < pnm_width; j++ ) /* iterate bits(=columns) in row */
- if ( bmap[j / 8] >> ( 7 - j % 8 ) & 1 ) /* bit set? */
- fprintf( file, "%c%c%c", textclr[0], textclr[1], textclr[2] );
- else
- fprintf( file, "%c%c%c", 255, 255, 255 );
- }
- fflush( file );
- }
-
-
- /* glyph management */
-
- static void Load_Glyphs( char* txt, int txtlen )
- {
- unsigned short i, n, code, load_flags;
- unsigned short num_glyphs = 0, no_cmap = 0;
- unsigned short platform, encoding;
- TT_Error error;
- TT_CharMap char_map;
-
-
- /* First, look for a Unicode charmap */
-
- n = properties.num_CharMaps;
-
- for ( i = 0; i < n; i++ )
- {
- TT_Get_CharMap_ID( face, i, &platform, &encoding );
- if ( (platform == 3 && encoding == 1 ) ||
- (platform == 0 && encoding == 0 ) )
- {
- TT_Get_CharMap( face, i, &char_map );
- break;
- }
- }
-
- if ( i == n )
- {
- TT_Face_Properties properties;
-
-
- TT_Get_Face_Properties( face, &properties );
-
- no_cmap = 1;
- num_glyphs = properties.num_Glyphs;
- }
-
-
- /* Second, allocate the array */
-
- glyphs = (TT_Glyph*)malloc( 256 * sizeof ( TT_Glyph ) );
- memset( glyphs, 0, 256 * sizeof ( TT_Glyph ) );
-
- /* Finally, load the glyphs you need */
-
- load_flags = TTLOAD_SCALE_GLYPH;
- if ( hinted )
- load_flags |= TTLOAD_HINT_GLYPH;
-
- for ( i = 0; i < txtlen; ++i )
- {
- unsigned char j = txt[i];
-
-
- if ( TT_VALID( glyphs[j] ) )
- continue;
-
- if ( no_cmap )
- {
- code = (j - ' ' + 1) < 0 ? 0 : (j - ' ' + 1);
- if ( code >= num_glyphs )
- code = 0;
- }
- else
- code = TT_Char_Index( char_map, j );
-
- (void)(
- ( error = TT_New_Glyph( face, &glyphs[j] ) ) ||
- ( error = TT_Load_Glyph( instance, glyphs[j], code, load_flags ) )
- );
-
- if ( error )
- Panic( "Cannot allocate and load glyph: error 0x%x.\n", error );
- }
- }
-
-
- static void Done_Glyphs( void )
- {
- int i;
-
-
- if ( !glyphs )
- return;
-
- for ( i = 0; i < 256; ++i )
- TT_Done_Glyph( glyphs[i] );
-
- free( glyphs );
-
- glyphs = NULL;
- }
-
-
- /* face & instance management */
-
- static void Init_Face( const char* filename )
- {
- TT_Error error;
-
-
- /* load the typeface */
-
- error = TT_Open_Face( engine, filename, &face );
- if ( error )
- {
- if ( error == TT_Err_Could_Not_Open_File )
- Panic( "Could not find/open %s.\n", filename );
- else
- Panic( "Error while opening %s, error code = 0x%x.\n",
- filename, error );
- }
-
- TT_Get_Face_Properties( face, &properties );
-
- /* create and initialize instance */
-
- (void) (
- ( error = TT_New_Instance( face, &instance ) ) ||
- ( error = TT_Set_Instance_Resolutions( instance, dpi, dpi ) ) ||
- ( error = TT_Set_Instance_PointSize( instance, ptsize ) )
- );
-
- if ( error )
- Panic( "Could not create and initialize instance: error 0x%x.\n",
- error );
- }
-
-
- static void Done_Face( void )
- {
- TT_Done_Instance( instance );
- TT_Close_Face( face );
- }
-
-
- /* rasterization stuff */
-
- static void Init_Raster_Areas( const char* txt, int txtlen )
- {
- int i, upm, ascent, descent;
- TT_Face_Properties properties;
- TT_Instance_Metrics imetrics;
- TT_Glyph_Metrics gmetrics;
-
-
- /* allocate the large bitmap */
-
- TT_Get_Face_Properties( face, &properties );
- TT_Get_Instance_Metrics( instance, &imetrics );
-
- upm = properties.header->Units_Per_EM;
- ascent = ( properties.horizontal->Ascender * imetrics.y_ppem ) / upm;
- descent = ( properties.horizontal->Descender * imetrics.y_ppem ) / upm;
-
- pnm_width = 2 * border;
- pnm_height = 2 * border + ascent - descent;
-
- for ( i = 0; i < txtlen; ++i )
- {
- unsigned char j = txt[i];
-
-
- if ( !TT_VALID( glyphs[j] ) )
- continue;
-
- TT_Get_Glyph_Metrics( glyphs[j], &gmetrics );
- pnm_width += gmetrics.advance / 64;
- }
-
- Init_Raster_Map( &bit, pnm_width, pnm_height );
- Clear_Raster_Map( &bit );
-
- pnm_x_shift = border;
- pnm_y_shift = border - descent;
-
- /* allocate the small bitmap if you need it */
-
- if ( smooth )
- Init_Raster_Map( &small_bit, imetrics.x_ppem + 32, pnm_height );
- }
-
-
- static void Done_Raster_Areas( void )
- {
- Done_Raster_Map( &bit );
- if ( smooth )
- Done_Raster_Map( &small_bit );
- }
-
-
- static void Render_Glyph( TT_Glyph glyph,
- int x_off, int y_off,
- TT_Glyph_Metrics* gmetrics )
- {
- if ( !smooth )
- TT_Get_Glyph_Bitmap( glyph, &bit, x_off * 64L, y_off * 64L);
- else
- {
- TT_F26Dot6 xmin, ymin, xmax, ymax;
-
-
- /* grid-fit the bounding box */
-
- xmin = gmetrics->bbox.xMin & -64;
- ymin = gmetrics->bbox.yMin & -64;
- xmax = (gmetrics->bbox.xMax + 63) & -64;
- ymax = (gmetrics->bbox.yMax + 63) & -64;
-
- /* now render the glyph in the small pixmap */
- /* and blit-or the resulting small pixmap into the biggest one */
-
- Clear_Raster_Map( &small_bit );
- TT_Get_Glyph_Pixmap( glyph, &small_bit, -xmin, -ymin );
- Blit_Or( &bit, &small_bit, xmin/64 + x_off, -ymin/64 - y_off );
- }
- }
-
-
- static void Render_All_Glyphs( char* txt, int txtlen )
- {
- int i;
- TT_F26Dot6 x, y, adjx;
- TT_Glyph_Metrics gmetrics;
-
-
- x = pnm_x_shift;
- y = pnm_y_shift;
-
- for ( i = 0; i < txtlen; i++ )
- {
- unsigned char j = txt[i];
-
- if ( !TT_VALID( glyphs[j] ) )
- continue;
-
- TT_Get_Glyph_Metrics( glyphs[j], &gmetrics );
-
- adjx = x; /* ??? lsb */
- Render_Glyph( glyphs[j], adjx, y, &gmetrics );
-
- x += gmetrics.advance / 64;
- }
- }
-
-
- static void usage( void )
- {
- printf( "\n" );
- printf( "%s: simple text to image converter -- part of the FreeType project\n", PROGNAME );
- printf( "\n" );
- printf( "Usage: %s [options below] filename [string]\n", PROGNAME );
- printf( "\n" );
- printf( " -g gray-level rendering (default: off)\n" );
- printf( " -h hinting off (default: on)\n" );
- printf( " -r X resolution X dpi (default: 96)\n" );
- printf( " -p X pointsize X pt (default: 12)\n" );
- printf( " -b X border X pixels wide (default: 0)\n" );
- printf( " -c X textcolor X in RRGGBB hexadecimal format (default: 00000 (=black))\n" );
- printf( "\n" );
-
- exit( EXIT_FAILURE );
- }
-
-
- int main( int argc, char** argv )
- {
- int option, txtlen;
- long int hexvalue;
- char *txt, *filename;
- TT_Error error;
-
-
- /* Parse options */
-
- while ( 1 )
- {
- option = ft_getopt( argc, argv, "ghr:p:b:c:" );
-
- if ( option == -1 )
- break;
-
- switch ( option )
- {
- case 'g':
- smooth = 1;
- break;
- case 'h':
- hinted = 0;
- break;
- case 'r':
- dpi = atoi( ft_optarg );
- break;
- case 'p':
- ptsize = atoi( ft_optarg );
- break;
- case 'b':
- border = atoi( ft_optarg );
- break;
- case 'c':
- sscanf( ft_optarg, "%lx", &hexvalue );
- textclr[0] = hexvalue>>16 & 0xFF;
- textclr[1] = hexvalue>> 8 & 0xFF;
- textclr[2] = hexvalue>> 0 & 0xFF;
- break;
-
- default:
- usage();
- break;
- }
- }
-
- argc -= ft_optind;
- argv += ft_optind;
-
- if ( argc <= 0 || argc > 2 || dpi <= 0 || ptsize <= 0 || border < 0 )
- usage();
-
- filename = argv[0];
-
- if ( argc > 1 )
- txt = argv[1];
- else
- txt = "The quick brown fox jumps over the lazy dog";
-
- txtlen = strlen( txt );
-
- /* Initialize engine and other stuff */
-
- error = TT_Init_FreeType( &engine );
- if ( error )
- Panic( "Error while initializing engine, code = 0x%x.\n", error );
-
- Init_Face( filename );
- Load_Glyphs( txt, txtlen );
- Init_Raster_Areas( txt, txtlen );
-
- /* Do the real work now */
-
- Render_All_Glyphs( txt, txtlen );
- Dump_Raster_Map( &bit, stdout );
-
- /* Clean up */
-
- Done_Raster_Areas();
- Done_Glyphs();
- Done_Face();
-
- /* That's all, folks! */
-
- TT_Done_FreeType( engine );
-
- exit( EXIT_SUCCESS ); /* for safety reasons */
-
- return 0; /* never reached */
-}
-
-
-/* End */