diff --git a/examples/Makefile.am b/examples/Makefile.am index c2be9b8..8f19836 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -1,4 +1,5 @@ CFLAGS=-I.. -g -Wall +LDADD = ../libvncserver.a if HAVE_LIBPTHREAD BACKGROUND_TEST=blooptest @@ -9,10 +10,12 @@ MAC=mac mac_LDFLAGS=-framework ApplicationServices -framework Carbon -framework IOKit endif +copyrecttest_LDADD=$(LDADD) -lm + noinst_HEADERS=radon.h noinst_PROGRAMS=example pnmshow regiontest pnmshow24 fontsel \ - vncev storepasswd colourmaptest simple simple15 $(BACKGROUND_TEST) $(MAC) + vncev storepasswd colourmaptest simple simple15 copyrecttest \ + $(BACKGROUND_TEST) $(MAC) -LDADD = ../libvncserver.a diff --git a/examples/copyrecttest.c b/examples/copyrecttest.c new file mode 100644 index 0000000..8186e8e --- /dev/null +++ b/examples/copyrecttest.c @@ -0,0 +1,50 @@ +#include +#include + +void initBackground(rfbScreenInfoPtr server) +{ + unsigned int i,j; + + for(i=0;iwidth;i++) + for(j=0;jheight;j++) { + server->frameBuffer[(j*server->width+i)*4+0]=i&0xff; + server->frameBuffer[(j*server->width+i)*4+1]=j&0xff; + server->frameBuffer[(j*server->width+i)*4+2]=(i*j)&0xff; + } +} + +int main(int argc,char** argv) +{ + int width=400,height=300,w=20,x,y; + double r,phi; + + rfbScreenInfoPtr server=rfbGetScreen(&argc,argv,width,height,8,3,4); + server->frameBuffer=malloc(width*height*4); + initBackground(server); + server->rfbDeferUpdateTime=0; + rfbInitServer(server); + + r=0; + while(1) { + if(r<=0) { + initBackground(server); + rfbMarkRectAsModified(server,0,0,width,height); + r=0.43; + phi=0; + } else { + r-=0.0001; + phi+=0.02; + if(phi>2*M_PI) + phi-=2*M_PI; + } + x=width*(0.5+cos(phi)*r); + y=height*(0.5+sin(phi)*r); + if(x>=0 && y>=0 && x+w<=width && y+w<=height) { + unsigned int dx=width*0.5*(1-cos(phi)*r)-x, + dy=height*0.5*(1-sin(phi)*r)-y; + rfbDoCopyRect(server,x,y,x+w,y+w,-dx,-dy); + } + rfbProcessEvents(server,50000); + } + return(0); +}