libdraw: improve handling of screen clipr
This commit is contained in:
parent
e5ea2d5151
commit
5cbae621a5
1 changed files with 24 additions and 10 deletions
|
@ -23,9 +23,6 @@ eenter(char *ask, char *buf, int len, Mouse *m)
|
|||
while(ecankbd())
|
||||
ekbd();
|
||||
|
||||
sc = screen->clipr;
|
||||
replclipr(screen, 0, screen->r);
|
||||
|
||||
if(m) o = m->xy;
|
||||
|
||||
if(buf && len > 0)
|
||||
|
@ -37,7 +34,6 @@ eenter(char *ask, char *buf, int len, Mouse *m)
|
|||
}
|
||||
|
||||
k = -1;
|
||||
b = screen;
|
||||
tick = n;
|
||||
save = nil;
|
||||
done = down = 0;
|
||||
|
@ -46,6 +42,10 @@ eenter(char *ask, char *buf, int len, Mouse *m)
|
|||
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 @@ eenter(char *ask, char *buf, int len, Mouse *m)
|
|||
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 @@ eenter(char *ask, char *buf, int len, Mouse *m)
|
|||
done = down;
|
||||
break;
|
||||
}
|
||||
|
||||
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);
|
||||
|
|
Loading…
Reference in a new issue