From 755f6476c559b35023e7695ae0571b01eedd6684 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Wed, 15 Jul 2026 09:29:59 +0200 Subject: [PATCH] Vline --- pulse-ui/src/layout.rs | 2 +- pulse-ui/src/widget/outline.rs | 30 ++++++++++++++++++++++++++ src/main.rs | 39 +++++++++++++++++----------------- 3 files changed, 51 insertions(+), 20 deletions(-) diff --git a/pulse-ui/src/layout.rs b/pulse-ui/src/layout.rs index 2d992cb..ca37247 100644 --- a/pulse-ui/src/layout.rs +++ b/pulse-ui/src/layout.rs @@ -114,7 +114,7 @@ impl Rect { } pub fn layout(rows: Vec) -> LayoutItem { - LayoutItem::Columns { + LayoutItem::Rows { unit: Size::Percent(100), items: rows, } diff --git a/pulse-ui/src/widget/outline.rs b/pulse-ui/src/widget/outline.rs index 8ff1e8c..0d0d75f 100644 --- a/pulse-ui/src/widget/outline.rs +++ b/pulse-ui/src/widget/outline.rs @@ -23,3 +23,33 @@ impl Widget for Outline { scope.draw_text((scope.rect.width - 1, scope.rect.height - 1), "┘"); } } + +pub struct TVLine; + +impl Widget for TVLine { + fn render(&self, scope: &mut crate::render::RenderScope) { + scope.draw_text(0, "─".repeat(scope.rect.width as usize)); + + scope.draw_text(0, "┌"); + scope.draw_text((scope.rect.width - 1, 0), "┐"); + } +} + +pub struct BVLine; + +impl Widget for BVLine { + fn render(&self, scope: &mut crate::render::RenderScope) { + scope.draw_text(0, "─".repeat(scope.rect.width as usize)); + + scope.draw_text(0, "└"); + scope.draw_text((scope.rect.width - 1, 0), "┘"); + } +} + +pub struct VLine; + +impl Widget for VLine { + fn render(&self, scope: &mut crate::render::RenderScope) { + scope.draw_text(0, "─".repeat(scope.rect.width as usize)); + } +} diff --git a/src/main.rs b/src/main.rs index 414d870..e7dedfe 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,11 @@ use std::any::Any; use pulse_ui::{ - App, layout::{LayoutItem, layout}, state::{Refresh, State}, unit::Size, widget::{outline::Outline, spaced::{SpacedColumns, SpacedRows}}, + App, + layout::{LayoutItem, layout}, + state::{Refresh, State}, + unit::Size, + widget::outline::VLine, }; pub struct PulseTradeApp { @@ -24,27 +28,24 @@ impl App for PulseTradeApp { } async fn layout(&self) -> pulse_ui::layout::LayoutItem { - layout(vec![LayoutItem::Frame { - padding: 1, - item: Box::new(LayoutItem::Widget(Size::Flex(1))), - }]) + layout(vec![ + LayoutItem::Columns { + unit: Size::Fixed(1), + items: vec![ + LayoutItem::Widget(Size::Flex(1)), + LayoutItem::Widget(Size::Flex(1)), + LayoutItem::Widget(Size::Flex(1)), + ], + }, + LayoutItem::Spacing(Size::Fixed(1)), + ]) } async fn render(&mut self, layout: pulse_ui::layout::Allocation) { - layout.draw_frame(0, Outline); - - layout.draw( - 0, - SpacedColumns(vec![ - (LayoutItem::Widget(Size::Flex(1)), Box::new("one")), - (LayoutItem::Widget(Size::Flex(1)), Box::new("two")), - (LayoutItem::Widget(Size::Flex(1)), Box::new("three")), - ( - LayoutItem::Widget(Size::Flex(1)), - Box::new(self.count.display().await), - ), - ]), - ); + layout.draw_frame(2, VLine); + layout.draw(0, "one"); + layout.draw(1, "two"); + layout.draw(2, "three"); } }