Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. #include <ft2build.h>
  2. #include FT_FREETYPE_H
  3. #include FT_BBOX_H
  4.  
  5.  
  6. #include <time.h>    /* for clock() */
  7.  
  8. /* SunOS 4.1.* does not define CLOCKS_PER_SEC, so include <sys/param.h> */
  9. /* to get the HZ macro which is the equivalent.                         */
  10. #if defined(__sun__) && !defined(SVR4) && !defined(__SVR4)
  11. #include <sys/param.h>
  12. #define CLOCKS_PER_SEC HZ
  13. #endif
  14.  
  15.   static long
  16.   get_time( void )
  17.   {
  18.     return clock() * 10000L / CLOCKS_PER_SEC;
  19.   }
  20.  
  21.  
  22.  
  23.  
  24.   /* test bbox computations */
  25.  
  26. #define  XSCALE    65536
  27. #define  XX(x)     ((FT_Pos)(x*XSCALE))
  28. #define  XVEC(x,y)  { XX(x), XX(y) }
  29. #define  XVAL(x)   ((x)/(1.0*XSCALE))
  30.  
  31.   /* dummy outline #1 */
  32.   static FT_Vector  dummy_vec_1[4] =
  33.   {
  34. #if 1
  35.     XVEC( 408.9111, 535.3164 ),
  36.     XVEC( 455.8887, 634.396  ),
  37.     XVEC( -37.8765, 786.2207 ),
  38.     XVEC( 164.6074, 535.3164 )
  39. #else
  40.     { (FT_Int32)0x0198E93DL , (FT_Int32)0x021750FFL },  /* 408.9111, 535.3164 */
  41.     { (FT_Int32)0x01C7E312L , (FT_Int32)0x027A6560L },  /* 455.8887, 634.3960 */
  42.     { (FT_Int32)0xFFDA1F9EL , (FT_Int32)0x0312387FL },  /* -37.8765, 786.2207 */
  43.     { (FT_Int32)0x00A49B7EL , (FT_Int32)0x021750FFL }   /* 164.6074, 535.3164 */
  44. #endif
  45.    };
  46.  
  47.   static char  dummy_tag_1[4] =
  48.   {
  49.     FT_CURVE_TAG_ON,
  50.     FT_CURVE_TAG_CUBIC,
  51.     FT_CURVE_TAG_CUBIC,
  52.     FT_CURVE_TAG_ON
  53.   };
  54.  
  55.   static short  dummy_contour_1[1] =
  56.   {
  57.     3
  58.   };
  59.  
  60.   static FT_Outline  dummy_outline_1 =
  61.   {
  62.     1,
  63.     4,
  64.     dummy_vec_1,
  65.     dummy_tag_1,
  66.     dummy_contour_1,
  67.     0
  68.   };
  69.  
  70.  
  71.   /* dummy outline #2 */
  72.   static FT_Vector  dummy_vec_2[4] =
  73.   {
  74.     XVEC( 100.0, 100.0 ),
  75.     XVEC( 100.0, 200.0 ),
  76.     XVEC( 200.0, 200.0 ),
  77.     XVEC( 200.0, 133.0 )
  78.   };
  79.  
  80.   static FT_Outline  dummy_outline_2 =
  81.   {
  82.     1,
  83.     4,
  84.     dummy_vec_2,
  85.     dummy_tag_1,
  86.     dummy_contour_1,
  87.     0
  88.   };
  89.  
  90.  
  91.   /* dummy outline #3 with bbox of [0 100 128 128] precisely */
  92.   static FT_Vector  dummy_vec_3[4] =
  93.   {
  94.     XVEC( 100.0, 127.0 ),
  95.     XVEC( 200.0, 127.0 ),
  96.     XVEC(   0.0, 136.0 ),
  97.     XVEC(   0.0, 100.0 )
  98.   };
  99.  
  100.   static FT_Outline  dummy_outline_3 =
  101.   {
  102.     1,
  103.     4,
  104.     dummy_vec_3,
  105.     dummy_tag_1,
  106.     dummy_contour_1,
  107.     0
  108.   };
  109.  
  110.  
  111.   static void
  112.   dump_outline( FT_Outline*  outline )
  113.   {
  114.     FT_BBox  bbox;
  115.  
  116.     /* compute and display cbox */
  117.     FT_Outline_Get_CBox( outline, &bbox );
  118.     printf( "cbox = [%.2f %.2f %.2f %.2f]\n",
  119.              XVAL( bbox.xMin ),
  120.              XVAL( bbox.yMin ),
  121.              XVAL( bbox.xMax ),
  122.              XVAL( bbox.yMax ) );
  123.  
  124.     /* compute and display bbox */
  125.     FT_Outline_Get_BBox( outline, &bbox );
  126.     printf( "bbox = [%.2f %.2f %.2f %.2f]\n",
  127.              XVAL( bbox.xMin ),
  128.              XVAL( bbox.yMin ),
  129.              XVAL( bbox.xMax ),
  130.              XVAL( bbox.yMax ) );
  131.   }
  132.  
  133.  
  134.  
  135.   static void
  136.   profile_outline( FT_Outline*   outline,
  137.                    long          repeat )
  138.   {
  139.     FT_BBox  bbox;
  140.     long     count;
  141.     long     time0;
  142.  
  143.     time0 = get_time();
  144.     for ( count = repeat; count > 0; count-- )
  145.       FT_Outline_Get_CBox( outline, &bbox );
  146.  
  147.     time0 = get_time() - time0;
  148.     printf( "time = %6.3f cbox = [%8.4f %8.4f %8.4f %8.4f]\n",
  149.              ((double)time0/10000.0),
  150.              XVAL( bbox.xMin ),
  151.              XVAL( bbox.yMin ),
  152.              XVAL( bbox.xMax ),
  153.              XVAL( bbox.yMax ) );
  154.     printf( "cbox_hex = [%08X %08X %08X %08X]\n",
  155.              bbox.xMin, bbox.yMin, bbox.xMax, bbox.yMax );
  156.  
  157.  
  158.     time0 = get_time();
  159.     for ( count = repeat; count > 0; count-- )
  160.       FT_Outline_Get_BBox( outline, &bbox );
  161.  
  162.     time0 = get_time() - time0;
  163.     printf( "time = %6.3f bbox = [%8.4f %8.4f %8.4f %8.4f]\n",
  164.              ((double)time0/10000.0),
  165.              XVAL( bbox.xMin ),
  166.              XVAL( bbox.yMin ),
  167.              XVAL( bbox.xMax ),
  168.              XVAL( bbox.yMax ) );
  169.     printf( "bbox_hex = [%08X %08X %08X %08X]\n",
  170.              bbox.xMin, bbox.yMin, bbox.xMax, bbox.yMax );
  171.   }
  172.  
  173. #define REPEAT  1000000L
  174.  
  175.   int  main( int  argc, char**  argv )
  176.   {
  177.     printf( "outline #1\n" );
  178.     profile_outline( &dummy_outline_1, REPEAT );
  179.  
  180.     printf( "outline #2\n" );
  181.     profile_outline( &dummy_outline_2, REPEAT );
  182.  
  183.     printf( "outline #3\n" );
  184.     profile_outline( &dummy_outline_3, REPEAT );
  185.  
  186.     return 0;
  187.   }
  188.  
  189.