diff options
| author | Keith Packard <keithp@keithp.com> | 2003-11-10 02:03:26 +0000 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2003-11-10 02:03:26 +0000 | 
| commit | e142128ddea840d8140fdd0b28fff121cb2b4598 (patch) | |
| tree | 463cc242451884fc18a7b56ba7f8687e9c641dc8 | |
| parent | Add drop shadows. (diff) | |
| download | xcman-e142128ddea840d8140fdd0b28fff121cb2b4598.tar.gz xcman-e142128ddea840d8140fdd0b28fff121cb2b4598.tar.bz2 xcman-e142128ddea840d8140fdd0b28fff121cb2b4598.tar.xz | |
Detect root pattern with undocumented _XROOTPMAP_ID property
Diffstat (limited to '')
| -rw-r--r-- | ChangeLog | 5 | ||||
| -rw-r--r-- | xcompmgr.c | 54 | 
2 files changed, 54 insertions, 5 deletions
| @@ -1,5 +1,10 @@  2003-11-09  Keith Packard  <keithp@keithp.com> +	* xcompmgr.c: (root_tile), (paint_root): +	Detect root pattern with undocumented _XROOTPMAP_ID property + +2003-11-09  Keith Packard  <keithp@keithp.com> +  	* Makefile:  	* xcompmgr.c: (gaussian), (make_gaussian_map), (sum_gaussian),  	(make_shadow), (shadow_picture), (win_extents), (paint_all), @@ -35,6 +35,7 @@ int		scr;  Window		root;  Picture		rootPicture;  Picture		transPicture; +Picture		rootTile;  XserverRegion	allDamage;  #define WINDOW_PLAIN	0 @@ -285,15 +286,58 @@ find_win (Display *dpy, Window id)      return 0;  } +Picture +root_tile (Display *dpy) +{ +    Picture	    picture; +    Atom	    actual_type; +    Pixmap	    pixmap; +    int		    actual_format; +    unsigned long   nitems; +    unsigned long   bytes_after; +    unsigned char   *prop; +    Bool	    fill; +    XRenderPictureAttributes	pa; + +    if (XGetWindowProperty (dpy, root, XInternAtom (dpy, "_XROOTPMAP_ID", False), +			    0, 4, False, AnyPropertyType, +			    &actual_type, &actual_format, &nitems, &bytes_after, &prop) == Success) +    { +	memcpy (&pixmap, prop, 4); +	XFree (prop); +	fill = False; +    } +    else +    { +	pixmap = XCreatePixmap (dpy, root, 1, 1, DefaultDepth (dpy, scr)); +	fill = True; +    } +    pa.repeat = True; +    picture = XRenderCreatePicture (dpy, pixmap, +				    XRenderFindVisualFormat (dpy, +							     DefaultVisual (dpy, scr)), +				    CPRepeat, &pa); +    if (fill) +    { +	XRenderColor    c; +	 +	c.red = c.green = c.blue = 0x8080; +	c.alpha = 0xffff; +	XRenderFillRectangle (dpy, PictOpSrc, picture, &c,  +			      0, 0, 1, 1); +    } +    return picture; +} +  void  paint_root (Display *dpy)  { -    XRenderColor    c; +    if (!rootTile) +	rootTile = root_tile (dpy); -    c.red = c.green = c.blue = 0x8080; -    c.alpha = 0xffff; -    XRenderFillRectangle (dpy, PictOpSrc, rootPicture, &c,  -			  0, 0, 32767, 32767); +    XRenderComposite (dpy, PictOpSrc, +		      rootTile, None, rootPicture, +		      0, 0, 0, 0, 0, 0, 32767, 32767);  }  XserverRegion | 
