ref: aab506c9903a54bb77d7978ef09c1307d9aacabc
parent: ccbeff91e1abb205033015ca6602f94908d97556
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Thu Aug 9 00:02:10 EDT 2012
libdraw: improve handling of screen clipr
--- a/sys/src/libdraw/eenter.c
+++ b/sys/src/libdraw/eenter.c
@@ -23,9 +23,6 @@
while(ecankbd())
ekbd();
- sc = screen->clipr;
- replclipr(screen, 0, screen->r);
-
if(m) o = m->xy;
if(buf && len > 0)
@@ -37,7 +34,6 @@
}
k = -1;
- b = screen;
tick = n;
save = nil;
done = down = 0;
@@ -46,6 +42,10 @@
h = p.y;
w = p.x;
+ b = screen;
+ sc = b->clipr;
+ replclipr(b, 0, b->r);
+
while(!done){p = stringsize(font, buf ? buf : "");
if(ask && ask[0]){@@ -98,7 +98,20 @@
i = Ekeyboard;
if(m != nil)
i |= Emouse;
- switch(eread(i, &ev)){+
+ replclipr(b, 0, sc);
+ i = eread(i, &ev);
+
+ /* screen might have been resized */
+ if(b != screen || !eqrect(screen->clipr, sc)){+ freeimage(save);
+ save = nil;
+ }
+ b = screen;
+ sc = b->clipr;
+ replclipr(b, 0, b->r);
+
+ switch(i){default:
done = 1;
n = -1;
@@ -183,13 +196,14 @@
done = down;
break;
}
-
- draw(b, save->r, save, nil, save->r.min);
- freeimage(save);
- save = nil;
+ if(save){+ draw(b, save->r, save, nil, save->r.min);
+ freeimage(save);
+ save = nil;
+ }
}
- replclipr(screen, 0, sc);
+ replclipr(b, 0, sc);
freeimage(backcol);
freeimage(bordcol);
--
⑨