Mercurial > aewl
comparison view.c @ 507:2824b5d0f0f0
prelim of dotile()
author | Anselm R. Garbe <arg@10kloc.org> |
---|---|
date | Fri, 29 Sep 2006 14:39:03 +0200 |
parents | 2c29d74b11dc |
children | ede48935f2b3 |
comparison
equal
deleted
inserted
replaced
506:b467b5a749db | 507:2824b5d0f0f0 |
---|---|
97 restack(); | 97 restack(); |
98 } | 98 } |
99 | 99 |
100 /* This algorithm is based on a (M)aster area and a (S)tacking area. | 100 /* This algorithm is based on a (M)aster area and a (S)tacking area. |
101 * It supports following arrangements: | 101 * It supports following arrangements: |
102 * MMMS MMMM SMMM | 102 * SSMMM MMMMM MMMSS |
103 * MMMS MMMM SMMM | 103 * SSMMM SSSSS MMMSS |
104 * MMMS SSSS SMMM | |
105 */ | 104 */ |
106 void | 105 void |
107 dotile(Arg *arg) { | 106 dotile(Arg *arg) { |
108 int h, i, n, w; | 107 int i, n, stackw, stackh, tw, th; |
109 Client *c; | 108 Client *c; |
110 | 109 |
111 for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) | 110 for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) |
112 n++; | 111 n++; |
113 | 112 |
113 if(stackpos == StackBottom) { | |
114 stackw = sw; | |
115 stackh = sh - bh - master; | |
116 } | |
117 else { | |
118 stackw = sw - master; | |
119 stackh = sh - bh; | |
120 } | |
121 | |
114 if(isvertical) { | 122 if(isvertical) { |
115 if(stackpos == StackBottom) { | 123 tw = stackw; |
116 w = sw; | 124 if(n > 1) |
117 if(n > 1) | 125 th = stackh / (n - 1); |
118 h = (sh - bh) / (n - 1); | 126 else |
119 else | 127 th = stackh; |
120 h = sh - bh; | 128 } |
121 } | 129 else { |
122 else { | 130 th = stackh; |
123 w = sw - master; | 131 if(n > 1) |
124 if(n > 1) | 132 tw = stackw / (n - 1); |
125 h = (sh - bh) / (n - 1); | 133 else |
126 else | 134 tw = stackw; |
127 h = sh - bh; | |
128 } | |
129 } | |
130 else { /* horizontal stack */ | |
131 | |
132 } | 135 } |
133 | 136 |
134 for(i = 0, c = clients; c; c = c->next) { | 137 for(i = 0, c = clients; c; c = c->next) { |
135 if(isvisible(c)) { | 138 if(isvisible(c)) { |
136 if(c->isfloat) { | 139 if(c->isfloat) { |
137 resize(c, True, TopLeft); | 140 resize(c, True, TopLeft); |
138 continue; | 141 continue; |
139 } | 142 } |
140 c->ismax = False; | 143 c->ismax = False; |
141 if(n == 1) { | 144 if(n == 1) { /* only 1 window */ |
142 c->x = sx; | 145 c->x = sx; |
143 c->y = sy + bh; | 146 c->y = sy + bh; |
144 c->w = sw - 2 * BORDERPX; | 147 c->w = sw - 2 * BORDERPX; |
145 c->h = sh - 2 * BORDERPX - bh; | 148 c->h = sh - 2 * BORDERPX - bh; |
146 } | 149 } |
147 else if(i == 0) { | 150 else if(i == 0) { /* master window */ |
151 c->x = sx; | |
152 if(stackpos == StackLeft) | |
153 c->x += master; | |
154 c->y = sy + bh; | |
155 if(isvertical) { | |
156 c->w = master - 2 * BORDERPX; | |
157 c->h = sh - 2 * BORDERPX - bh; | |
158 } | |
159 else { | |
160 c->w = sw; | |
161 c->h = master - 2 * BORDERPX; | |
162 } | |
163 } | |
164 else if((isvertical && th > bh) || (!isvertical && tw > MINW)) { | |
165 /* tile window */ | |
166 c->x = sx; | |
167 if(isvertical) | |
168 c->y = sy + (i - 1) * th + bh; | |
169 else | |
170 c->y = sy + bh; | |
171 if(stackpos == StackRight) | |
172 c->x += master; | |
173 else if(stackpos == StackBottom) | |
174 c->y += master; | |
175 c->w = tw - 2 * BORDERPX; | |
176 c->h = th - 2 * BORDERPX; | |
177 if(i + 1 == n) { /* fixes for last tile to take up rest space */ | |
178 if(isvertical) | |
179 c->h = sh - c->y - 2 * BORDERPX; | |
180 else { | |
181 if(stackpos == StackLeft) | |
182 c->w = master - c->x - 2 * BORDERPX; | |
183 else | |
184 c->w = sw - c->x - 2 * BORDERPX; | |
185 } | |
186 } | |
187 } | |
188 else { /* fallback if th < bh resp. tw < MINW */ | |
148 c->x = sx; | 189 c->x = sx; |
149 c->y = sy + bh; | 190 c->y = sy + bh; |
150 c->w = master - 2 * BORDERPX; | 191 if(stackpos == StackRight) |
151 c->h = sh - 2 * BORDERPX - bh; | 192 c->x += master; |
152 } | 193 else if(stackpos == StackBottom) |
153 else if(h > bh) { | 194 c->y += master; |
154 c->x = sx + master; | 195 c->w = stackw - 2 * BORDERPX; |
155 c->y = sy + (i - 1) * h + bh; | 196 c->h = stackh - 2 * BORDERPX; |
156 c->w = w - 2 * BORDERPX; | |
157 if(i + 1 == n) | |
158 c->h = sh - c->y - 2 * BORDERPX; | |
159 else | |
160 c->h = h - 2 * BORDERPX; | |
161 } | |
162 else { /* fallback if h < bh */ | |
163 c->x = sx + master; | |
164 c->y = sy + bh; | |
165 c->w = w - 2 * BORDERPX; | |
166 c->h = sh - 2 * BORDERPX - bh; | |
167 } | 197 } |
168 resize(c, False, TopLeft); | 198 resize(c, False, TopLeft); |
169 i++; | 199 i++; |
170 } | 200 } |
171 else | 201 else |
230 n++; | 260 n++; |
231 if(!sel || sel->isfloat || n < 2 || (arrange == dofloat)) | 261 if(!sel || sel->isfloat || n < 2 || (arrange == dofloat)) |
232 return; | 262 return; |
233 | 263 |
234 if(sel == getnext(clients)) { | 264 if(sel == getnext(clients)) { |
235 if(master + arg->i > sw - 100 || master + arg->i < 100) | 265 if(master + arg->i > sw - MINW || master + arg->i < MINW) |
236 return; | 266 return; |
237 master += arg->i; | 267 master += arg->i; |
238 } | 268 } |
239 else { | 269 else { |
240 if(master - arg->i > sw - 100 || master - arg->i < 100) | 270 if(master - arg->i > sw - MINW || master - arg->i < MINW) |
241 return; | 271 return; |
242 master -= arg->i; | 272 master -= arg->i; |
243 } | 273 } |
244 arrange(NULL); | 274 arrange(NULL); |
245 } | 275 } |