ref: daada088acefc2be3da7a40baec513032dd72b80
parent: 1025d6ab452ace62b65cf4a07f8bb2d8a46bc9fb
author: Yaroslav Kolomiiets <yarikos@gmail.com>
date: Tue Aug 9 11:46:07 EDT 2016
drawer dispatch
--- a/dat.h
+++ b/dat.h
@@ -227,7 +227,6 @@
void finalhandshake(Rdp*);
void drawimgupdate(Rdp*,Share*);
void loadcmap(Rdp*,Share*);
-void draworders(Rdp*,Share*);
enum /* Imgupd.type */
{
@@ -259,9 +258,6 @@
};
int getimgupd(Imgupd*, uchar*, uint);
int getfupd(Imgupd*, uchar*, uint);
-
-void drawmemimg(Rdp*, Imgupd*);
-
enum
{
--- a/draw.c
+++ b/draw.c
@@ -7,18 +7,25 @@
static Image* pad;
static Image* icache[3][600];
-static void drawupd(Rdp*,Imgupd*);
static void padresize(Rdp*);
-/* 2.2.9.1.1.3.1.2.1 Bitmap Update Data (TS_UPDATE_BITMAP_DATA) */
+static void drawupd1(Rdp*,Imgupd*);
+
+
void
drawimgupdate(Rdp *c, Share* s)
{
+ int (*getupd)(Imgupd*, uchar*, uint);
uchar* p, *ep;
int n, nr;
Imgupd u;
+
+ switch(s->type){
+ default: sysfatal("drawimgupdate: bad s->type");
+ case ShUimg: getupd = getimgupd; break;
+ case ShUorders: getupd = getfupd; break;
+ }
- assert(s->type == ShUimg);
p = s->data;
ep = s->data + s->ndata;
nr = s->nr;
@@ -25,11 +32,10 @@
if(display->locking)
lockdisplay(display);
-
while(p<ep && nr>0){
- if((n = getimgupd(&u, p, ep-p)) < 0)
+ if((n = getupd(&u, p, ep-p)) < 0)
sysfatal("getimgupd: %r");
- drawupd(c, &u);
+ drawupd1(c, &u);
p += n;
nr--;
}
@@ -38,31 +44,6 @@
unlockdisplay(display);
}
-/* 2.2.2.2 Fast-Path Orders Update (TS_FP_UPDATE_ORDERS) */
-void
-draworders(Rdp* c, Share* as)
-{
- int n, count;
- uchar *p, *ep;
- Imgupd u;
-
- count = as->nr;
- p = as->data;
- ep = as->data + as->ndata;
-
- if(display->locking)
- lockdisplay(display);
- while(count> 0 && p<ep){
- n = getfupd(&u, p, ep-p);
- drawupd(c, &u);
- p += n;
- count--;
- }
- flushimage(display, 1);
- if(display->locking)
- unlockdisplay(display);
-}
-
static void
padresize(Rdp* c)
{
@@ -100,32 +81,6 @@
draw(screen, r, pad, nil, r.min);
}
-void
-drawmemimg(Rdp*, Imgupd* iu)
-{
- Image* img;
- Rectangle r;
- Point pt;
-
- /* called with display locked */
-
- if(iu->cid >= nelem(icache) || iu->coff >= nelem(*icache)){
- fprint(2, "drawmemimg: bad cache spec [%d %d]\n", iu->cid, iu->coff);
- return;
- }
- img = icache[iu->cid][iu->coff];
- if(img == nil){
- fprint(2, "drawmemimg: empty cache entry cid %d coff %d\n", iu->cid, iu->coff);
- return;
- }
-
- r = Rect(iu->x, iu->y, iu->xm+1, iu->ym+1);
- r = rectaddpt(r, screen->r.min);
- pt = Pt(iu->sx, iu->sy);
- draw(screen, r, img, nil, pt);
-}
-
-
static void
scrblt(Rdp*, Imgupd* up)
{
@@ -138,11 +93,30 @@
}
static void
-memblt(Rdp* c, Imgupd* up)
+memblt(Rdp*, Imgupd* up)
{
+ Image* img;
+ Rectangle r;
+ Point pt;
+
+ if(up->cid >= nelem(icache) || up->coff >= nelem(*icache)){
+ fprint(2, "drawmemimg: bad cache spec [%d %d]\n", up->cid, up->coff);
+ return;
+ }
+ img = icache[up->cid][up->coff];
+ if(img == nil){
+ fprint(2, "drawmemimg: empty cache entry cid %d coff %d\n", up->cid, up->coff);
+ return;
+ }
+
if(up->clipped)
replclipr(screen, screen->repl, rectaddpt(up->clipr, screen->r.min));
- drawmemimg(c, up);
+
+ r = Rect(up->x, up->y, up->xm+1, up->ym+1);
+ r = rectaddpt(r, screen->r.min);
+ pt = Pt(up->sx, up->sy);
+ draw(screen, r, img, nil, pt);
+
if(up->clipped)
replclipr(screen, screen->repl, screen->r);
}
@@ -183,7 +157,7 @@
}
static void
-drawupd(Rdp* c, Imgupd* up)
+drawupd1(Rdp* c, Imgupd* up)
{
switch(up->type){
case Ubitmap: imgupd(c, up); break;
--- a/rpc.c
+++ b/rpc.c
@@ -444,8 +444,6 @@
c->hupreason = u.err;
break;
case ShUorders:
- draworders(c, &u);
- break;
case ShUimg:
drawimgupdate(c, &u);
break;