add libvncserver
[presencevnc] / libvnc / test / copyrecttest.c
1 #ifdef __STRICT_ANSI__
2 #define _BSD_SOURCE
3 #endif
4 #include <rfb/rfb.h>
5 #include <math.h>
6
7 static void initBackground(rfbScreenInfoPtr server)
8 {
9   unsigned int i,j;
10
11   for(i=0;i<server->width;i++)
12     for(j=0;j<server->height;j++) {
13       server->frameBuffer[(j*server->width+i)*4+0]=i&0xff;
14       server->frameBuffer[(j*server->width+i)*4+1]=j&0xff;
15       server->frameBuffer[(j*server->width+i)*4+2]=(i*j)&0xff;
16     }
17 }
18
19 int main(int argc,char** argv)
20 {             
21   int width=400,height=300,w=20,x,y;
22   double r,phi=0;
23   
24   rfbScreenInfoPtr server=rfbGetScreen(&argc,argv,width,height,8,3,4);
25   server->frameBuffer=(char*)malloc(width*height*4);
26   initBackground(server);
27   server->deferUpdateTime=0;
28   rfbInitServer(server);
29
30   r=0;
31   while(1) {
32     if(r<=0) {
33       initBackground(server);
34       rfbMarkRectAsModified(server,0,0,width,height);
35       r=0.43;
36       phi=0;
37     } else {
38       r-=0.0001;
39       phi+=0.02;
40       if(phi>2*M_PI)
41         phi-=2*M_PI;
42     }
43     x=width*(0.5+cos(phi)*r);
44     y=height*(0.5+sin(phi)*r);
45     if(x>=0 && y>=0 && x+w<=width && y+w<=height) {
46       unsigned int dx=width*0.5*(1-cos(phi)*r)-x,
47                 dy=height*0.5*(1-sin(phi)*r)-y;
48       rfbDoCopyRect(server,x,y,x+w,y+w,-dx,-dy);
49     }
50     rfbProcessEvents(server,50000);
51   }
52   return(0);
53 }