1 /**
2  ** fonttest.c ---- test text drawing
3  **
4  ** Copyright (c) 1995 Csaba Biegl, 820 Stirrup Dr, Nashville, TN 37221
5  ** [e-mail: csaba@vuse.vanderbilt.edu]
6  **
7  ** This is a test/demo file of the GRX graphics library.
8  ** You can use GRX test/demo files as you want.
9  **
10  ** The GRX graphics library is free software; you can redistribute it
11  ** and/or modify it under some conditions; see the "copying.grx" file
12  ** for details.
13  **
14  ** This library is distributed in the hope that it will be useful,
15  ** but WITHOUT ANY WARRANTY; without even the implied warranty of
16  ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17  **
18  **/
19 
20 #include <string.h>
21 #include "test.h"
22 
23 int  cx;
24 int  cy;
25 GrColor c1;
26 GrColor c2;
27 GrColor c3;
28 GrColor c4;
29 
30 char test_text[] = {
31     "QUICK BROWN FOX JUMPS OVER THE LAZY DOG, "
32     "quick brown fox jumps over the lazy dog !@#$%^&*()1234567890"
33 };
34 
displayfont(GrFont * font,char * text,int len)35 void displayfont(GrFont *font,char *text,int len)
36 {
37 	GrTextOption opt;
38 	int ww,hh;
39 	int bx,by;
40 	int bw,bh;
41 
42 	memset(&opt,0,sizeof(opt));
43 	opt.txo_font   = font;
44 	opt.txo_xalign = GR_ALIGN_LEFT;
45 	opt.txo_yalign = GR_ALIGN_TOP;
46 	GrFilledBox(0,0,GrSizeX(),GrSizeY(),GrBlack());
47 	opt.txo_direct    = GR_TEXT_RIGHT;
48 	opt.txo_fgcolor.v = GrBlack();
49 	opt.txo_bgcolor.v = c1;
50 	ww = GrStringWidth(text,len,&opt);
51 	hh = GrStringHeight(text,len,&opt);
52 	bw = ww+2*hh;
53 	bh = ww;
54 	bx = cx - bw/2;
55 	by = cy - bh/2;
56 	GrDrawString(text,len,bx+hh,by,&opt);
57 	opt.txo_direct    = GR_TEXT_DOWN;
58 	opt.txo_bgcolor.v = c2;
59 	GrDrawString(text,len,bx+bw-hh,by,&opt);
60 	opt.txo_direct    = GR_TEXT_LEFT;
61 	opt.txo_bgcolor.v = c3;
62 	GrDrawString(text,len,bx+bw-ww-hh,by+bh-hh,&opt);
63 	opt.txo_direct    = GR_TEXT_UP;
64 	opt.txo_bgcolor.v = c4;
65 	GrDrawString(text,len,bx,by+bh-ww,&opt);
66 	GrKeyRead();
67 	GrClearClipBox(GrBlack());
68 	opt.txo_direct    = GR_TEXT_RIGHT;
69 	opt.txo_fgcolor.v = c1;
70 	opt.txo_bgcolor.v = GrBlack();
71 	bx = GrSizeX() / 16;
72 	by = GrSizeY() / 16;
73 	bx = (bx + 7) & ~7;
74 	while(by < GrSizeY()) {
75 	    GrDrawString(test_text,strlen(test_text),bx,by,&opt);
76 	    opt.txo_fgcolor.v ^= GR_UNDERLINE_TEXT;
77 	    by += hh;
78 	}
79 	GrKeyRead();
80 }
81 
TESTFUNC(fonttest)82 TESTFUNC(fonttest)
83 {
84 	GrFont *f;
85 	int i;
86 	char buff[100];
87 	cx = GrSizeX() / 2;
88 	cy = GrSizeY() / 2;
89 	c1 = GrAllocColor(100,200,100);
90 	c2 = GrAllocColor(150,150,100);
91 	c3 = GrAllocColor(100,100,200);
92 	c4 = GrAllocColor(100,180,180);
93 	GrBox(GrSizeX()/16 - 2,
94 	    GrSizeY()/16 - 2,
95 	    GrSizeX() - GrSizeX()/16 + 1,
96 	    GrSizeY() - GrSizeY()/16 + 1,
97 	    GrAllocColor(250,100,100)
98 	);
99 	GrSetClipBox(GrSizeX()/16,
100 	    GrSizeY()/16,
101 	    GrSizeX() - GrSizeX()/16 - 1,
102 	    GrSizeY() - GrSizeY()/16 - 1
103 	);
104 	strcpy(buff,"Default GRX font");
105 	displayfont(&GrDefaultFont,buff,strlen(buff));
106 	strcpy(buff,"Default font scaled to 6x10");
107 	displayfont(
108 	    GrBuildConvertedFont(
109 		&GrDefaultFont,
110 		(GR_FONTCVT_SKIPCHARS | GR_FONTCVT_RESIZE),
111 		6,
112 		10,
113 		' ',
114 		'z'
115 	    ),
116 	    buff,
117 	    strlen(buff)
118 	);
119 	strcpy(buff,"Default font scaled to 12x24");
120 	displayfont(
121 	    GrBuildConvertedFont(
122 		&GrDefaultFont,
123 		(GR_FONTCVT_SKIPCHARS | GR_FONTCVT_RESIZE),
124 		12,
125 		24,
126 		' ',
127 		'z'
128 	    ),
129 	    buff,
130 	    strlen(buff)
131 	);
132 	strcpy(buff,"Default font scaled to 18x36");
133 	displayfont(
134 	    GrBuildConvertedFont(
135 		&GrDefaultFont,
136 		(GR_FONTCVT_SKIPCHARS | GR_FONTCVT_RESIZE),
137 		18,
138 		36,
139 		' ',
140 		'z'
141 	    ),
142 	    buff,
143 	    strlen(buff)
144 	);
145 	strcpy(buff,"Default font scaled to 10x20 proportional");
146 	displayfont(
147 	    GrBuildConvertedFont(
148 		&GrDefaultFont,
149 		(GR_FONTCVT_SKIPCHARS | GR_FONTCVT_RESIZE | GR_FONTCVT_PROPORTION),
150 		10,
151 		20,
152 		' ',
153 		'z'
154 	    ),
155 	    buff,
156 	    strlen(buff)
157 	);
158 	strcpy(buff,"Default font scaled to 10x20 bold");
159 	displayfont(
160 	    GrBuildConvertedFont(
161 		&GrDefaultFont,
162 		(GR_FONTCVT_SKIPCHARS | GR_FONTCVT_RESIZE | GR_FONTCVT_BOLDIFY),
163 		10,
164 		20,
165 		' ',
166 		'z'
167 	    ),
168 	    buff,
169 	    strlen(buff)
170 	);
171 	strcpy(buff,"Default font scaled to 10x20 italic");
172 	displayfont(
173 	    GrBuildConvertedFont(
174 		&GrDefaultFont,
175 		(GR_FONTCVT_SKIPCHARS | GR_FONTCVT_RESIZE | GR_FONTCVT_ITALICIZE),
176 		10,
177 		20,
178 		' ',
179 		'z'
180 	    ),
181 	    buff,
182 	    strlen(buff)
183 	);
184 	for(i = 0; i < Argc; i++) {
185 	    f = GrLoadFont(Argv[i]);
186 	    if(f) {
187 		sprintf(buff,"This is font %s",Argv[i]);
188 		displayfont(f,buff,strlen(buff));
189 	    }
190 	}
191 }
192 
193