--- ray/src/util/glrad.c 2016/04/25 02:04:22 3.24 +++ ray/src/util/glrad.c 2020/02/28 05:18:49 3.27 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: glrad.c,v 3.24 2016/04/25 02:04:22 greg Exp $"; +static const char RCSid[] = "$Id: glrad.c,v 3.27 2020/02/28 05:18:49 greg Exp $"; #endif /* * Program to display Radiance scene using OpenGL. @@ -27,11 +27,12 @@ static const char RCSid[] = "$Id: glrad.c,v 3.24 2016/ #define MAXSCENE 127 /* maximum number of scene files */ #endif -#define ZOOMPCT 9 /* percent to zoom at a time */ +#define ZOOMPCT 9 /* percent to zoom for +/- */ +#define WZOOMPCT 3 /* percent to zoom for mouse wheel */ -#define MOVPCT 7 /* percent distance to move /frame */ +#define MOVPCT 4 /* percent distance to move /frame */ #define MOVDIR(b) ((b)==Button1 ? 1 : (b)==Button2 ? 0 : -1) -#define MOVDEG (-5) /* degrees to orbit CW/down /frame */ +#define MOVDEG (-1.5) /* degrees to orbit CW/down /frame */ #define MOVORB(s) ((s)&ShiftMask ? 1 : (s)&ControlMask ? -1 : 0) #define BORWIDTH 5 /* border width */ @@ -75,7 +76,7 @@ char *scene[MAXSCENE+1]; /* material and scene file l int nscenef = 0; /* number of scene files */ char *octree; /* octree name (NULL if unnec.) */ -SUBPROC rtpd; /* rtrace process descriptors */ +SUBPROC rtpd = SP_INACTIVE; /* rtrace process descriptors */ int silent = 0; /* run rad silently? */ int backvis = 1; /* back faces visible? */ @@ -210,7 +211,7 @@ quit( /* exit gracefully */ if (ourdisplay != NULL) dev_close(); /* if (rtpd.pid > 0) { */ - if (rtpd.running) { + if (rtpd.flags & PF_RUNNING) { if (close_process(&rtpd) > 0) wputs("bad exit status from rtrace\n"); /* rtpd.pid = 0; */ @@ -584,7 +585,19 @@ dev_input( /* get next input event */ case KeyPress: return(getkey(levptr(XKeyPressedEvent))); case ButtonPress: - getmove(levptr(XButtonPressedEvent)); + switch (levptr(XButtonPressedEvent)->button) { + case Button4: /* wheel up */ + zoomview(100+WZOOMPCT, levptr(XButtonPressedEvent)->x, + vres-1-levptr(XButtonPressedEvent)->y); + break; + case Button5: /* wheel down */ + zoomview(100-WZOOMPCT, levptr(XButtonPressedEvent)->x, + vres-1-levptr(XButtonPressedEvent)->y); + break; + default: + getmove(levptr(XButtonPressedEvent)); + break; + } break; } return(1); @@ -728,7 +741,7 @@ getintersect( /* intersect ray with scene geometry */ float fbuf[6]; /* check to see if rtrace is running */ /* if (rtpd.pid <= 0) */ - if (!rtpd.running) + if (!(rtpd.flags & PF_RUNNING)) return(0); /* assign origin */ fbuf[0] = org[0]; fbuf[1] = org[1]; fbuf[2] = org[2]; @@ -827,6 +840,7 @@ getkey( /* get input key */ case 'V': /* append view to rad file */ appendview(NULL, &thisview); break; + case 'Q': case 'q': /* quit the program */ return(0); default: