diff options
author | rsc <devnull@localhost> | 2006-06-25 18:59:29 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2006-06-25 18:59:29 +0000 |
commit | 74dc60da74c62e07f0d63179da9724d705794a6d (patch) | |
tree | bfb0bcf94115ebc5b142c3ad4d80157288ee8368 /src/libdraw/x11-alloc.c | |
parent | 324891a5579d6f504201a6107369c64dab245a98 (diff) | |
download | plan9port-74dc60da74c62e07f0d63179da9724d705794a6d.tar.gz plan9port-74dc60da74c62e07f0d63179da9724d705794a6d.tar.bz2 plan9port-74dc60da74c62e07f0d63179da9724d705794a6d.zip |
bye
Diffstat (limited to 'src/libdraw/x11-alloc.c')
-rw-r--r-- | src/libdraw/x11-alloc.c | 122 |
1 files changed, 0 insertions, 122 deletions
diff --git a/src/libdraw/x11-alloc.c b/src/libdraw/x11-alloc.c deleted file mode 100644 index 5792864f..00000000 --- a/src/libdraw/x11-alloc.c +++ /dev/null @@ -1,122 +0,0 @@ -#include <u.h> -#include "x11-inc.h" -#include <libc.h> -#include <draw.h> -#include <memdraw.h> -#include "x11-memdraw.h" - -/* - * Allocate a Memimage with an optional pixmap backing on the X server. - */ -Memimage* -_xallocmemimage(Rectangle r, u32int chan, int pixmap) -{ - int d, offset; - Memimage *m; - Xmem *xm; - XImage *xi; - - m = _allocmemimage(r, chan); - if(chan != GREY1 && chan != _x.chan) - return m; - if(_x.display == 0) - return m; - - /* - * For bootstrapping, don't bother storing 1x1 images - * on the X server. Memimageinit needs to allocate these - * and we memimageinit before we do the rest of the X stuff. - * Of course, 1x1 images on the server are useless anyway. - */ - if(Dx(r)==1 && Dy(r)==1) - return m; - - xm = mallocz(sizeof(Xmem), 1); - if(xm == nil){ - freememimage(m); - return nil; - } - - /* - * Allocate backing store. - */ - if(chan == GREY1) - d = 1; - else - d = _x.depth; - if(pixmap != PMundef) - xm->pixmap = pixmap; - else - xm->pixmap = XCreatePixmap(_x.display, _x.drawable, Dx(r), Dy(r), d); - - /* - * We want to align pixels on word boundaries. - */ - if(m->depth == 24) - offset = r.min.x&3; - else - offset = r.min.x&(31/m->depth); - r.min.x -= offset; - assert(wordsperline(r, m->depth) <= m->width); - - /* - * Wrap our data in an XImage structure. - */ - xi = XCreateImage(_x.display, _x.vis, d, - ZPixmap, 0, (char*)m->data->bdata, Dx(r), Dy(r), - 32, m->width*sizeof(u32int)); - if(xi == nil){ - freememimage(m); - if(xm->pixmap != pixmap) - XFreePixmap(_x.display, xm->pixmap); - return nil; - } - - xm->xi = xi; - xm->r = r; - - /* - * Set the XImage parameters so that it looks exactly like - * a Memimage -- we're using the same data. - */ - if(m->depth < 8 || m->depth == 24) - xi->bitmap_unit = 8; - else - xi->bitmap_unit = m->depth; - xi->byte_order = LSBFirst; - xi->bitmap_bit_order = MSBFirst; - xi->bitmap_pad = 32; - XInitImage(xi); - XFlush(_x.display); - - m->X = xm; - return m; -} - -Memimage* -allocmemimage(Rectangle r, u32int chan) -{ - return _xallocmemimage(r, chan, PMundef); -} - -void -freememimage(Memimage *m) -{ - Xmem *xm; - - if(m == nil) - return; - - xm = m->X; - if(xm && m->data->ref == 1){ - if(xm->xi){ - xm->xi->data = nil; - XFree(xm->xi); - } - XFreePixmap(_x.display, xm->pixmap); - free(xm); - m->X = nil; - } - _freememimage(m); -} - |