From 16281b0e8deb6b3bf86ac0b9381f3fdf89b22b58 Mon Sep 17 00:00:00 2001 From: Simponic Date: Mon, 2 Jan 2023 19:10:23 -0700 Subject: Now a simple logo draws in the center of the terminal, terminal size is limited, and resizing support --- lib/chessh/ssh/renderers/menu.ex | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 lib/chessh/ssh/renderers/menu.ex (limited to 'lib/chessh/ssh/renderers/menu.ex') diff --git a/lib/chessh/ssh/renderers/menu.ex b/lib/chessh/ssh/renderers/menu.ex new file mode 100644 index 0000000..c3c3646 --- /dev/null +++ b/lib/chessh/ssh/renderers/menu.ex @@ -0,0 +1,35 @@ +defmodule Chessh.SSH.Client.Menu do + alias Chessh.SSH.Client.State + alias Chessh.Utils + + alias IO.ANSI + + @logo " Simponic's + + dP MP\"\"\"\"\"\"`MM MP\"\"\"\"\"\"`MM M\"\"MMMMM\"\"MM + 88 M mmmmm..M M mmmmm..M M MMMMM MM +.d8888b. 88d888b. .d8888b. M. `YM M. `YM M `M +88' `\"\" 88' `88 88ooood8 MMMMMMM. M MMMMMMM. M M MMMMM MM +88. ... 88 88 88. ... M. .MMM' M M. .MMM' M M MMMMM MM +`88888P' dP dP `88888P' Mb. .dM Mb. .dM M MMMMM MM + MMMMMMMMMMM MMMMMMMMMMM MMMMMMMMMMMM" + + def render( + %State{width: width, height: height, state_stack: [_current_state | _tail]} = _state, + _args + ) do + {logo_width, logo_height} = Utils.text_dim(@logo) + + split = String.split(@logo, "\n") + + Enum.flat_map( + Enum.zip(0..(length(split) - 1), split), + fn {i, x} -> + [ + ANSI.cursor(div(height - logo_height, 2) + i, div(width - logo_width, 2)), + "#{x}\n" + ] + end + ) + end +end -- cgit v1.2.3-70-g09d2