• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
get_time(void)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
dump_outline(FT_Outline * outline)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
profile_outline(FT_Outline * outline,long repeat)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 
main(int argc,char ** argv)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