mirror of
https://git.checksum.fail/alec/saphir.git
synced 2026-05-01 18:09:42 +03:00
Cmd: Refactor saphir_win_select
This commit is contained in:
@@ -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:
|
task1 = adam_task->next_task;
|
||||||
case SC_CURSOR_DOWN:
|
while (task1 != adam_task) {
|
||||||
for (i = i; i > 0 && i < TEXT_ROWS + 1; i += j) {
|
if (saphir_task_is_windowed(task1) && saphir_task_should_focus(task1, i, wl, dir)) {
|
||||||
task1 = adam_task->next_task;
|
WinFocus(task1);
|
||||||
while (task1 != adam_task) {
|
return;
|
||||||
if (saphir_task_is_windowed(task1)) {
|
|
||||||
if (task1->win_top == i && task1->win_left == wl) {
|
|
||||||
WinFocus(task1);
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user