seamus

commit bd5a36e94aceb1c71c4d8195b3faa6ee611a5fc0

Author: Pedro Lucas Porcellis <porcellis@eletrotupi.com>

ui: refactor renders from main window to tabs/windows

 src/ui.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++---------


diff --git a/src/ui.c b/src/ui.c
index 4c8eb8aafc239a7a3bb344b70965704ff5a58535..1575acd21966b194ec3ee4c6fc9fb6ae68dbedd5 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -636,6 +636,79 @@ 	return 1;
 }
 
 static int
+render_main_window_title(TickitWindow *win, TickitRenderBuffer *render_buffer)
+{
+	tickit_renderbuffer_savepen(render_buffer);
+
+	TickitPen *pen = tickit_pen_new_attrs(
+			TICKIT_PEN_FG, 0,
+			TICKIT_PEN_BG, 6,
+			TICKIT_PEN_BOLD, 1,
+			0);
+
+	tickit_renderbuffer_setpen(render_buffer, pen);
+
+	const char *welcome = "Hello, welcome to seamus";
+	int cols = tickit_window_cols(win);
+	int len = strlen(welcome);
+	int pad = (cols - len) / 2;
+	if (pad < 0) pad = 0;
+
+	tickit_renderbuffer_goto(render_buffer, 0, pad);
+	tickit_renderbuffer_text(render_buffer, welcome);
+
+	tickit_renderbuffer_restore(render_buffer);
+
+	return 0;
+}
+
+static int
+render_main_window_tabs(TickitWindow *win, TickitRenderBuffer *render_buffer,
+		struct seamus_frontend *seamus)
+{
+	const char *tab_queue = "[QUEUE \xe2\x97\x8f]";
+	const char *tab_library = "[LIBRARY]";
+	int active_is_queue = 1;
+
+	if (seamus->current_window == WINDOW_LIBRARY) {
+		tab_queue = "[QUEUE]";
+		tab_library = "[LIBRARY \xe2\x97\x8f]";
+		active_is_queue = 0;
+	}
+
+	const char *tab[2] = { tab_queue, tab_library };
+	int total = strlen(tab[0]) + 1 + strlen(tab[1]);
+	int cols = tickit_window_cols(win);
+	int pad = (cols - total) / 2;
+	if (pad < 0) pad = 0;
+
+	tickit_renderbuffer_goto(render_buffer, 1, pad);
+
+	for (int i = 0; i < 2; i++) {
+		int active = (i == 0 && active_is_queue) || (i == 1 && !active_is_queue);
+
+		if (active) {
+			tickit_renderbuffer_savepen(render_buffer);
+			TickitPen *tab_pen = tickit_pen_new_attrs(
+					TICKIT_PEN_BOLD, 1,
+					0);
+
+			tickit_renderbuffer_setpen(render_buffer, tab_pen);
+			tickit_renderbuffer_text(render_buffer, tab[i]);
+			tickit_renderbuffer_restore(render_buffer);
+		} else {
+			tickit_renderbuffer_text(render_buffer, tab[i]);
+		}
+
+		if (i == 0) {
+			tickit_renderbuffer_text(render_buffer, " ");
+		}
+	}
+
+	return 0;
+}
+
+static int
 render_main_window(TickitWindow *win, TickitEventFlags flags, void *_info, void *data)
 {
 	(void)win;
@@ -647,20 +720,8 @@ 	struct seamus_frontend *seamus = (struct seamus_frontend*) data;
 
 	tickit_renderbuffer_eraserect(render_buffer, &info->rect);
 
-	tickit_renderbuffer_goto(render_buffer, 0, 0);
-	{
-		tickit_renderbuffer_savepen(render_buffer);
-
-		TickitPen *pen = tickit_pen_new_attrs(
-			TICKIT_PEN_FG, 0,
-			TICKIT_PEN_BG, 6,
-			TICKIT_PEN_BOLD, 1,
-		0);
-
-		tickit_renderbuffer_setpen(render_buffer, pen);
-		tickit_renderbuffer_text(render_buffer, "Hello, welcome to seamus");
-		tickit_renderbuffer_restore(render_buffer);
-	}
+	render_main_window_title(win, render_buffer);
+	render_main_window_tabs(win, render_buffer, seamus);
 
 	if (seamus->status->length == 0) {
 		tickit_renderbuffer_goto(render_buffer, QUEUE_START_LINE, 0);