Add files to repository
This commit is contained in:
parent
8c4cc14d42
commit
dc9092e312
9 changed files with 369 additions and 1 deletions
175
Win.HC
Normal file
175
Win.HC
Normal file
|
@ -0,0 +1,175 @@
|
|||
#define SAPHIR_WIN_UP 0
|
||||
#define SAPHIR_WIN_DOWN 1
|
||||
#define SAPHIR_WIN_LEFT 2
|
||||
#define SAPHIR_WIN_RIGHT 3
|
||||
|
||||
CDoc *SAPHIR_BORDER_DOC = DocNew;
|
||||
|
||||
CTask *@is_task_windowed(CTask *task) {
|
||||
if ((task->display_flags & 1 << DISPLAYf_SHOW) &&
|
||||
((task->display_flags & 1 << DISPLAYf_NOT_RAW)))
|
||||
return task;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
I64 @windowed_task_count() {
|
||||
CTask *task;
|
||||
I64 count = 0;
|
||||
task = adam_task->next_task;
|
||||
while (task != adam_task) {
|
||||
if (@is_task_windowed(task))
|
||||
count++;
|
||||
task = task->next_task;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
CTask *@windowed_task_index(I64 index) {
|
||||
CTask *task;
|
||||
I64 count = 0;
|
||||
task = adam_task->next_task;
|
||||
while (task != adam_task) {
|
||||
if (@is_task_windowed(task)) {
|
||||
if (count == index)
|
||||
return task;
|
||||
count++;
|
||||
}
|
||||
task = task->next_task;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
U0 @set_border_doc_for_win(CTask *task) {
|
||||
task->border_doc = SAPHIR_BORDER_DOC;
|
||||
}
|
||||
|
||||
U0 @draw_saphir_border_for_win(CTask *task) {
|
||||
I64 color = LTGRAY;
|
||||
if (task == sys_focus_task)
|
||||
color = LTRED;
|
||||
I64 x;
|
||||
I64 y;
|
||||
I64 wl = task->win_left - 1;
|
||||
I64 wr = task->win_right + 1;
|
||||
I64 wt = task->win_top - 1;
|
||||
I64 wb = task->win_bottom + 1;
|
||||
for (x = wl; x < wr + 1; x++) {
|
||||
gr.text_base[(wt * TEXT_COLS) + x].u8[1] = color;
|
||||
gr.text_base[(wb * TEXT_COLS) + x].u8[1] = color;
|
||||
}
|
||||
for (y = wt; y < wb + 1; y++) {
|
||||
gr.text_base[(y * TEXT_COLS) + wl].u8[1] = color;
|
||||
gr.text_base[(y * TEXT_COLS) + wr].u8[1] = color;
|
||||
}
|
||||
}
|
||||
|
||||
U0 @ensure_win_no_overlap_status_bar(CTask *task) {
|
||||
task->win_bottom = MinI64(task->win_bottom, TEXT_ROWS - 3);
|
||||
}
|
||||
|
||||
U0 @set_cursor_for_focused_win(CTask *task) {
|
||||
if (task == sys_focus_task) {
|
||||
task->put_doc->flags &= ~(1 << DOCf_HIDE_CURSOR);
|
||||
} else {
|
||||
task->put_doc->flags |= (1 << DOCf_HIDE_CURSOR);
|
||||
}
|
||||
}
|
||||
|
||||
U0 @saphir_win_select(I64 dir) {
|
||||
CTask *task = sys_focus_task;
|
||||
I64 wt = task->win_top;
|
||||
I64 wl = task->win_left;
|
||||
I64 i;
|
||||
I64 j;
|
||||
|
||||
switch (dir) {
|
||||
case SAPHIR_WIN_UP:
|
||||
i = wt - 1;
|
||||
j = -1;
|
||||
break;
|
||||
case SAPHIR_WIN_DOWN:
|
||||
i = wt + 1;
|
||||
j = 1;
|
||||
break;
|
||||
case SAPHIR_WIN_LEFT:
|
||||
i = wl - 1;
|
||||
j = -1;
|
||||
break;
|
||||
case SAPHIR_WIN_RIGHT:
|
||||
i = wl + 1;
|
||||
j = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
CTask *task1;
|
||||
|
||||
switch (dir) {
|
||||
case SAPHIR_WIN_UP:
|
||||
case SAPHIR_WIN_DOWN:
|
||||
for (i = i; i > 0 && i < TEXT_ROWS + 1; i += j) {
|
||||
task1 = adam_task->next_task;
|
||||
while (task1 != adam_task) {
|
||||
if (@is_task_windowed(task1)) {
|
||||
if (task1->win_top == i && task1->win_left == wl) {
|
||||
WinFocus(task1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
task1 = task1->next_task;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SAPHIR_WIN_LEFT:
|
||||
case SAPHIR_WIN_RIGHT:
|
||||
for (i = i; i > 0 && i < TEXT_COLS + 1; i += j) {
|
||||
task1 = adam_task->next_task;
|
||||
while (task1 != adam_task) {
|
||||
if (@is_task_windowed(task1)) {
|
||||
if (task1->win_left == i) {
|
||||
WinFocus(task1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
task1 = task1->next_task;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
U0 @saphir_split_horz() {
|
||||
CTask *task1 = sys_focus_task;
|
||||
I64 wt = task1->win_top;
|
||||
I64 wl = task1->win_left;
|
||||
I64 wb = task1->win_bottom;
|
||||
I64 wr = task1->win_right;
|
||||
|
||||
task1->win_bottom = wb / 2;
|
||||
|
||||
CTask *task2 = User;
|
||||
task2->win_top = (wb / 2) + 2;
|
||||
task2->win_bottom = wb;
|
||||
task2->win_left = wl;
|
||||
task2->win_right = wr;
|
||||
|
||||
WinZBufUpdate;
|
||||
}
|
||||
|
||||
U0 @saphir_split_vert() {
|
||||
CTask *task1 = sys_focus_task;
|
||||
I64 wt = task1->win_top;
|
||||
I64 wb = task1->win_bottom;
|
||||
I64 wr = task1->win_right;
|
||||
|
||||
task1->win_right = wr / 2;
|
||||
|
||||
CTask *task2 = User;
|
||||
task2->win_top = wt;
|
||||
task2->win_bottom = wb;
|
||||
task2->win_left = (wr / 2) + 2;
|
||||
task2->win_right = wr;
|
||||
|
||||
WinZBufUpdate;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue