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())
|
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);
|
||||||
|
|
Loading…
Reference in a new issue