-module(etui@widgets@line). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/etui/widgets/line.gleam"). -export([line_new/0, with_color/2, render_horizontal/3, render_vertical/3]). -export_type([line_style/0, line/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. -type line_style() :: solid. -type line() :: {line, line_style(), etui@style:color()}. -file("src/etui/widgets/line.gleam", 23). ?DOC(" New solid line with default terminal color.\n"). -spec line_new() -> line(). line_new() -> {line, solid, default}. -file("src/etui/widgets/line.gleam", 28). ?DOC(" Set the line color.\n"). -spec with_color(line(), etui@style:color()) -> line(). with_color(L, Color) -> {line, erlang:element(2, L), Color}. -file("src/etui/widgets/line.gleam", 47). -spec render_horizontal_line( etui@buffer:buffer(), etui@geometry:rect(), line(), integer(), binary() ) -> etui@buffer:buffer(). render_horizontal_line(Buf, Area, L, X, Char) -> case X >= erlang:element(2, erlang:element(3, Area)) of true -> Buf; false -> Pos = {position, erlang:element(2, erlang:element(2, Area)) + X, erlang:element(3, erlang:element(2, Area))}, Buf_new = etui@buffer:set_string( Buf, Pos, Char, erlang:element(3, L), default, etui@style:none() ), render_horizontal_line(Buf_new, Area, L, X + 1, Char) end. -file("src/etui/widgets/line.gleam", 36). ?DOC(" Render horizontal line.\n"). -spec render_horizontal(etui@buffer:buffer(), etui@geometry:rect(), line()) -> etui@buffer:buffer(). render_horizontal(Buf, Area, L) -> case erlang:element(2, erlang:element(3, Area)) =< 0 of true -> Buf; false -> render_horizontal_line(Buf, Area, L, 0, <<"─"/utf8>>) end. -file("src/etui/widgets/line.gleam", 80). -spec render_vertical_line( etui@buffer:buffer(), etui@geometry:rect(), line(), integer(), binary() ) -> etui@buffer:buffer(). render_vertical_line(Buf, Area, L, Y, Char) -> case Y >= erlang:element(3, erlang:element(3, Area)) of true -> Buf; false -> Pos = {position, erlang:element(2, erlang:element(2, Area)), erlang:element(3, erlang:element(2, Area)) + Y}, Buf_new = etui@buffer:set_string( Buf, Pos, Char, erlang:element(3, L), default, etui@style:none() ), render_vertical_line(Buf_new, Area, L, Y + 1, Char) end. -file("src/etui/widgets/line.gleam", 66). ?DOC(" Render vertical line.\n"). -spec render_vertical(etui@buffer:buffer(), etui@geometry:rect(), line()) -> etui@buffer:buffer(). render_vertical(Buf, Area, L) -> case erlang:element(3, erlang:element(3, Area)) =< 0 of true -> Buf; false -> Char = <<"│"/utf8>>, render_vertical_line(Buf, Area, L, 0, Char) end.