MiniDevil As beautiful as a shell
drawing.c
Go to the documentation of this file.
1 /* ************************************************************************** */
2 /* */
3 /* ::: :::::::: */
4 /* drawing.c :+: :+: :+: */
5 /* +:+ +:+ +:+ */
6 /* By: baelgadi <baelgadi@student.42.fr> +#+ +:+ +#+ */
7 /* +#+#+#+#+#+ +#+ */
8 /* Created: 2026/02/17 17:48:52 by zotaj-di #+# #+# */
9 /* Updated: 2026/03/04 03:35:43 by baelgadi ### ########.fr */
10 /* */
11 /* ************************************************************************** */
12 
13 #include "minishell_ui.h"
14 
22 void draw_cmd_box(t_ui *ui)
23 {
24  t_box b;
25  int clear_len;
26 
27  b.y = 2;
28  b.x = 2;
29  b.h = 3;
30  b.w = ui->term.width - WAIFU_BOX_W - 4;
31  b.color = C_FIRE3;
32  draw_box_title(&b, "Cmdline");
33  draw_box_sides(&b);
34  draw_box_bottom(&b);
35  print_at(b.y + 1, b.x + 1, C_FIRE4 BOLD " ❯ " RESET);
36  ft_printf("%s", ui->cmd.buf);
37  write(STDOUT_FILENO, "█", 3);
38  clear_len = b.w - ui->cmd.len - 6;
39  while (clear_len-- > 0)
40  write(STDOUT_FILENO, " ", 1);
41 }
42 
51 {
52  t_box b;
53  char *color;
54 
55  b.y = 11;
56  b.x = ui->term.width - WAIFU_BOX_W;
57  b.h = EXIT_BOX_H;
58  b.w = WAIFU_BOX_W;
59  b.color = C_FIRE2;
60  draw_box(&b);
61  if (ui->out.exit_code == 0)
62  color = C_FIRE5;
63  else
64  color = C_FIRE1;
65  print_at(b.y + 1, b.x + 4, color);
66  ft_printf("%s Exit: %d %s", BOLD, ui->out.exit_code, RESET);
67 }
68 
76 void draw_ui(t_ui *ui)
77 {
78  write(STDOUT_FILENO, CLEAR_SCREEN, ft_strlen(CLEAR_SCREEN));
79  draw_cmd_box(ui);
80  draw_waifu_box(ui);
81  draw_exit_box(ui);
82  draw_out_box(ui);
83 }
84 
91 {
92  int width;
93  int clear_len;
94 
95  width = ui->term.width - WAIFU_BOX_W - 4;
96  print_at(3, 4, C_FIRE4 BOLD "❯" RESET " ");
97  write(STDOUT_FILENO, ui->cmd.buf, ui->cmd.len);
98  write(STDOUT_FILENO, "█", 3);
99  clear_len = width - ui->cmd.len - 8;
100  if (clear_len > 0)
101  {
102  while (clear_len-- > 0)
103  write(STDOUT_FILENO, " ", 1);
104  }
105 }
void redraw_cmd_only(t_ui *ui)
Redraws only the command input line.
Definition: drawing.c:90
void draw_exit_box(t_ui *ui)
Draw the exit code status box (right sidebare, below waifu)
Definition: drawing.c:50
void draw_cmd_box(t_ui *ui)
Draw the command input box (top left of the UI)
Definition: drawing.c:22
void draw_ui(t_ui *ui)
Clear the screen and redraw the UI from scratch.
Definition: drawing.c:76
void draw_box_bottom(t_box *b)
Draw the bottom border of a box.
Definition: drawing_box.c:34
void draw_box_title(t_box *b, const char *title)
Draw the top border of a box with title in the center.
Definition: drawing_box.c:83
void draw_box_sides(t_box *b)
Draw the left and right borders of a box.
Definition: drawing_box.c:48
void draw_box(t_box *b)
Draw a complete box.
Definition: drawing_box.c:70
void draw_out_box(t_ui *ui)
Draw the full output box with title and borders.
void print_at(int row, int col, const char *str)
Move the terminal cursor to [row, col] and write str.
Definition: drawing_utils.c:22
UI mode structures, macros & function prototypes.
#define C_FIRE3
Definition: minishell_ui.h:53
#define BOLD
Definition: minishell_ui.h:38
#define C_FIRE1
Definition: minishell_ui.h:51
#define C_FIRE2
Definition: minishell_ui.h:52
#define CLEAR_SCREEN
Definition: minishell_ui.h:29
#define C_FIRE5
Definition: minishell_ui.h:55
#define C_FIRE4
Definition: minishell_ui.h:54
#define RESET
Definition: minishell_ui.h:37
#define EXIT_BOX_H
Definition: minishell_ui.h:81
#define WAIFU_BOX_W
Definition: minishell_ui.h:80
Box position & style for drawing.
Definition: minishell_ui.h:115
int x
Left col.
Definition: minishell_ui.h:117
int h
Height in rows.
Definition: minishell_ui.h:118
int w
Width in cols.
Definition: minishell_ui.h:119
int y
Top row.
Definition: minishell_ui.h:116
const char * color
ANSI color str.
Definition: minishell_ui.h:120
char buf[MAX_CMD_LEN]
Fixed size buffer.
Definition: minishell_ui.h:138
int len
Current input length.
Definition: minishell_ui.h:139
int exit_code
Last command exit code.
Definition: minishell_ui.h:151
int width
Cols.
Definition: minishell_ui.h:128
UI state.
Definition: minishell_ui.h:167
t_cmd cmd
Cmd buffer.
Definition: minishell_ui.h:169
t_out out
Output state.
Definition: minishell_ui.h:170
t_term term
Terminal state.
Definition: minishell_ui.h:168
void draw_waifu_box(t_ui *ui)
Draw the waifu panel in the right sidebar.
Definition: waifu.c:48