aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/acme/cols.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-12-16 15:12:38 +0000
committerrsc <devnull@localhost>2005-12-16 15:12:38 +0000
commit20ae0b0fc25448245b75e0bd7b30b2fd29525165 (patch)
treea4f7b7353c6ad410a5bbb1c5902304f780fdc354 /src/cmd/acme/cols.c
parent9881c00260e55f2994ca16229cf89a7929293e49 (diff)
downloadplan9port-20ae0b0fc25448245b75e0bd7b30b2fd29525165.tar.gz
plan9port-20ae0b0fc25448245b75e0bd7b30b2fd29525165.tar.bz2
plan9port-20ae0b0fc25448245b75e0bd7b30b2fd29525165.zip
Better window size management.
Diffstat (limited to 'src/cmd/acme/cols.c')
-rw-r--r--src/cmd/acme/cols.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/cmd/acme/cols.c b/src/cmd/acme/cols.c
index f375404f..487931ec 100644
--- a/src/cmd/acme/cols.c
+++ b/src/cmd/acme/cols.c
@@ -53,7 +53,7 @@ coladd(Column *c, Window *w, Window *clone, int y)
{
Rectangle r, r1;
Window *v;
- int i, t;
+ int i, j, minht, t;
v = nil;
r = c->r;
@@ -74,15 +74,27 @@ coladd(Column *c, Window *w, Window *clone, int y)
/*
* if v's too small, grow it first.
*/
- if(!c->safe || v->body.fr.maxlines<=3){
+ minht = v->tag.fr.font->height+Border+1;
+ j = 0;
+ while(!c->safe || v->body.fr.maxlines<=3 || Dy(v->body.all) <= minht){
+ if(++j > 10){
+fprint(2, "oops: dy=%d\n", Dy(v->body.all));
+ break;
+ }
+ if(j > 1)
+fprint(2, "regrow\n");
colgrow(c, v, 1);
- y = v->body.fr.r.min.y+Dy(v->body.fr.r)/2;
}
- r = v->r;
if(i == c->nw)
t = c->r.max.y;
else
t = c->w[i]->r.min.y-Border;
+ y = v->body.all.min.y+Dy(v->body.all)/2;
+ if(t - y < minht)
+ y = t - minht;
+ if(y < v->body.all.min.y)
+ y = v->body.all.min.y;
+ r = v->r;
r.max.y = t;
draw(screen, r, textcols[BACK], nil, ZP);
r1 = r;
@@ -209,6 +221,8 @@ colresize(Column *c, Rectangle r)
r1.max.y = r.max.y;
else
r1.max.y = r1.min.y+(Dy(w->r)+Border)*Dy(r)/Dy(c->r);
+ if(Dy(r1) < Border+font->height)
+ r1.max.y = r1.min.y + Border+font->height;
r2 = r1;
r2.max.y = r2.min.y+Border;
draw(screen, r2, display->black, nil, ZP);