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