Path: utzoo!attcan!uunet!mcsun!inria!lri!mbl From: mbl@lri.lri.fr (Lafon) Newsgroups: comp.windows.x Subject: R5 wish list Message-ID: <1963@lri.lri.fr> Date: 27 Jul 90 16:30:36 GMT Organization: LRI, Orsay - France Lines: 75 We have developped two generations of graphical libraries on top of several window systems, including X10 and X11. These libraries have been used in various applications (iconic shell, animation, drawing tool, interface builder). So based on this experience, here is our wish list for R5 : - outline fonts (already asked for) - downloadable fonts (already asked for) - load pixmaps by name - support for input devices and hard cursors - regions in the server - 'translucence' value in the GC - load pixmaps by name Downloading huge pixmaps (eg. root background) over the connection is slow. Creating a pixmap from a name as this is done now for fonts avoids this (with a pixmap path similar to the font path). Combined with downloadable fonts, this makes a complete set of primitives: dowload font / pixmap load font / pixmap by name - support for input devices and hard cursors: This is already more or less in the 'input extension'. However it lacks support for cursor tracking: if I have a tablet whose focus is a window, I'd like the server to maintain a cursor for it. Doing this in the client is expensive and cannot be transparent to the application, unless overlay planes are supported. On the other hand, it looks quite easy to have multiple cursors in the server. Furthermore, it would be great to have several hard cursor feedback types in the server, like rubber-band/rubber-box/cross-hair etc. Lots of clients track mouse moves only for dragging around a rectangle. Semantically, a rubber-band is very similar to a cursor pattern, and thus should be available at the very low level of the graphics system. Moreover, some machines have hardware support for such things. - regions in the server: Regions are currently managed inside Xlib. With regions in the server, we could have a much nicer handling of expose events: only one expose event would be sent, with a rectangle corresponding to the bounding rectangle of the region, and the region ID of the actual region to repaint (that regin would be in the server). The client can retrieve the region by a request to the server. More likely, it will set that region ID in the GC and will start redrawing. Today, the client has to get a bunch of expose events, build the region, set the GC clip member to it, and then redraw. This involves two passing of the region (server->client in the expose events, and client->server in the GC). Moreover, if the client uses several GC's, it has to set the clip region as many times. An alternative would be to have a clip region by window (in addition to the clip region of the GC). In a graphic library we are developping, we have found by profiling that having the clip region in the GC and repeatedly transferring it over the net was the major performance flaw. - 'translucence' value in the GC: Drawing with a non opaque color on a drawable requires a lot of traffic between a client and a server. Typically, it requires the client to keep a copy of the lookup table, and all the calculations of the color values should be done in the application. This would be much easier to do inside the server. A 'translucence' field in the GC (varying from 0 to 1) would enable this: Drawing over a drawable would result in averaging the RGB values of the painted bits, the averaging being weighted by the value of the 'translucence'. - As a last goodie, we'd like the CopyPlane primitive to take a bitmap mask (this did exist in X10, and was invaluable for drawing icons). Drawing an icon properly in X11 involves 3 Copy operations! We also miss the transparent windows of X10 (versus input-only windows in X11). ___ 0 Michel Beaudouin-Lafon uucp : mbl@lri.lri.fr / \ / LRI - Bat 490 bitnet: mbl@FRLRI61.bitnet / __/ / Universite de Paris-Sud voice : +33 (1) 69 41 69 10 /__ \/ F-91405 ORSAY Cedex +33 (1) 69 41 66 29