Cmd: Refactor saphir_win_select

This commit is contained in:
Alec Murphy
2026-04-25 20:51:33 -04:00
parent 868bb9f643
commit c1bfc4ce81

View File

@@ -28,66 +28,55 @@ U0 saphir_split_col()
WinZBufUpdate; WinZBufUpdate;
} }
I64 saphir_win_select_CR(I64 dir)
{
if (dir & 1) {
return TEXT_COLS + 1;
}
return TEXT_ROWS + 1;
}
I64 saphir_win_select_XY(I64 wt, I64 wl, I64 dir)
{
if (dir & 1) {
return wl;
}
return wt;
}
I64 saphir_win_select_pos(I64 dir)
{
return 1 - (2 * (dir < SC_CURSOR_RIGHT));
}
Bool saphir_task_should_focus(CTask* task1, I64 i, I64 wl, I64 dir)
{
if (dir & 1) {
return task1->win_left == i;
}
return task1->win_top == i && task1->win_left == wl;
}
U0 saphir_win_select(I64 dir) U0 saphir_win_select(I64 dir)
{ {
CTask* task = sys_focus_task; CTask* task = sys_focus_task;
CTask* task1; CTask* task1;
I64 wt = task->win_top; I64 wt = task->win_top;
I64 wl = task->win_left; I64 wl = task->win_left;
I64 i; I64 i, j, k;
I64 j;
switch (dir) { i = j = saphir_win_select_pos(dir);
case SC_CURSOR_UP: i += saphir_win_select_XY(wt, wl, dir);
i = wt - 1; k = saphir_win_select_CR(dir);
j = -1;
break;
case SC_CURSOR_DOWN:
i = wt + 1;
j = 1;
break;
case SC_CURSOR_LEFT:
i = wl - 1;
j = -1;
break;
case SC_CURSOR_RIGHT:
i = wl + 1;
j = 1;
break;
}
switch (dir) { for (i = i; i > 0 && i < k; i += j) {
case SC_CURSOR_UP:
case SC_CURSOR_DOWN:
for (i = i; i > 0 && i < TEXT_ROWS + 1; i += j) {
task1 = adam_task->next_task; task1 = adam_task->next_task;
while (task1 != adam_task) { while (task1 != adam_task) {
if (saphir_task_is_windowed(task1)) { if (saphir_task_is_windowed(task1) && saphir_task_should_focus(task1, i, wl, dir)) {
if (task1->win_top == i && task1->win_left == wl) {
WinFocus(task1); WinFocus(task1);
return; return;
} }
}
task1 = task1->next_task; task1 = task1->next_task;
} }
} }
break;
case SC_CURSOR_LEFT:
case SC_CURSOR_RIGHT:
for (i = i; i > 0 && i < TEXT_COLS + 1; i += j) {
task1 = adam_task->next_task;
while (task1 != adam_task) {
if (saphir_task_is_windowed(task1)) {
if (task1->win_left == i) {
WinFocus(task1);
return;
}
}
task1 = task1->next_task;
}
}
break;
default:
break;
}
} }