klaassen@fifi.informatik.uni-dortmund.de (Othmar Klaassen) (06/19/91)
Hi,
We ran into a problem with openwindows, and I wonder whether this
really is a server bug.
Our environment: Sun4, SunOS4.1.1, Openwin-2.0, any window manager.
The following program (cut to the absolute minimum, so no comments
about missing tests etc. please) works okay until any other window
obscures (partly) the upper left square with it's upper left corner.
In this case, the XDrawLine (,,,, CoordModePrevious) seems rather
confused about the place and the lines to draw ...
It seems a problem with the server, because
a) monitoring the requests shows a valid PolyLine request, and
b) it works with the MIT server.
Please tell me if there were 27 persons before me to notice this or
if Openwin-2.0 is out of time,
thanks in advance,
Othmar
Othmar Klaassen e-mail : klaassen@fifi.informatik.uni-dortmund.de
University of Dortmund klaassen@fifi.unido.uucp
Informatik IV uunet!mcsun!unido!laura!fifi!klaassen
P.O.Box 500500 unido!laura!fifi!klaassen
D-4600 Dortmund 50, Germany voice : +49 231 755 4746
/*
** file: bug.c
*/
#include <X11/Xlib.h>
#include <X11/Xos.h>
#include <X11/Xutil.h>
#include <stdio.h>
#define err(x) fprintf(stderr,x)
#define X_RES 300
#define Y_RES 300
Display *disp; /* my display */
Window win; /* my window */
GC gc; /* my GC */
XEvent evnt; /* my exent */
int scrn; /* screen */
XPoint points1 [] = {{10, 10}, {50, 0}, {0, 50}, {-50, 0}, {0, -50}};
XPoint points2 [] = {{100, 100}, {150, 100}, {150, 150}, {100, 150}, {100, 100}};
main(argc,argv)
int argc;
char *argv[];
{
XEvent evnt;
initx();
while(1){
XNextEvent(disp,&evnt);
switch (evnt.type){
case Expose:
XClearWindow(disp,win);
XDrawLines(disp, win, gc, points1, 5,
CoordModePrevious);
XDrawLines(disp, win, gc, points2, 5,
CoordModeOrigin);
break;
case ButtonPress:
XCloseDisplay(disp);
exit(0);
}
}
}
/***************************************************************************
** FUNCTION: initx
**
***************************************************************************/
initx()
{
unsigned long att_flags;
XSetWindowAttributes att;
XGCValues gcatt;
if ((disp = XOpenDisplay(NULL)) == NULL){
err("Can't open display.\n");
exit(-1);
}
scrn = DefaultScreen(disp);
/*
** now set up the window
*/
att_flags = CWEventMask | CWBackPixel;
att.event_mask = ButtonPressMask | ExposureMask;
att.background_pixel = BlackPixel(disp,scrn);
win = XCreateWindow(disp,RootWindow(disp,scrn),100,100,X_RES,Y_RES,5,
CopyFromParent,InputOutput,CopyFromParent,
att_flags,&att);
/*
** Create the GC to draw with.
*/
att_flags = GCForeground | GCBackground;
gcatt.foreground = WhitePixel(disp,scrn);
gcatt.background = BlackPixel(disp,scrn);
gc = XCreateGC(disp,win,att_flags,&gcatt);
XMapWindow(disp,win);
}