diff options
| author | bhgv <bhgv.empire@gmail.com> | 2018-03-20 12:12:17 +0200 |
|---|---|---|
| committer | bhgv <bhgv.empire@gmail.com> | 2018-03-20 12:12:17 +0200 |
| commit | 72f4c783fffbb4f8ec3a65cf23ad4a28e488bfaa (patch) | |
| tree | f4478fdf317b1015c5f76861d09826266282a677 | |
| parent | 6be8314bcc624a6cd8a3848dd0424fbac74ffc6d (diff) | |
checked mntversion. some preparing for clutter
| -rw-r--r-- | emu/port/devmnt.c | 11 | ||||
| -rw-r--r-- | libdraw/window.c | 5 | ||||
| -rw-r--r-- | libinterp/tk.c | 2 | ||||
| -rw-r--r-- | libmemdraw/hwdraw.c | 42 | ||||
| -rw-r--r-- | libmemlayer/draw.c | 4 |
5 files changed, 56 insertions, 8 deletions
diff --git a/emu/port/devmnt.c b/emu/port/devmnt.c index 327ec67..242a10d 100644 --- a/emu/port/devmnt.c +++ b/emu/port/devmnt.c @@ -148,14 +148,16 @@ mntversion(Chan *c, char *version, int msize, int returnlen) f.tag = NOTAG; f.msize = msize; f.version = v; - msg = malloc(8192+IOHDRSZ); +// msg = malloc(8192+IOHDRSZ); + msg = malloc(msize); if(msg == nil) exhausted("version memory"); if(waserror()){ free(msg); nexterror(); } - k = convS2M(&f, msg, 8192+IOHDRSZ); +// k = convS2M(&f, msg, 8192+IOHDRSZ); + k = convS2M(&f, msg, msize); if(k == 0) error("bad fversion conversion on send"); @@ -174,7 +176,8 @@ mntversion(Chan *c, char *version, int msize, int returnlen) } /* message sent; receive and decode reply */ - k = devtab[c->type]->read(c, msg, 8192+IOHDRSZ, c->offset); +// k = devtab[c->type]->read(c, msg, 8192+IOHDRSZ, c->offset); + k = devtab[c->type]->read(c, msg, msize, c->offset); if(k <= 0) error("EOF receiving fversion reply"); @@ -192,7 +195,7 @@ mntversion(Chan *c, char *version, int msize, int returnlen) } if(f.msize > msize) error("server tries to increase msize in fversion"); - if(f.msize<256 || f.msize>1024*1024) + if(f.msize<256 || f.msize>5*1024*1024) error("nonsense value of msize in fversion"); if(strncmp(f.version, v, strlen(f.version)) != 0) error("bad 9P version returned from server"); diff --git a/libdraw/window.c b/libdraw/window.c index 31b9912..4428431 100644 --- a/libdraw/window.c +++ b/libdraw/window.c @@ -103,7 +103,10 @@ freescreen(Screen *s) Image* allocwindow(Screen *s, Rectangle r, int ref, ulong val) { - return _allocwindow(nil, s, r, ref, val); + Image *i = _allocwindow(nil, s, r, ref, val); + if(i) + attachtowindow(i); + return i; } Image* diff --git a/libinterp/tk.c b/libinterp/tk.c index e0ea728..ea69175 100644 --- a/libinterp/tk.c +++ b/libinterp/tk.c @@ -1170,7 +1170,7 @@ tkputwinimage(Tk *tk, Draw_Image *di, int reqid) if(reqid != -1 && reqid < tkw->reqid) return "!request out of date"; - attachtowindow(i); +// attachtowindow(i); bw2 = 2*tk->borderwidth; req.min.x = tkw->req.x; diff --git a/libmemdraw/hwdraw.c b/libmemdraw/hwdraw.c index f74e4bb..cee4823 100644 --- a/libmemdraw/hwdraw.c +++ b/libmemdraw/hwdraw.c @@ -3,9 +3,47 @@ #include "memdraw.h" int -hwdraw(Memdrawparam *p) +hwdraw(Memdrawparam *par) { - USED(p); +// USED(par); + int m, y, dy, dx, op; + ulong v; + Memimage *src; + Memimage *dst; + void *ext_win; + + dx = Dx(par->r); + dy = Dy(par->r); + src = par->src; + dst = par->dst; + + ext_win = dst->ext_win; + + if(ext_win){ + uchar *sp, *dp; + long swid, dwid, nb; + int dir; + + print(">>> dst=%x, ext_win=%x, w=%d, h=%d\n", dst, ext_win, Dx(dst->r), Dy(dst->r)); +#ifdef CLUTTER + swid = src->width*sizeof(ulong); +// dwid = dst->width*sizeof(ulong); + sp = byteaddr(src, par->sr.min); +// dp = byteaddr(dst, par->r.min); +// if(dir == -1){ +// sp += (dy-1)*swid; +// dp += (dy-1)*dwid; +// swid = -swid; +// dwid = -dwid; +// } + nb = (dx*src->depth)/8; +// for(y=0; y<dy; y++, sp+=swid, dp+=dwid) +// memmove(dp, sp, nb); + + clutter_ext_win_draw(par->r.min.x, par->r.min.y, sp, nb, dy, swid); + return 1; +#endif + } return 0; /* could not satisfy request */ } diff --git a/libmemlayer/draw.c b/libmemlayer/draw.c index 94110d6..413c7bc 100644 --- a/libmemlayer/draw.c +++ b/libmemlayer/draw.c @@ -91,12 +91,16 @@ if(drawdebug) iprint("drawclip dstcr %R srccr %R maskcr %R\n", dst->clipr, src-> } Clearlayer: if(dl!=nil && dl->clear){ + void *ext_win; + if(src == dst){ p0.x += dl->delta.x; p0.y += dl->delta.y; src = dl->screen->image; } + ext_win = dst->ext_win; dst = dl->screen->image; + dst->ext_win = ext_win; goto Top; } |
