diff options
author | C. McEnroe | 2020-05-25 13:51:09 -0400 |
---|---|---|
committer | C. McEnroe | 2020-05-25 13:51:09 -0400 |
commit | b352f5965b251e7a218b51ee351fa806ff4e7ff1 (patch) | |
tree | 5f4caf86edcc53fac489ca7d395fa59613b76d1a /ui.c | |
parent | 53f206f7e0a988cfc229a22ba0b929d7cdfcafff (diff) |
Define constants for window geometry
Also fixes uiDraw so that the split lines and marker don't overlap the main window, although that wasn't causing any real problems.
Diffstat (limited to 'ui.c')
-rw-r--r-- | ui.c | 61 |
1 files changed, 38 insertions, 23 deletions
diff --git a/ui.c b/ui.c index e91bd26..5b7ef5e 100644 --- a/ui.c +++ b/ui.c @@ -46,9 +46,18 @@ #define A_ITALIC A_NORMAL #endif +enum { + StatusLines = 1, + WindowLines = 1024, + MarkerLines = 1, + SplitLines = 5, + InputLines = 1, + InputCols = 1024, +}; + #define BOTTOM (LINES - 1) #define RIGHT (COLS - 1) -#define PAGE_LINES (LINES - 2) +#define MAIN_LINES (LINES - StatusLines - InputLines) static WINDOW *status; static WINDOW *marker; @@ -82,7 +91,6 @@ static struct Line bufferLine(const struct Buffer *buffer, size_t i) { return buffer->lines[(buffer->len + i) % BufferCap]; } -enum { WindowLines = BufferCap }; struct Window { uint id; WINDOW *pad; @@ -264,8 +272,6 @@ static void errExit(void) { reset_shell_mode(); } -enum { SplitLines = 5 }; - void uiInit(void) { initscr(); cbreak(); @@ -284,13 +290,16 @@ void uiInit(void) { ENUM_KEY #undef X - status = newwin(1, COLS, 0, 0); + status = newwin(StatusLines, COLS, 0, 0); if (!status) err(EX_OSERR, "newwin"); - marker = newwin(1, COLS, BOTTOM - SplitLines - 1, 0); + marker = newwin( + MarkerLines, COLS, + LINES - InputLines - SplitLines - MarkerLines, 0 + ); wbkgd(marker, ACS_BULLET); - input = newpad(1, 1024); + input = newpad(InputLines, InputCols); if (!input) err(EX_OSERR, "newpad"); keypad(input, true); nodelay(input, true); @@ -309,20 +318,27 @@ void uiDraw(void) { if (hidden) return; wnoutrefresh(status); const struct Window *window = windows.ptrs[windows.show]; - pnoutrefresh( - window->pad, - WindowLines - window->scroll - PAGE_LINES + !!window->scroll, 0, - 1, 0, - BOTTOM - 1 - !!window->scroll, RIGHT - ); - if (window->scroll) { + if (!window->scroll) { + pnoutrefresh( + window->pad, + WindowLines - MAIN_LINES, 0, + StatusLines, 0, + BOTTOM - InputLines, RIGHT + ); + } else { + pnoutrefresh( + window->pad, + WindowLines - window->scroll - MAIN_LINES + MarkerLines, 0, + StatusLines, 0, + BOTTOM - InputLines - SplitLines - MarkerLines, RIGHT + ); touchwin(marker); wnoutrefresh(marker); pnoutrefresh( window->pad, WindowLines - SplitLines, 0, - BOTTOM - SplitLines, 0, - BOTTOM - 1, RIGHT + LINES - InputLines - SplitLines, 0, + BOTTOM - InputLines, RIGHT ); } int y, x; @@ -330,7 +346,7 @@ void uiDraw(void) { pnoutrefresh( input, 0, (x + 1 > RIGHT ? x + 1 - RIGHT : 0), - BOTTOM, 0, + LINES - InputLines, 0, BOTTOM, RIGHT ); (void)y; @@ -517,21 +533,20 @@ void uiHide(void) { static void windowScroll(struct Window *window, int n) { mark(window); window->scroll += n; - if (window->scroll > WindowLines - PAGE_LINES) { - window->scroll = WindowLines - PAGE_LINES; + if (window->scroll > WindowLines - MAIN_LINES) { + window->scroll = WindowLines - MAIN_LINES; } if (window->scroll < 0) window->scroll = 0; unmark(window); } static void windowScrollPage(struct Window *window, int n) { - // -1 for split marker, -1 for line of overlap. - windowScroll(window, n * (PAGE_LINES - SplitLines - 2)); + windowScroll(window, n * (MAIN_LINES - SplitLines - MarkerLines - 1)); } static void windowScrollUnread(struct Window *window) { window->scroll = 0; - windowScroll(window, window->unreadSoft - PAGE_LINES + 1); + windowScroll(window, window->unreadSoft - MAIN_LINES); } static int wordWidth(const char *str) { @@ -687,7 +702,7 @@ static void reflow(struct Window *window) { } static void resize(void) { - mvwin(marker, BOTTOM - SplitLines - 1, 0); + mvwin(marker, LINES - InputLines - SplitLines - MarkerLines, 0); int height, width; getmaxyx(windows.ptrs[0]->pad, height, width); if (width == COLS) return; |