1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <X11/Xlib.h>
5 
6 #include "font.C"
7 
8 static Display	*dpy;
9 static int		scr;
10 static Window	win;
11 static GC		gc;
12 
13 #define	WIDTH		1000
14 #define	HEIGHT	720
15 
16 #define	OFFX		64
17 #define	OFFY		70
18 
19 // #define	TST_FNT	"-adobe-times-medium-r-normal--34-240-100-100-p-170-iso8859-1"
20 #define TST_FNT "-adobe-courier-bold-r-normal--24-240-75-75-m-150-iso8859-1"
21 #define	TST_STR	"_Helmut_\rHoenig\r_"
22 
23 #include "smiletab.H"
24 
cmp(const void * a,const void * b)25 static int cmp(const void *a,const void *b) {
26 	return strcmp(*(char**)a,*(char**)b);
27 }
28 
main(int argc,char ** argv)29 void main(int argc,char **argv)
30 {
31 int		i;
32 int		width=WIDTH;
33 char		*dispname="";
34 int		sync_flag=0;
35 XEvent	event;
36 ScalableFont	*sf;
37 
38 	for (i=1;i<argc;i++) {
39 		if (!strncmp(argv[i],"-d",2))			dispname=argv[++i];
40 		else if (!strncmp(argv[i],"-s",2))	sync_flag=1;
41 	}
42 	dpy = XOpenDisplay(dispname);
43 	if (!dpy) {
44 		fprintf(stderr,"can't open display '%s'\n", dispname);
45 		exit(-1);
46 	}
47 	if (sync_flag)		XSynchronize(dpy,1);
48 	scr = DefaultScreen(dpy);
49 	win=XCreateSimpleWindow(dpy,RootWindow(dpy,scr),
50 			0,0,WIDTH,HEIGHT,2,BlackPixel(dpy,scr),WhitePixel(dpy,scr) );
51 	XStoreName(dpy,win,argv[0]);
52 	gc =XCreateGC(dpy,win,0,0);
53 	XSetForeground(dpy,gc,BlackPixel(dpy,scr));
54 	XSetBackground(dpy,gc,WhitePixel(dpy,scr));
55 	XSetFont(dpy,gc,XLoadFont(dpy,TST_FNT));
56 
57 	XSelectInput(dpy,win,ExposureMask|ButtonPressMask|StructureNotifyMask);
58 	XMapRaised(dpy,win);
59 
60 
61 	qsort(smiletab,sizeof(smiletab)/sizeof(char*),sizeof(char*),cmp);
62 	for (i=1;i<sizeof(smiletab)/sizeof(char*);i++) {
63 		if (!strcmp(smiletab[i],smiletab[i-1])) {
64 			printf( "Duplicated Entry: %s\n", smiletab[i] );
65 		}
66 	}
67 	printf( "%d entries in table\n", sizeof(smiletab)/sizeof(char*) );
68 
69 	sf = new FlipFont( dpy, TST_FNT, 270 );
70 
71 	while(1) {
72 		XNextEvent(dpy,&event);
73 		switch(event.type) {
74 		case ButtonPress:
75 			switch(event.xbutton.button) {
76 			case 1:	sf->TurnLeft();	break;
77 			case 2:	sf->Flip();			break;
78 			case 3:	sf->TurnRight();	break;
79 			}
80 			XClearWindow(dpy,win);
81 
82 		case Expose: {
83 			int	x,y;
84 
85 			sf->DrawCentered(win,gc,150,150,TST_STR);
86 			sf->DrawCentered(win,gc,200,200,TST_STR);
87 			XDrawImageString(dpy,win,gc,250,250,TST_STR,strlen(TST_STR));
88 #if (0)
89 			x = OFFX;
90 			y = 400;
91 			for (i=0;i<sizeof(smiletab)/sizeof(char*);i++) {
92 				sf->DrawCentered(win,gc,x,y,smiletab[i]);
93 				x+=OFFX;
94 				if (x>width-OFFX) {
95 					y+=OFFY;
96 					x =OFFX;
97 				}
98 			}
99 #endif
100 			break;
101 		}
102 		case ConfigureNotify:
103 			width = event.xconfigure.width;
104 			/* Size: event.xconfigure.width,event.xconfigure.height */
105 			break;
106 		}
107 	}
108 }
109