Bill Allombert on Mon, 15 Apr 2002 18:53:09 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: X plotting |
On Fri, Apr 12, 2002 at 03:49:04PM -0400, Ilya Zakharevich wrote: > Yesterday I used X plotting of GP/PARI (the first time after a long > time) and found it wanting. > > The default setup here, in MSRI, is some Win95-like X window manager > (fwm95?). It includes a stay-on-top status bar at bottom, and some > kind of switch-the-desktop stay-on-top bar on the right. > > Given that > > a) X plotting window would not redraw if part of it is obscured; This is a bug. If I understand correctly the bug is only on X servers that do not support backing-store. You can check for backing-store support with % xdpyinfo | grep backing-store options: backing-store NO, save-unders NO The following patch checks for becking-store support before using it. Does it fix the problem for everybody ? Cheers, Bill. Index: src/graph/plotX.c =================================================================== RCS file: /home/megrez/cvsroot/pari/src/graph/plotX.c,v retrieving revision 1.7 diff -u -r1.7 plotX.c --- src/graph/plotX.c 2001/03/20 00:03:59 1.7 +++ src/graph/plotX.c 2002/04/15 16:53:15 @@ -136,6 +136,7 @@ long *xtexts[MAX_COLORS],*ytexts[MAX_COLORS]; long rcolcnt[MAX_COLORS][ROt_MAX]; long col,i,j,x0,y0,a,b,oldwidth,oldheight,force; + long do_backing_store; long rcnt[ROt_MAX+1], hjust, vjust, hgap, vgap, hgapsize, vgapsize; char **texts[MAX_COLORS]; PariRect *e; @@ -221,6 +222,7 @@ } screen = DefaultScreen(display); + do_backing_store = DoesBackingStore(ScreenOfDisplay(display,screen))==Always; win = XCreateSimpleWindow (display, RootWindow(display, screen), 0, 0, w_width, w_height, 4, BlackPixel(display, screen), WhitePixel(display, screen)); @@ -248,6 +250,7 @@ gc = XCreateGC(display, win, 0, NULL); XSetFont(display, gc, font_info->fid); + XClearWindow(display, win); XMapWindow(display, win); oldwidth = w_width; oldheight = w_height; force = 1; @@ -286,7 +289,7 @@ /* recompute scale */ xs = ((double)width)/w_width; ys=((double)height)/w_height; } - case Expose: if (!force) break; + case Expose: if ( do_backing_store && !force) break; force = 0; for(i=0; i<lw; i++) {