ref: 685fce9942b9f9f877ba36db91bf8ef1e20f8254
parent: e8e42318371ad89d7b048a3a05d3c57aed8fc0fd
author: glenda <glenda@cirno>
date: Thu Mar 20 21:31:07 EDT 2025
preserve window contents when resizing (weird over drawterm)
--- a/rio.c
+++ b/rio.c
@@ -1018,12 +1018,14 @@
Image*
bandsize(Window *w)
{
- Rectangle r, or;
+ Rectangle r, or, origr;
Point p, startp;
int which, owhich, but;
+ Image *tmp;
owhich = -1;
or = w->screenr;
+ origr = or;
but = mouse->buttons;
startp = onscreen(mouse->xy);
drawborder(or, sizecol);
@@ -1036,6 +1038,10 @@
}
r = whichrect(or, p, owhich);
if(!eqrect(r, or) && goodrect(r)){
+ tmp = allocwindow(wscreen, r, Refnone, DNofill);
+ if(tmp != nil){
+ wsendctlmesg(w, Reshaped, r, tmp);
+ }
drawborder(r, sizecol);
or = r;
}
@@ -1044,14 +1050,20 @@
drawborder(or, nil);
if(!goodrect(or))
riosetcursor(nil);
- if(mouse->buttons!=0 || !goodrect(or) || eqrect(or, w->screenr)
+
+ if(mouse->buttons!=0 || !goodrect(or) || eqrect(or, origr)
|| abs(p.x-startp.x)+abs(p.y-startp.y) <= 1){
+ tmp = allocwindow(wscreen, origr, Refnone, DNofill);
+ if(tmp == nil)
+ error("bandsize: can't restore window");
+ wsendctlmesg(w, Reshaped, origr, tmp);
flushimage(display, 1);
while(mouse->buttons)
readmouse(mousectl);
return nil;
}
- return allocwindow(wscreen, or, Refbackup, DNofill);
+
+ return allocwindow(wscreen, r, Refbackup, DNofill);
}
Window*