mirror of
https://git.checksum.fail/alec/saphir.git
synced 2026-05-01 18:09:42 +03:00
Refactor everything
We now hijack existing system functions to integrate with `WinMgr`, instead of `Spawn`ing our own `SaphirTask`. Also, you can now use `Saphir(Bool)` to toggle enable/disable the features. There is a global var `saphir` which values are set by `Defaults.HC` for colors and other behaviors; these values can be changed at any time.
This commit is contained in:
93
Saphir/Cmd.HC
Normal file
93
Saphir/Cmd.HC
Normal file
@@ -0,0 +1,93 @@
|
||||
Bool saphir_task_is_windowed(CTask* task)
|
||||
{
|
||||
if (!task || task == ac.task) {
|
||||
return FALSE;
|
||||
}
|
||||
if ((task->display_flags & 1 << DISPLAYf_SHOW) && ((task->display_flags & 1 << DISPLAYf_NOT_RAW)))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
U0 saphir_split_row()
|
||||
{
|
||||
CTask* task1 = sys_focus_task;
|
||||
CTask* task2 = User;
|
||||
MemCpy(&task2->win_left, &task1->win_left, 32);
|
||||
task1->win_bottom = (task1->win_top + task1->win_bottom) / 2;
|
||||
task2->win_top = task1->win_bottom + 2;
|
||||
WinZBufUpdate;
|
||||
}
|
||||
|
||||
U0 saphir_split_col()
|
||||
{
|
||||
CTask* task1 = sys_focus_task;
|
||||
CTask* task2 = User;
|
||||
MemCpy(&task2->win_left, &task1->win_left, 32);
|
||||
task1->win_right = (task1->win_left + task1->win_right) / 2;
|
||||
task2->win_left = task1->win_right + 2;
|
||||
WinZBufUpdate;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
switch (dir) {
|
||||
case SC_CURSOR_UP:
|
||||
case SC_CURSOR_DOWN:
|
||||
for (i = i; i > 0 && i < TEXT_ROWS + 1; 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) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user