📄 xwigb.c
字号:
/* connect to X server */ if ((dpy=XOpenDisplay(NULL))==NULL) err("Cannot connect to display %s!\n",XDisplayName(NULL)); scr = DefaultScreen(dpy); black = BlackPixel(dpy,scr); white = WhitePixel(dpy,scr); /* set endian for display */ if (!getparint("endian",&endian)){ if(BitmapBitOrder(dpy)==LSBFirst) endian=0; else if(BitmapBitOrder(dpy)==MSBFirst) endian=1; else endian=CWPENDIAN; } /* set interpolation flag for display */ if (!getparint("interp",&interp)) interp = 0; /* create window */ win = xNewWindow(dpy,xbox,ybox,wbox,hbox,(int) black,(int) white,windowtitle); /* make GC for image */ gci = XCreateGC(dpy,win,0,NULL); /* make sure foreground/background are black/white */ XSetForeground(dpy,gci,black); XSetBackground(dpy,gci,white); /* set normal event mask */ XSelectInput(dpy,win, StructureNotifyMask | ExposureMask | KeyPressMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | Button1MotionMask | Button2MotionMask); /* map window */ XMapWindow(dpy,win); /* clear the window */ XClearWindow(dpy,win); /* determine good size for axes box */ xSizeAxesBox(dpy,win, labelfont,titlefont,style, &x,&y,&width,&height); /* note that image is out of date */ imageOutOfDate = 1; /* main event loop */ while(imageOutOfDate|(~imageOutOfDate)/*True*/) { XNextEvent(dpy,&event); /* if window was resized */ if (event.type==ConfigureNotify && (event.xconfigure.width!=winwidth || event.xconfigure.height!=winheight)) { winwidth = event.xconfigure.width; winheight = event.xconfigure.height; /* determine good size for axes box */ xSizeAxesBox(dpy,win, labelfont,titlefont,style, &x,&y,&width,&height); /* clear the window */ XClearWindow(dpy,win); /* note that image is out of date */ imageOutOfDate = 1; /* else if window exposed */ } else if (event.type==Expose) { /* clear all expose events from queue */ while (XCheckTypedEvent(dpy,Expose,&event)); /* if necessary, make new image */ if (imageOutOfDate) { if (image!=NULL) { /* free1(image->data); */ XDestroyImage(image); } image = newBitmap(dpy,width,height, n1,d1,f1,n2,x2,z, x1begb,x1endb,x2begb,x2endb, xcur,clip,wt,va, &p2beg,&p2end,endian,interp, wigclip,style); imageOutOfDate = 0; } /* draw image (before axes so grid lines visible) */ XPutImage(dpy,win,gci,image,0,0,x,y, image->width,image->height); /* draw curve on top of image */ for (i=0; i<curve; i++) xDrawCurve(dpy,win, x,y,width,height, x1begb,x1endb,0.0,0.0, x2begb,x2endb,p2beg,p2end, x1curve[i],x2curve[i],npair[i], curvecolor[i],style); /* draw axes on top of image */ xDrawAxesBox(dpy,win, x,y,width,height, x1begb,x1endb,0.0,0.0, d1num,f1num,n1tic,grid1,label1, x2begb,x2endb,p2beg,p2end, d2num,f2num,n2tic,grid2,label2, labelfont,title,titlefont, labelcolor,titlecolor,gridcolor, style); /* else if key down */ } else if (event.type==KeyPress) { XLookupString(&(event.xkey),keybuf,0,&keysym,&keystat); if (keysym==XK_s) { xMousePrint(event,style, mpicksfp, x,y,width,height, x1begb,x1endb,x2begb,x2endb, p2beg, p2end); } else if (keysym==XK_l ) { /* set lock */ lock = 1 ; if (verbose) warn("zoom lock set %d\n",lock); } else if (keysym==XK_u ) { /* unset lock */ lock = 0 ; if (verbose) warn("zoom lock released %d\n",lock); } else if (keysym==XK_Shift_L ) { /* if (verbose) fprintf(stderr,"Shift Left pressed \n");*/ } else if (keysym==XK_KP_1 || keysym==XK_1 ) { mvefac=1.; fprintf(stderr,"Zoom/Move factor = 1 \n"); } else if (keysym==XK_KP_2 || keysym==XK_2 ) { mvefac=2.; fprintf(stderr,"Zoom/Move factor = 2 \n"); } else if (keysym==XK_KP_3 || keysym==XK_3 ) { mvefac=3.; if (verbose) fprintf(stderr,"Zoom/Move factor = 3 \n"); } else if (keysym==XK_KP_4 || keysym==XK_4 ) { mvefac=4.; if (verbose) fprintf(stderr,"Zoom/Move factor = 4 \n"); } else if (keysym==XK_KP_5 || keysym==XK_5 ) { mvefac=5.; if (verbose) fprintf(stderr,"Zoom/Move factor = 5 \n"); } else if (keysym==XK_KP_6 || keysym==XK_6 ) { mvefac=6.; if (verbose) fprintf(stderr,"Zoom/Move factor = 6 \n"); } else if (keysym==XK_KP_7 || keysym==XK_7 ) { mvefac=7.; if (verbose) fprintf(stderr,"Zoom/Move factor = 7 \n"); } else if (keysym==XK_KP_8 || keysym==XK_8 ) { mvefac=8.; if (verbose) fprintf(stderr,"Zoom/Move factor = 8\n"); } else if (keysym==XK_KP_9 || keysym==XK_9 ) { mvefac=9.; if (verbose) fprintf(stderr,"Zoom/Move factor = 9\n"); } else if (keysym==XK_Left || keysym==XK_KP_Left ) { /* move zoom box to left by half window width */ mve = (x2endb - x2begb)/mvefac ; x2begb = x2begb - mve ; x2endb = x2endb - mve ; msg="move "; /* check for bounds of full window */ if (x2begb < x2beg) { if ( lock ) { x2begb = x2begb + mve ; x2endb = x2endb + mve ; msg="limit "; mve=0; } else { x2begb = x2beg ;} } if (verbose) fprintf(stderr,"%s %g\n",msg,mve); /* clear area and force an expose event */ XClearArea(dpy,win,0,0,0,0,True); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_Right || keysym==XK_KP_Right ) { /* move zoom box to right by half window width*/ mve = (x2endb - x2begb)/mvefac ; x2begb = x2begb + mve ; x2endb = x2endb + mve ; msg="move "; /* check for bounds of full window */ if (x2endb > x2end) { if ( lock ) { x2begb = x2begb - mve ; x2endb = x2endb - mve ; msg="limit "; mve=0; } else { x2endb = x2end ;} } if (verbose) fprintf(stderr,"%s %g\n",msg,mve); /* clear area and force an expose event */ XClearArea(dpy,win,0,0,0,0,True); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_Down || keysym==XK_KP_Down ) { /* move zoom box down by half window height */ mve = (x1endb - x1begb)/mvefac ; x1begb = x1begb + mve ; x1endb = x1endb + mve ; msg="move "; /* check for bounds of full window */ if (x1endb > x1end) { if ( lock ) { x1begb = x1begb - mve ; x1endb = x1endb - mve ; msg="limit "; mve=0; } else { x1endb = x1end ;} } if (verbose) fprintf(stderr,"%s %g\n",msg,mve); /* clear area and force an expose event */ XClearArea(dpy,win,0,0,0,0,True); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_Up || keysym==XK_KP_Up ) { /* move zoom box down by half window height */ mve = (x1endb - x1begb)/mvefac ; x1begb = x1begb - mve ; x1endb = x1endb - mve ; msg="move "; /* check for bounds of full window */ if (x1begb < x1beg) { if ( lock ) { x1begb = x1begb + mve ; x1endb = x1endb + mve ; msg="limit "; mve=0; } else { x1begb = x1beg ;} } if (verbose) fprintf(stderr,"%s %g\n",msg,mve); /* clear area and force an expose event */ XClearArea(dpy,win,0,0,0,0,True); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_o || keysym==XK_KP_Subtract ) { /* zoom out .... vertical*/ mve = (x1endb - x1begb)/mvefac ; x1begb = x1begb - mve ; x1endb = x1endb + mve ; /* check for bounds of full window */ if (x1begb < x1beg) x1begb = x1beg ; if (x1endb > x1end) x1endb = x1end ; /* .... and horizontal */ mve = (x2endb - x2begb)/mvefac ; x2begb = x2begb - mve ; x2endb = x2endb + mve ; /* check bounds of original image */ if (x2begb < x2beg) x2begb = x2beg ; if (x2endb > x2end) x2endb = x2end ; /* clear area and force an expose event */ XClearArea(dpy,win,0,0,0,0,True); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_i || keysym==XK_KP_Add ) { /* zoom in .... vertical*/ mve = (x1endb - x1begb)/(2.*mvefac) ; x1begb = x1begb + mve ; x1endb = x1endb - mve ; /* .... and horizontal */ mve = (x2endb - x2begb)/(2.*mvefac) ; x2begb = x2begb + mve ; x2endb = x2endb - mve ; /* clear area and force an expose event */ XClearArea(dpy,win,0,0,0,0,True); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_c || keysym==XK_Page_Down) { /* Change clip for image */ clip += clip/10. ; /* if (verbose) warn("clip=%g\n",clip);*/ if (verbose) fprintf(stderr,"clip=%g\n",clip); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_a || keysym==XK_Page_Up) { /* Change clip for image */ clip -= clip/10. ; /* if (verbose) warn("clip=%g\n",clip);*/ if (verbose) fprintf(stderr,"clip=%g\n",clip); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_q || keysym==XK_Q) { /* This is the exit from the event loop */ break; } else if (keysym==XK_p || keysym==XK_P) { /* invoke pswigb with appropriate data */ char cmdtemp[256]; char *cmdline; float cmdfloat; int iargc; int nbpi; float num; short debug=1; FILE *plotfp; /*fp for plot data*/ cmdline = (char *) emalloc(n2+BUFSIZ); strcpy(cmdline,"pswigb "); for (iargc = 1; iargc < argc; iargc++ ) { /* check for options defined below *GK*/ if (strncmp(argv[iargc], "d2num=", 5) && strncmp(argv[iargc], "x1beg=", 5) && strncmp(argv[iargc], "x1end=", 5) && strncmp(argv[iargc], "x2beg=", 5) && strncmp(argv[iargc], "x2end=", 5) && strncmp(argv[iargc], "title=", 5) && strncmp(argv[iargc], "label1=", 6) && strncmp(argv[iargc], "label2=", 6) && strncmp(argv[iargc], "style=", 5) ) { strcat(cmdline," "); strcat(cmdline,argv[iargc]); } } /* override incompatible args */ sprintf(cmdtemp," axescolor=%s",labelcolor); strcat(cmdline,cmdtemp); nbpi = 300; getparint("nbpi", &nbpi); sprintf(cmdtemp," nbpi=%d",nbpi); strcat(cmdline,cmdtemp); cmdfloat = DisplayWidthMM(dpy,scr)/25.4; cmdfloat /= DisplayWidth(dpy,scr); sprintf(cmdtemp," wbox=%g", cmdfloat*width); strcat(cmdline,cmdtemp); sprintf(cmdtemp," xbox=%g", 0.5+cmdfloat*xbox); strcat(cmdline,cmdtemp); cmdfloat = DisplayHeightMM(dpy,scr)/25.4; cmdfloat /= DisplayHeight(dpy,scr); sprintf(cmdtemp," hbox=%g", cmdfloat*height); strcat(cmdline,cmdtemp); sprintf(cmdtemp," ybox=%g", 0.5+cmdfloat*ybox); strcat(cmdline,cmdtemp); sprintf(cmdtemp," x1beg=%g", x1begb); strcat(cmdline,cmdtemp); sprintf(cmdtemp," x1end=%g", x1endb); strcat(cmdline,cmdtemp); sprintf(cmdtemp," x2beg=%g", x2begb); strcat(cmdline,cmdtemp); sprintf(cmdtemp," x2end=%g", x2endb); strcat(cmdline,cmdtemp); num=(x2endb-x2begb)/4; sprintf(cmdtemp," d2num=%g", num); strcat(cmdline,cmdtemp);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -