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_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
// Directions
@ -33,13 +38,13 @@ typedef struct {
int number_of_display_lines;
int number_of_display_columns;
bool resized;
bool update_display;
bool should_exit;
struct termios original_termios;
} State;
static State state = {0};
void sigwinch_handler(int 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)
{
// TODO: switch to sigaction
@ -96,10 +113,18 @@ int main(void)
printf(MOVE_CURSOR_HOME);
fflush(stdout);
get_terminal_size(&state);
get_terminal_size();
state.update_display = true;
char c;
while (true) {
if (state.update_display) {
draw_ui();
state.update_display = false;
}
ssize_t n = read(STDIN_FILENO, &c, 1);
if (n == -1) continue;
@ -108,14 +133,18 @@ int main(void)
switch (c) {
case 'h':
printf("%s%s", MOVE_CURSOR_LEFT, MOVE_CURSOR_LEFT);
state.update_display = true;
break;
case 'j':
printf("%s%s", MOVE_CURSOR_DOWN, MOVE_CURSOR_LEFT);
state.update_display = true;
break;
case 'k':
printf("%s%s", MOVE_CURSOR_UP, MOVE_CURSOR_LEFT);
state.update_display = true;
break;
case 'l':
state.update_display = true;
break;
}

Loading…
Cancel
Save