ref: 5296a39c42a2801fc3e88d36b9b709eea44b5b0e
parent: d64f31c9862f2ab9b779dd9bd5c3363d6764c650
author: Yaroslav Kolomiiets <[email protected]>
date: Mon Aug 8 11:40:21 EDT 2016
add scroll() func
--- a/draw.c
+++ b/draw.c
@@ -56,3 +56,14 @@
if(display->locking)
unlockdisplay(display);
}
+
+void
+scroll(Display* d, Rectangle r, Rectangle sr)
+{
+ if(d && d->locking)
+ lockdisplay(d);
+ if(d)
+ draw(d->screenimage, r, d->screenimage, nil, sr.min);
+ if(d && d->locking)
+ unlockdisplay(d);
+}
--- a/egdi.c
+++ b/egdi.c
@@ -295,33 +295,26 @@
static uchar*
scrblt(Rdp*, uchar* p, uchar* ep, int ctl, int fmask)
{
- static Rectangle r;
- static Point pt;
- static int rop3;
- Rectangle rs;
- Point ps;
+ static Rectangle wr;
+ static Point wp;
+ static int rop3;
+ Rectangle r, sr;
- p = getoffrect(&r, p, ep, ctl, fmask);
+ p = getoffrect(&wr, p, ep, ctl, fmask);
if(fmask&1<<4)
rop3 = *p++;
- p = getpt(&pt, p, ep, ctl, fmask>>5);
+ p = getpt(&wp, p, ep, ctl, fmask>>5);
+ if(ctl&Clipped)
+ rectclip(&wr, gc.clipr);
if(rop3 != ROP2_COPY){
fprint(2, "scrblt: rop3 %#hhux is not supported\n", rop3);
return p;
}
- rs = r;
- if(ctl&Clipped)
- rectclip(&rs, gc.clipr); // not replclipr: need to clip dst only
- rs = rectaddpt(rs, screen->r.min);
- ps = addpt(pt, screen->r.min);
- if(display->locking)
- lockdisplay(display);
- draw(screen, rs, screen, nil, ps);
- if(display->locking)
- unlockdisplay(display);
-
+ r = rectaddpt(wr, screen->r.min);
+ sr = rectaddpt(Rpt(wp, Pt(Dx(r), Dy(r))), screen->r.min);
+ scroll(display, r, sr);
return p;
}
--- a/fns.h
+++ b/fns.h
@@ -53,3 +53,5 @@
void pbshort(uchar*,int);
uchar* putsdh(uchar*,uchar*,int,int,int,int);
+
+void scroll(Display*, Rectangle, Rectangle);