Start drawing UI in C

master
Ronald 3 months ago
parent 2739c1520c
commit 3fbb32826b

@ -19,6 +19,11 @@
#define MOVE_CURSOR_RIGHT "\x1b[1C" #define MOVE_CURSOR_RIGHT "\x1b[1C"
#define MOVE_CURSOR_LEFT "\x1b[1D" #define MOVE_CURSOR_LEFT "\x1b[1D"
#define MOVE_CURSOR_UP_X "\x1b[%dA"
#define MOVE_CURSOR_DOWN_X "\x1b[%dB"
#define MOVE_CURSOR_RIGHT_X "\x1b[%dC"
#define MOVE_CURSOR_LEFT_X "\x1b[%dD"
// man console_codes // man console_codes
// Directions // Directions
@ -33,13 +38,13 @@ typedef struct {
int number_of_display_lines; int number_of_display_lines;
int number_of_display_columns; int number_of_display_columns;
bool resized; bool resized;
bool update_display;
bool should_exit; bool should_exit;
struct termios original_termios; struct termios original_termios;
} State; } State;
static State state = {0}; static State state = {0};
void sigwinch_handler(int signal) void sigwinch_handler(int signal)
{ {
fprintf(stderr, "INFO: received signal \"%s\"\n", strsignal(signal)); fprintf(stderr, "INFO: received signal \"%s\"\n", strsignal(signal));
@ -82,6 +87,18 @@ void enable_raw_mode(void)
} }
} }
int draw_ui(void)
{
get_terminal_size();
printf("%s%s", CLEAR_SCREEN, MOVE_CURSOR_HOME);
for (int i = 0; i < state.number_of_display_lines; i++) {
printf(" ~ \n");
printf(MOVE_CURSOR_LEFT_X, state.number_of_display_columns);
}
}
int main(void) int main(void)
{ {
// TODO: switch to sigaction // TODO: switch to sigaction
@ -96,10 +113,18 @@ int main(void)
printf(MOVE_CURSOR_HOME); printf(MOVE_CURSOR_HOME);
fflush(stdout); fflush(stdout);
get_terminal_size(&state); get_terminal_size();
state.update_display = true;
char c; char c;
while (true) { while (true) {
if (state.update_display) {
draw_ui();
state.update_display = false;
}
ssize_t n = read(STDIN_FILENO, &c, 1); ssize_t n = read(STDIN_FILENO, &c, 1);
if (n == -1) continue; if (n == -1) continue;
@ -108,14 +133,18 @@ int main(void)
switch (c) { switch (c) {
case 'h': case 'h':
printf("%s%s", MOVE_CURSOR_LEFT, MOVE_CURSOR_LEFT); printf("%s%s", MOVE_CURSOR_LEFT, MOVE_CURSOR_LEFT);
state.update_display = true;
break; break;
case 'j': case 'j':
printf("%s%s", MOVE_CURSOR_DOWN, MOVE_CURSOR_LEFT); printf("%s%s", MOVE_CURSOR_DOWN, MOVE_CURSOR_LEFT);
state.update_display = true;
break; break;
case 'k': case 'k':
printf("%s%s", MOVE_CURSOR_UP, MOVE_CURSOR_LEFT); printf("%s%s", MOVE_CURSOR_UP, MOVE_CURSOR_LEFT);
state.update_display = true;
break; break;
case 'l': case 'l':
state.update_display = true;
break; break;
} }

Loading…
Cancel
Save