| 235 |
|
/* set window manager hints */ |
| 236 |
|
ourxwmhints.flags = InputHint|IconPixmapHint; |
| 237 |
|
ourxwmhints.input = True; |
| 238 |
< |
ourxwmhints.icon_pixmap = XCreateBitmapFromData(ourdisplay, |
| 239 |
< |
gwind, x11icon_bits, x11icon_width, x11icon_height); |
| 238 |
> |
ourxwmhints.icon_pixmap = XCreateBitmapFromData(ourdisplay, gwind, |
| 239 |
> |
(char *)x11icon_bits, x11icon_width, x11icon_height); |
| 240 |
|
XSetWMHints(ourdisplay, gwind, &ourxwmhints); |
| 241 |
|
oursizhints.min_width = MINWIDTH; |
| 242 |
|
#ifdef STEREO |
| 324 |
|
register VIEW *nv |
| 325 |
|
) |
| 326 |
|
{ |
| 327 |
+ |
#ifdef STEREO |
| 328 |
+ |
double d; |
| 329 |
+ |
#endif |
| 330 |
|
if (nv->type != VT_PER || /* check view legality */ |
| 331 |
|
nv->horiz > 160. || nv->vert > 160.) { |
| 332 |
|
error(COMMAND, "illegal view type/angle"); |
| 768 |
|
{ |
| 769 |
|
VIEW nv; |
| 770 |
|
FVECT odir, v1, wip; |
| 771 |
< |
double d, d1; |
| 771 |
> |
double d; |
| 772 |
> |
#ifdef DOBJ |
| 773 |
> |
double d1; |
| 774 |
> |
#endif |
| 775 |
|
/* start with old view */ |
| 776 |
|
nv = odev.v; |
| 777 |
|
/* orient our motion */ |
| 825 |
|
) |
| 826 |
|
{ |
| 827 |
|
int startx = ebut->x, starty = ebut->y; |
| 828 |
< |
int endx, endy; |
| 829 |
< |
|
| 828 |
> |
int endx, endy, midx, midy; |
| 829 |
> |
FVECT odir, v1; |
| 830 |
> |
double d; |
| 831 |
> |
#ifdef DOBJ |
| 832 |
> |
double d1; |
| 833 |
> |
#endif |
| 834 |
> |
/* get mouse drag */ |
| 835 |
|
XMaskEvent(ourdisplay, ButtonReleaseMask, levptr(XEvent)); |
| 836 |
|
endx = levptr(XButtonReleasedEvent)->x; |
| 837 |
|
endy = levptr(XButtonReleasedEvent)->y; |
| 838 |
< |
if ((endx == startx) | (endy == starty)) { |
| 839 |
< |
XBell(ourdisplay, 0); |
| 838 |
> |
midx = (startx + endx) >> 1; |
| 839 |
> |
midy = (starty + endy) >> 1; |
| 840 |
> |
/* set focus distance */ |
| 841 |
> |
if (viewray(v1, odir, &odev.v, |
| 842 |
> |
(midx+.5)/odev.hres, (midy+.5)/odev.vres) < -FTINY) |
| 843 |
|
return; |
| 844 |
< |
} |
| 844 |
> |
d = getdistance(midx, midy, odir); /* distance from front plane */ |
| 845 |
> |
#ifdef DOBJ |
| 846 |
> |
d1 = dobj_trace(NULL, v1, odir); |
| 847 |
> |
if (d1 < d) |
| 848 |
> |
d = d1; |
| 849 |
> |
#endif |
| 850 |
> |
if (d < .99*FHUGE) |
| 851 |
> |
odev.v.vdist = d + sqrt(dist2(v1, odev.v.vp)); |
| 852 |
> |
/* set frame for rendering */ |
| 853 |
> |
if ((endx == startx) | (endy == starty)) |
| 854 |
> |
return; |
| 855 |
|
if (endx < startx) {register int c = endx; endx = startx; startx = c;} |
| 856 |
|
if (endy < starty) {register int c = endy; endy = starty; starty = c;} |
| 857 |
|
sprintf(odev_args, "%.3f %.3f %.3f %.3f", |