ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
too_small.h File Reference

Go to the source code of this file.

Macros

#define UI_MEDIA_MIN_COLS   20
#define UI_MEDIA_MIN_ROWS   10

Functions

bool ui_too_small (terminal_size_t actual, terminal_size_t minimum)
size_t ui_too_small_format (char *output, size_t capacity, terminal_size_t actual, terminal_size_t minimum)
void ui_too_small_render (frame_buffer_t *buffer, terminal_size_t actual, terminal_size_t minimum)

Macro Definition Documentation

◆ UI_MEDIA_MIN_COLS

#define UI_MEDIA_MIN_COLS   20

Definition at line 5 of file too_small.h.

Referenced by ascii_write(), and session_display_write_ascii_frame().

◆ UI_MEDIA_MIN_ROWS

#define UI_MEDIA_MIN_ROWS   10

Definition at line 6 of file too_small.h.

Referenced by ascii_write(), and session_display_write_ascii_frame().

Function Documentation

◆ ui_too_small()

bool ui_too_small ( terminal_size_t actual,
terminal_size_t minimum )

Definition at line 10 of file too_small.c.

10 {
11 return actual.cols > 0 && actual.rows > 0 && (actual.cols < minimum.cols || actual.rows < minimum.rows);
12}

Referenced by ui_controller_state(), ui_error_popup_render(), ui_session_render(), and ui_sync_render().

◆ ui_too_small_format()

size_t ui_too_small_format ( char * output,
size_t capacity,
terminal_size_t actual,
terminal_size_t minimum )

Format the warning without allocation, for independent diagnostic renderers.

Definition at line 14 of file too_small.c.

14 {
15 if (!output || !capacity || actual.cols <= 0 || actual.rows <= 0)
16 return 0;
18 snprintf(dimensions, sizeof(dimensions), "%dx%d / need %dx%d", actual.cols, actual.rows, minimum.cols, minimum.rows);
19 const char *lines[] = {"Terminal too small", dimensions, "Resize to continue"};
20 int count = actual.rows >= 5 ? 3 : 1;
21 int row = (actual.rows - count) / 2 + 1;
22 int written = snprintf(output, capacity, "\033[0m\033[2J\033[?25l");
23 size_t used = (size_t)written < capacity ? (size_t)written : capacity - 1;
24 for (int i = 0; i < count; ++i) {
25 int width = (int)strlen(lines[i]);
26 // Leave the last column unused to avoid the terminal's auto-wrap state.
27 int available = actual.cols > 1 ? actual.cols - 1 : 1;
28 if (width > available)
29 width = available;
30 int col = (actual.cols - width) / 2 + 1;
31 written = snprintf(output + used, capacity - used, "\033[%d;%dH%.*s", row + i, col, width, lines[i]);
32 if (written > 0)
33 used += (size_t)written < capacity - used ? (size_t)written : capacity - used - 1;
34 }
35 return used;
36}
unsigned int width
Definition fft.c:23
#define TUI_TOO_SMALL_DIMENSIONS_BUFFER_SIZE
Definition too_small.c:3

References TUI_TOO_SMALL_DIMENSIONS_BUFFER_SIZE, and width.

Referenced by ui_sync_render(), and ui_too_small_render().

◆ ui_too_small_render()

void ui_too_small_render ( frame_buffer_t * buffer,
terminal_size_t actual,
terminal_size_t minimum )

Never writes outside actual dimensions, including a 1x1 terminal.

Definition at line 38 of file too_small.c.

38 {
40 size_t length = ui_too_small_format(output, sizeof(output), actual, minimum);
41 frame_buffer_append(buffer, output, length);
42}
void frame_buffer_append(frame_buffer_t *buf, const char *str, size_t len)
Append raw bytes to the buffer.
#define TUI_TOO_SMALL_OUTPUT_BUFFER_SIZE
Definition too_small.c:4
size_t ui_too_small_format(char *output, size_t capacity, terminal_size_t actual, terminal_size_t minimum)
Definition too_small.c:14

References frame_buffer_append(), TUI_TOO_SMALL_OUTPUT_BUFFER_SIZE, and ui_too_small_format().

Referenced by ui_error_popup_render(), and ui_session_render().