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 |