aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbhgv <bhgv.empire@gmail.com>2018-03-20 12:12:17 +0200
committerbhgv <bhgv.empire@gmail.com>2018-03-20 12:12:17 +0200
commit72f4c783fffbb4f8ec3a65cf23ad4a28e488bfaa (patch)
treef4478fdf317b1015c5f76861d09826266282a677
parent6be8314bcc624a6cd8a3848dd0424fbac74ffc6d (diff)
checked mntversion. some preparing for clutter
-rw-r--r--emu/port/devmnt.c11
-rw-r--r--libdraw/window.c5
-rw-r--r--libinterp/tk.c2
-rw-r--r--libmemdraw/hwdraw.c42
-rw-r--r--libmemlayer/draw.c4
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;
}