|
143 | 143 | #define BAKED_POINTS_COUNT 256 |
144 | 144 |
|
145 | 145 | /* enums */ |
| 146 | +enum { TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT }; |
| 147 | + |
146 | 148 | enum { VERTICAL, HORIZONTAL }; |
147 | 149 | enum { SWIPE_UP, SWIPE_DOWN, SWIPE_LEFT, SWIPE_RIGHT }; |
148 | 150 | enum { CurNormal, CurPressed, CurMove, CurResize }; /* cursor */ |
@@ -1215,17 +1217,59 @@ void toggle_hotarea(int32_t x_root, int32_t y_root) { |
1215 | 1217 | if (grabc) |
1216 | 1218 | return; |
1217 | 1219 |
|
1218 | | - unsigned hx = selmon->m.x + hotarea_size; |
1219 | | - unsigned hy = selmon->m.y + selmon->m.height - hotarea_size; |
| 1220 | + // 根据热角位置计算不同的热区坐标 |
| 1221 | + unsigned hx, hy; |
| 1222 | + |
| 1223 | + switch (hotarea_corner) { |
| 1224 | + case BOTTOM_RIGHT: // 右下角 |
| 1225 | + hx = selmon->m.x + selmon->m.width - hotarea_size; |
| 1226 | + hy = selmon->m.y + selmon->m.height - hotarea_size; |
| 1227 | + break; |
| 1228 | + case TOP_LEFT: // 左上角 |
| 1229 | + hx = selmon->m.x + hotarea_size; |
| 1230 | + hy = selmon->m.y + hotarea_size; |
| 1231 | + break; |
| 1232 | + case TOP_RIGHT: // 右上角 |
| 1233 | + hx = selmon->m.x + selmon->m.width - hotarea_size; |
| 1234 | + hy = selmon->m.y + hotarea_size; |
| 1235 | + break; |
| 1236 | + case BOTTOM_LEFT: // 左下角(默认) |
| 1237 | + default: |
| 1238 | + hx = selmon->m.x + hotarea_size; |
| 1239 | + hy = selmon->m.y + selmon->m.height - hotarea_size; |
| 1240 | + break; |
| 1241 | + } |
| 1242 | + |
| 1243 | + // 判断鼠标是否在热区内 |
| 1244 | + int in_hotarea = 0; |
| 1245 | + |
| 1246 | + switch (hotarea_corner) { |
| 1247 | + case BOTTOM_RIGHT: // 右下角 |
| 1248 | + in_hotarea = (y_root > hy && x_root > hx && |
| 1249 | + x_root <= (selmon->m.x + selmon->m.width) && |
| 1250 | + y_root <= (selmon->m.y + selmon->m.height)); |
| 1251 | + break; |
| 1252 | + case TOP_LEFT: // 左上角 |
| 1253 | + in_hotarea = (y_root < hy && x_root < hx && x_root >= selmon->m.x && |
| 1254 | + y_root >= selmon->m.y); |
| 1255 | + break; |
| 1256 | + case TOP_RIGHT: // 右上角 |
| 1257 | + in_hotarea = (y_root < hy && x_root > hx && |
| 1258 | + x_root <= (selmon->m.x + selmon->m.width) && |
| 1259 | + y_root >= selmon->m.y); |
| 1260 | + break; |
| 1261 | + case BOTTOM_LEFT: // 左下角(默认) |
| 1262 | + default: |
| 1263 | + in_hotarea = (y_root > hy && x_root < hx && x_root >= selmon->m.x && |
| 1264 | + y_root <= (selmon->m.y + selmon->m.height)); |
| 1265 | + break; |
| 1266 | + } |
1220 | 1267 |
|
1221 | | - if (enable_hotarea == 1 && selmon->is_in_hotarea == 0 && y_root > hy && |
1222 | | - x_root < hx && x_root >= selmon->m.x && |
1223 | | - y_root <= (selmon->m.y + selmon->m.height)) { |
| 1268 | + if (enable_hotarea == 1 && selmon->is_in_hotarea == 0 && in_hotarea) { |
1224 | 1269 | toggleoverview(&arg); |
1225 | 1270 | selmon->is_in_hotarea = 1; |
1226 | 1271 | } else if (enable_hotarea == 1 && selmon->is_in_hotarea == 1 && |
1227 | | - (y_root <= hy || x_root >= hx || x_root < selmon->m.x || |
1228 | | - y_root > (selmon->m.y + selmon->m.height))) { |
| 1272 | + !in_hotarea) { |
1229 | 1273 | selmon->is_in_hotarea = 0; |
1230 | 1274 | } |
1231 | 1275 | } |
|
0 commit comments