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;
}
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)
{
CTask* task = sys_focus_task;
CTask* task1;
I64 wt = task->win_top;
I64 wl = task->win_left;
I64 i;
I64 j;
I64 i, j, k;
switch (dir) {
case SC_CURSOR_UP:
i = wt - 1;
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;
}
i = j = saphir_win_select_pos(dir);
i += saphir_win_select_XY(wt, wl, dir);
k = saphir_win_select_CR(dir);
switch (dir) {
case SC_CURSOR_UP:
case SC_CURSOR_DOWN:
for (i = i; i > 0 && i < TEXT_ROWS + 1; i += j) {
for (i = i; i > 0 && i < k; i += j) {
task1 = adam_task->next_task;
while (task1 != adam_task) {
if (saphir_task_is_windowed(task1)) {
if (task1->win_top == i && task1->win_left == wl) {
if (saphir_task_is_windowed(task1) && saphir_task_should_focus(task1, i, wl, dir)) {
WinFocus(task1);
return;
}
}
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;
}
}