Introduction
Introduction Statistics Contact Development Disclaimer Help
bitblt.c - sam - An updated version of the sam text editor.
git clone git://vernunftzentrum.de/sam.git
Log
Files
Refs
LICENSE
---
bitblt.c (1958B)
---
1 /* Copyright (c) 1998 Lucent Technologies - All rights reserved. */
2 #include <u.h>
3 #include <libg.h>
4 #include "libgint.h"
5
6 void
7 bitblt(Bitmap *d, Point p, Bitmap *s, Rectangle r, Fcode f)
8 {
9 bitblt2(d, p, s, r, f, _fgpixel, _bgpixel);
10 }
11
12 void
13 bitblt2(Bitmap *d, Point p, Bitmap *s, Rectangle r, Fcode f, uint64_t fg…
14 {
15 int sx, sy, dx, dy, bfunc;
16 GC g;
17 uint64_t plane;
18 Bitmap *btmp;
19
20 if (fg == 0)
21 fg = _fgpixel;
22
23 if (bg == 0)
24 bg = _bgpixel;
25
26 if(Dx(r)<=0 || Dy(r)<=0)
27 return;
28 sx = r.min.x;
29 sy = r.min.y;
30 if(s->flag&SHIFT){
31 sx -= s->r.min.x;
32 sy -= s->r.min.y;
33 }
34 dx = p.x;
35 dy = p.y;
36 if(d->flag&SHIFT){
37 dx -= d->r.min.x;
38 dy -= d->r.min.y;
39 }
40 g = _getcopygc2(f, d, s, &bfunc, fg, bg);
41 if(bfunc == UseCopyArea)
42 XCopyArea(_dpy, (Drawable)s->id, (Drawable)d->id, g,
43 sx, sy, Dx(r), Dy(r), dx, dy);
44 else if(bfunc == UseFillRectangle){
45 XFillRectangle(_dpy, (Drawable)d->id, g,
46 dx, dy, Dx(r), Dy(r));
47 }else{
48 /* bfunc == UseCopyPlane */
49 plane = _ld2dmask[s->ldepth];
50 plane &= ~(plane>>1);
51 if(0/*f == S*/)
52 XCopyPlane(_dpy, (Drawable)s->id, (Drawable)d->id, g,
53 sx, sy, Dx(r), Dy(r), dx, dy, plane);
54 else {
55 /*
56 * CopyPlane can only do func code S,
57 * so copy src rect into a bitmap with the same depth
58 * as the dest, then do the bitblt from the tmp.
59 * This won't recurse again because we only get
60 * UseCopyPlane with differing bitmap depths
61 */
62 btmp = _balloc(Rect(0,0,Dx(r),Dy(r)), d->ldepth);
63 XCopyPlane(_dpy, (Drawable)s->id, (Drawable)btmp->id, g,
64 sx, sy, Dx(r), Dy(r), 0, 0, plane);
65 bitblt(d, p, btmp, btmp->r, f);
66 bfree(btmp);
67 }
68 }
69 XFlush(_dpy);
70 }
You are viewing proxied material from vernunftzentrum.de. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.