summaryrefslogtreecommitdiffstats
path: root/default-plugins/session-manager/src/ui/welcome_screen.rs
diff options
context:
space:
mode:
Diffstat (limited to 'default-plugins/session-manager/src/ui/welcome_screen.rs')
-rw-r--r--default-plugins/session-manager/src/ui/welcome_screen.rs168
1 files changed, 168 insertions, 0 deletions
diff --git a/default-plugins/session-manager/src/ui/welcome_screen.rs b/default-plugins/session-manager/src/ui/welcome_screen.rs
new file mode 100644
index 000000000..ccf20c50a
--- /dev/null
+++ b/default-plugins/session-manager/src/ui/welcome_screen.rs
@@ -0,0 +1,168 @@
+static BANNER: &str = "
+██╗ ██╗██╗ ███████╗██████╗ ██████╗ ███╗ ███╗ ███████╗███████╗██╗ ██╗ ██╗ ██╗██╗
+██║ ██║██║ ██╔════╝██╔══██╗██╔═══██╗████╗ ████║ ╚══███╔╝██╔════╝██║ ██║ ██║ ██║██║
+███████║██║ █████╗ ██████╔╝██║ ██║██╔████╔██║ ███╔╝ █████╗ ██║ ██║ ██║ ██║██║
+██╔══██║██║ ██╔══╝ ██╔══██╗██║ ██║██║╚██╔╝██║ ███╔╝ ██╔══╝ ██║ ██║ ██║██ ██║╚═╝
+██║ ██║██║ ██║ ██║ ██║╚██████╔╝██║ ╚═╝ ██║ ███████╗███████╗███████╗███████╗██║╚█████╔╝██╗
+╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚══════╝╚══════╝╚═╝ ╚════╝ ╚═╝
+";
+
+static SMALL_BANNER: &str = "
+██╗ ██╗██╗ ██╗
+██║ ██║██║ ██║
+███████║██║ ██║
+██╔══██║██║ ╚═╝
+██║ ██║██║ ██╗
+╚═╝ ╚═╝╚═╝ ╚═╝
+";
+
+static MEDIUM_BANNER: &str = "
+██╗ ██╗██╗ ████████╗██╗ ██╗███████╗██████╗ ███████╗ ██╗
+██║ ██║██║ ╚══██╔══╝██║ ██║██╔════╝██╔══██╗██╔════╝ ██║
+███████║██║ ██║ ███████║█████╗ ██████╔╝█████╗ ██║
+██╔══██║██║ ██║ ██╔══██║██╔══╝ ██╔══██╗██╔══╝ ╚═╝
+██║ ██║██║ ██║ ██║ ██║███████╗██║ ██║███████╗ ██╗
+╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝ ╚═╝
+";
+
+pub fn render_banner(x: usize, y: usize, rows: usize, cols: usize) {
+ if rows >= 8 {
+ if cols > 100 {
+ println!("\u{1b}[{}H", y + rows.saturating_sub(8) / 2);
+ for line in BANNER.lines() {
+ println!("\u{1b}[{}C{}", x.saturating_sub(1), line);
+ }
+ } else if cols > 63 {
+ println!("\u{1b}[{}H", y + rows.saturating_sub(8) / 2);
+ let x = (cols.saturating_sub(63) as f64 / 2.0) as usize;
+ for line in MEDIUM_BANNER.lines() {
+ println!("\u{1b}[{}C{}", x, line);
+ }
+ } else {
+ println!("\u{1b}[{}H", y + rows.saturating_sub(8) / 2);
+ let x = (cols.saturating_sub(18) as f64 / 2.0) as usize;
+ for line in SMALL_BANNER.lines() {
+ println!("\u{1b}[{}C{}", x, line);
+ }
+ }
+ } else if rows > 2 {
+ println!(
+ "\u{1b}[{};{}H\u{1b}[1mHi from Zellij!",
+ (y + rows / 2) + 1,
+ (x + cols.saturating_sub(15) / 2).saturating_sub(1)
+ );
+ }
+}
+
+pub fn render_welcome_boundaries(rows: usize, cols: usize) {
+ let width_of_main_menu = std::cmp::min(cols, 101);
+ let has_room_for_logos = cols.saturating_sub(width_of_main_menu) > 100;
+ let left_boundary_x = (cols.saturating_sub(width_of_main_menu) as f64 / 2.0).floor() as usize;
+ let right_boundary_x = left_boundary_x + width_of_main_menu;
+ let y_starting_point = rows.saturating_sub(15) / 2;
+ let middle_row =
+ (y_starting_point + rows.saturating_sub(y_starting_point) / 2).saturating_sub(1);
+ for i in y_starting_point..rows {
+ if i == middle_row {
+ if has_room_for_logos {
+ print!("\u{1b}[{};{}H┤", i + 1, left_boundary_x + 1);
+ print!(
+ "\u{1b}[m\u{1b}[{};{}H├\u{1b}[K",
+ i + 1,
+ right_boundary_x + 1
+ );
+ print!("\u{1b}[{};{}H", i + 1, left_boundary_x.saturating_sub(9));
+ for _ in 0..10 {
+ print!("─");
+ }
+ print!("\u{1b}[{};{}H", i + 1, right_boundary_x + 2);
+ for _ in 0..10 {
+ print!("─");
+ }
+ } else {
+ print!("\u{1b}[{};{}H│", i + 1, left_boundary_x + 1);
+ print!(
+ "\u{1b}[m\u{1b}[{};{}H│\u{1b}[K",
+ i + 1,
+ right_boundary_x + 1
+ );
+ }
+ } else {
+ if i == y_starting_point {
+ print!("\u{1b}[{};{}H┌", i + 1, left_boundary_x + 1);
+ print!(
+ "\u{1b}[m\u{1b}[{};{}H┐\u{1b}[K",
+ i + 1,
+ right_boundary_x + 1
+ );
+ } else if i == rows.saturating_sub(1) {
+ print!("\u{1b}[{};{}H└", i + 1, left_boundary_x + 1);
+ print!(
+ "\u{1b}[m\u{1b}[{};{}H┘\u{1b}[K",
+ i + 1,
+ right_boundary_x + 1
+ );
+ } else {
+ print!("\u{1b}[{};{}H│", i + 1, left_boundary_x + 1);
+ print!(
+ "\u{1b}[m\u{1b}[{};{}H│\u{1b}[K",
+ i + 1,
+ right_boundary_x + 1
+ ); // this includes some
+ // ANSI magic to delete
+ // everything after this
+ // boundary in order to
+ // fix some rendering
+ // bugs in the legacy
+ // components of this
+ // plugin
+ }
+ }
+ }
+ if rows.saturating_sub(y_starting_point) > 25 && has_room_for_logos {
+ for (i, line) in LOGO.lines().enumerate() {
+ print!(
+ "\u{1b}[{};{}H{}",
+ middle_row.saturating_sub(12) + i,
+ 0,
+ line
+ );
+ }
+ for (i, line) in LOGO.lines().enumerate() {
+ print!(
+ "\u{1b}[{};{}H{}",
+ middle_row.saturating_sub(12) + i,
+ cols.saturating_sub(47),
+ line
+ );
+ }
+ }
+}
+static LOGO: &str = r#" 
+ 
+  _y$ y@g_
+  ya@@@@L4@@@@gy_
+  u@@@@@@F "@@@@@@@@y_
+  _a@@, @@@P~` __ ~T@@@@@@@@g
+  _yg@@@@@$ "~ _yg@@@@gy `~PR@F~_yggy_
+  y$@@@@@@PF _y$@@@@@@@@@@gy_ 4@@@@@@@y_
+  g@@@@@F~ _yg@@@@@@@@@@@@@@@@@@g_ ~F@@@@@@
+  $@@@F yg@@@@@@@@@@@@@@@@@@@@@@@@gy 9@@F"
+  $@@@$ 4@@@@@@~@@@@@@@@@@@@@@@@@@@@@ "_yg$
+  $@@@$ 4@@@@@ ~@@@@@@@@@@@@@@@@@@@ g@@@@
+  $@@@$ 4@@@@@@y ~@@@@@@@@@@@@@@@@@ $@@@F
+  $@@@$ 4@@@@@@@@y ~@@@@@@@@@@@@@@@ `~_y_
+  $@@@$ 4@@@@@@@P` _g@@@@@@@@@@@@@@@ y@@@@
+  $@@@$ 4@@@@@P` _y@@@@@@@@@@@@@@@@@ 4@@@@
+  $@@@$ 4@@@@$_ y@@@@@ $@@@@ 4@@@@
+  $@@@$ 4@@@@@@g@@@@@@@@@@@@@@@@@@@@@ ~@@@
+  $@@P 7R@@@@@@@@@@@@@@@@@@@@@@@@P~ _@g_7@
+  ~~_yg@gy_ ~5@@@@@@@@@@@@@@@@@@F~ _yg@@@@y
+  R@@@@@@@ ~~@@@@@@@@@@@P~` ya@@@@@@@@F
+  ~5@@@@ 4@gy `~4@@@@F~ y@@@@@@@P~`
+  `~P 4@@@@gy_ `` _yr a@@@@@F~
+  5@@@@@@@gg@@~_g@@@~`
+  ~~@@@@@@@^y@F~
+  `~4@F ~
+ 
+  "#;