wrbitmap.c - sam - An updated version of the sam text editor.
(HTM) git clone git://vernunftzentrum.de/sam.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
wrbitmap.c (1439B)
---
1 /* Copyright (c) 1998 Lucent Technologies - All rights reserved. */
2 #include <u.h>
3 #include <libg.h>
4 #include "libgint.h"
5 #include <X11/Intrinsic.h>
6
7 #include <stdio.h>
8 void
9 wrbitmap(Bitmap *b, int miny, int maxy, unsigned char *data)
10 {
11 XImage *im;
12 int w, h, inld, outld, l, offset, px;
13 GC g;
14 char *tdata;
15
16 w = Dx(b->r);
17 h = maxy - miny;
18 inld = b->ldepth;
19 outld = (b->ldepth == 0) ? 0 : screen.ldepth;
20 px = 1<<(3-outld); /* pixels per byte */
21 /* set l to number of bytes of data per scan line */
22 if(b->r.min.x >= 0)
23 offset = b->r.min.x % px;
24 else
25 offset = px - b->r.min.x % px;
26 l = (-b->r.min.x+px-1)/px;
27 if(b->r.max.x >= 0)
28 l += (b->r.max.x+px-1)/px;
29 else
30 l -= b->r.max.x/px;
31 l *= h;
32
33 tdata = (char *)malloc(l);
34 if (tdata == (char *) 0)
35 berror("wrbitmap malloc");
36 if (inld == outld)
37 memcpy((void*)tdata, (void*)data, l);
38 else
39 _ldconvert((char*)data, inld, tdata, outld, w, h);
40
41 im = XCreateImage(_dpy, 0, 1 << outld, ZPixmap, 0, tdata, w, h, 8, 0);
42
43 /* Botched interface to XCreateImage doesn't let you set these: */
44 im->bitmap_bit_order = MSBFirst;
45 im->byte_order = MSBFirst;
46
47 g = _getfillgc(S, b, ~0);
48 XSetBackground(_dpy, g, b->flag&DP1 ? 0 : _bgpixel);
49 XPutImage(_dpy, (Drawable)b->id, g, im, offset, 0, 0, miny - b->r.min.y, w-offset, h);
50 XDestroyImage(im);
51 }