shithub: freetype+ttf2subf

Download patch

ref: f6356ab71370699a974fb1dedb544bb3b46abc26
parent: 6bc8b1f07dfb665350079ea93c373bb2670a68ae
author: David Turner <[email protected]>
date: Fri Jan 14 10:38:30 EST 2000

some changes used to debug the new raster and the OS/2
graphics driver

git/fs: mount .git/fs: mount/attach disallowed
--- a/demos/src/fttimer.c
+++ b/demos/src/fttimer.c
@@ -77,9 +77,9 @@
 
   short  visual;      /* display glyphs while rendering */
   short  gray_render; /* smooth fonts with gray levels  */
+  short  force_low;
 
 
-
   static void Clear_Buffer();
 
   static void Panic( const char* message )
@@ -152,9 +152,11 @@
       return error;
 
     glyph->outline.second_pass    = 0;
-    glyph->outline.high_precision = 0;
     glyph->outline.dropout_mode   = 0;
 
+    if (force_low)
+      glyph->outline.high_precision = 0;
+
     /* debugging */
 #if 0
     if ( idx == 0 && !visual )
@@ -174,8 +176,10 @@
                     &outlines[cur_glyph] );
 
     /* copy the glyph outline into it */
-    glyph->outline.high_precision = 0;
     glyph->outline.second_pass    = 0;
+    if (force_low)
+      glyph->outline.high_precision = 0;
+
     FT_Copy_Outline( &glyph->outline, &outlines[cur_glyph] );
 
     /* center outline around 0 */
@@ -208,8 +212,6 @@
   FT_Error  ConvertRaster( int  index )
   {
     outlines[index].second_pass    = 0;
-    outlines[index].high_precision = 0;
-
     return FT_Get_Outline_Bitmap( library, &outlines[index], &Bit );
   }
 
@@ -224,6 +226,7 @@
       fprintf( stderr, "   -s : character pixel size (default is 600)\n" );
       fprintf( stderr, "   -v : display results..\n" );
       fprintf( stderr, "   -g : render anti-aliased glyphs\n" );
+      fprintf( stderr, "   -l : force low quality even at small sizes\n" );
       exit(1);
   }
 
@@ -243,6 +246,7 @@
 
     gray_render = 0;
     visual      = 0;
+    force_low   = 0;
 
     while ( argc > 1 && argv[1][0] == '-' )
     {
@@ -250,6 +254,10 @@
       {
       case 'g':
         gray_render = 1;
+        break;
+
+      case 'l':
+        force_low = 1;
         break;
 
       case 'v':
--- a/demos/src/ftview.c
+++ b/demos/src/ftview.c
@@ -22,6 +22,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <stdarg.h>
 
 #include "graph.h"
 #include "grfont.h"
@@ -34,7 +35,6 @@
 
 #define  MAXPTSIZE  500                 /* dtp */
 
-
   char  Header[128];
   char* new_header = 0;
 
@@ -64,7 +64,25 @@
 
   int  graph_init = 0;
 
+#define DEBUGxxx
 
+#ifdef DEBUG
+#define LOG(x)  LogMessage##x
+#else
+#define LOG(x)  /* rien */
+#endif
+
+#ifdef DEBUG
+  static void  LogMessage( const char*  fmt, ... )
+  {
+    va_list  ap;
+
+    va_start( ap, fmt );
+    vfprintf( stderr, fmt, ap );
+    va_end( ap );
+  }
+#endif
+
   /* PanicZ */
   static void PanicZ( const char* message )
   {
@@ -77,6 +95,8 @@
   static void  Clear_Display( void )
   {
     long  size = (long)bit.pitch * bit.rows;
+
+    if (size < 0) size = -size;
     memset( bit.buffer, 0, size );
   }
 
@@ -100,7 +120,7 @@
   }
 
 
-#define MAX_BUFFER  65000
+#define MAX_BUFFER  300000
 
 #define FLOOR(x)  ((x) & -64)
 #define CEIL(x)   (((x)+63) & -64)
@@ -118,6 +138,7 @@
     grBitmap   bit3;
     int        width, height, pitch, size;
     int        left, right, top, bottom;
+    int        x_top, y_top;
 
     left  = FLOOR( glyph->metrics.horiBearingX );
     right = CEIL( glyph->metrics.horiBearingX + glyph->metrics.width );
@@ -167,10 +188,17 @@
     }
       
     /* Then, blit the image to the target surface */
+    x_top = x_offset + TRUNC(left);
+    y_top = y_offset - TRUNC(top);
+
+/*
+    if (bit.pitch < 0)
+      y_top = bit.rows - y_top;
+*/
     grBlitGlyphToBitmap( &bit,
                          &bit3,
-                         x_offset + TRUNC(left),
-                         y_offset - TRUNC(top),
+                         x_top,
+                         y_top,
                          (grColor)127L ); 
     return 0;
   }
@@ -215,7 +243,6 @@
 
     FT_Error    error;
 
-
     start_x = 4;
     start_y = 16 + ptsize ;
 
@@ -231,6 +258,19 @@
     {
       if ( !(error = LoadChar( i, hinted )) )
       {
+#ifdef DEBUG
+        if (i <= first_glyph+6)
+        {
+          LOG(( "metrics[%02d] = [%x %x]\n",
+                i,
+                glyph->metrics.horiBearingX,
+                glyph->metrics.horiAdvance ));
+
+          if (i == first_glyph+6)
+          LOG(( "-------------------------\n"));
+        }
+        
+#endif
         Render_Glyph( x, y );
 
         x += ( glyph->metrics.horiAdvance >> 6 ) + 1;