libdraw: improve handling of screen clipr

This commit is contained in:
cinap_lenrek 2012-08-09 04:02:10 +02:00
parent e5ea2d5151
commit 5cbae621a5

View file

@ -23,9 +23,6 @@ eenter(char *ask, char *buf, int len, Mouse *m)
while(ecankbd()) while(ecankbd())
ekbd(); ekbd();
sc = screen->clipr;
replclipr(screen, 0, screen->r);
if(m) o = m->xy; if(m) o = m->xy;
if(buf && len > 0) if(buf && len > 0)
@ -37,7 +34,6 @@ eenter(char *ask, char *buf, int len, Mouse *m)
} }
k = -1; k = -1;
b = screen;
tick = n; tick = n;
save = nil; save = nil;
done = down = 0; done = down = 0;
@ -46,6 +42,10 @@ eenter(char *ask, char *buf, int len, Mouse *m)
h = p.y; h = p.y;
w = p.x; w = p.x;
b = screen;
sc = b->clipr;
replclipr(b, 0, b->r);
while(!done){ while(!done){
p = stringsize(font, buf ? buf : ""); p = stringsize(font, buf ? buf : "");
if(ask && ask[0]){ if(ask && ask[0]){
@ -98,7 +98,20 @@ eenter(char *ask, char *buf, int len, Mouse *m)
i = Ekeyboard; i = Ekeyboard;
if(m != nil) if(m != nil)
i |= Emouse; 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: default:
done = 1; done = 1;
n = -1; n = -1;
@ -183,13 +196,14 @@ eenter(char *ask, char *buf, int len, Mouse *m)
done = down; done = down;
break; break;
} }
if(save){
draw(b, save->r, save, nil, save->r.min); draw(b, save->r, save, nil, save->r.min);
freeimage(save); freeimage(save);
save = nil; save = nil;
} }
}
replclipr(screen, 0, sc); replclipr(b, 0, sc);
freeimage(backcol); freeimage(backcol);
freeimage(bordcol); freeimage(bordcol);