[comp.windows.x] Problems w/XDrawRectangle, rubberbanding

mh2620@sarek.sbc.com (Mark Horstman) (09/27/90)

I'm trying to put a rubberbanding feature in my application with the
following code to draw and undraw the rubberband (which looks a lot 
like the 'draw_box' routine in the O'Reilly X manual Volume 2 
section 14.7.13):

static GC RBgc = NULL;
Widget iWidget;

void drawRB( x, y, w, h )
    int x, y;
    unsigned int    w, h;
{

    if ( w && h ) {
        if ( RBgc == NULL ) {
            RBgc = XCreateGC( XtDisplay( iWidget ), XtWindow( iWidget ),
                    0, NULL );
            XSetForeground( XtDisplay( iWidget ), RBgc,
                BlackPixel( XtDisplay( iWidget ),
                    DefaultScreen( XtDisplay( iWidget ) )
                    )
                );
            XSetBackground( XtDisplay( iWidget ), RBgc,
                WhitePixel( XtDisplay( iWidget ),
                    DefaultScreen( XtDisplay( iWidget ) )
                    )
                );
            XSetFunction( XtDisplay( iWidget ), RBgc, GXxor );
            }
        XDrawRectangle( XtDisplay( iWidget ), XtWindow( iWidget ),
            RBgc, x, y, w, h );
        }
}

This works fine on the Sun sample server and on NCD X-terminals, but I can't
get the rubberband to show up on anything else (I've tried an RS/6000,
an IBM X-station, a Tektronics X-terminal, and a couple X servers for DOS).
What am i doing wrong?

 +----------------------------------------------------------------------------+
 | Mark A. Horstman                               Southwestern Bell Telephone |
 | mh2620@sarek.sbc.com                                         St. Louis, MO |
 |   OR uunet!sarek.sbc.com!mh2620                             (314) 235-3417 |
 +----------------------------------------------------------------------------+

moraes@cs.toronto.edu (Mark Moraes) (10/01/90)

I use something like this to create GCs for rubberbanding.

GC
createxorgc(dpy, win, fgcol, bgcol)
Display *dpy;
Window win;
Pixel fgcol, bgcol;
{
	XGCValues gcv;
	
	gcv.foreground = fgcol ^ bgcol;
	gcv.background = bgcol;
	gcv.function = GXxor;
	return XCreateGC(dpy, win, (GCForeground | GCBackground | GCFunction),
			 &gcv);
}