From 3d7287902f274c5e50718e6dcd94183c684c50b6 Mon Sep 17 00:00:00 2001 From: Alexander Heldt Date: Sat, 29 Nov 2025 19:02:33 +0100 Subject: [PATCH] Move `render_layout` to `layout` module --- src/musicplayer/ui/layout.gleam | 14 ++++++++++++++ src/musicplayer/ui/ui.gleam | 15 ++------------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/musicplayer/ui/layout.gleam b/src/musicplayer/ui/layout.gleam index c8af609..b1542a6 100644 --- a/src/musicplayer/ui/layout.gleam +++ b/src/musicplayer/ui/layout.gleam @@ -1,4 +1,7 @@ import gleam/dict +import gleam/list + +import musicplayer/ui/internal pub type Layout { Layout(width: Int, height: Int, nodes: dict.Dict(Section, Node)) @@ -56,3 +59,14 @@ pub fn update_section( pub fn update_dimensions(layout: Layout, width: Int, height: Int) -> Layout { Layout(..layout, width:, height:) } + +pub fn render(layout: Layout, from: Section) -> Nil { + case dict.get(layout.nodes, from) { + Error(_) -> Nil + Ok(node) -> { + list.each(node.children, fn(child) { render(layout, child) }) + + internal.print_at(node.content, node.x, node.y) + } + } +} diff --git a/src/musicplayer/ui/ui.gleam b/src/musicplayer/ui/ui.gleam index 148786a..094f946 100644 --- a/src/musicplayer/ui/ui.gleam +++ b/src/musicplayer/ui/ui.gleam @@ -1,4 +1,3 @@ -import gleam/dict import gleam/erlang/process.{type Subject} import gleam/int import gleam/list @@ -8,7 +7,7 @@ import gleam/string import musicplayer/logging/logging import musicplayer/ui/control.{type Control} import musicplayer/ui/internal -import musicplayer/ui/layout.{type Layout, type Section} +import musicplayer/ui/layout.{type Layout} pub type State(redraw, content) { State(redraw: Subject(Layout), layout: Layout) @@ -92,8 +91,8 @@ fn handle_message( fn redraw_on_update_loop(redraw: Subject(Layout)) -> Nil { let layout = process.receive_forever(redraw) - render_layout(layout, layout.Root) internal.clear_screen() + layout.render(layout, layout.Root) redraw_on_update_loop(redraw) } @@ -109,13 +108,3 @@ fn update_dimensions_on_interval(ui: Subject(Control), interval_ms: Int) { process.sleep(interval_ms) update_dimensions_on_interval(ui, interval_ms) } - -fn render_layout(layout: Layout, from: Section) -> Nil { - case dict.get(layout.nodes, from) { - Error(_) -> Nil - Ok(node) -> { - list.each(node.children, fn(child) { render_layout(layout, child) }) - internal.print_at(node.content, node.x, node.y) - } - } -}