From 62511d2101ba9341ab0ce1713e1222f826ddc04a Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Tue, 14 Jul 2026 22:17:41 +0200 Subject: [PATCH] Added Frame layout, and fix outline --- pulse-ui/src/layout.rs | 16 ++++++++++++++++ pulse-ui/src/widget/outline.rs | 2 +- src/main.rs | 19 +++++++++++++++---- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/pulse-ui/src/layout.rs b/pulse-ui/src/layout.rs index f30f424..eac5504 100644 --- a/pulse-ui/src/layout.rs +++ b/pulse-ui/src/layout.rs @@ -4,6 +4,7 @@ use crate::unit::{Rect, Size}; pub enum LayoutItem { Rows { unit: Size, items: Vec }, Columns { unit: Size, items: Vec }, + Frame { padding: u16, item: Box }, Widget(Size), } @@ -63,6 +64,20 @@ impl LayoutItem { } } + Self::Frame { padding, item } => { + frame.push(*alloc); + + let mut item_alloc = alloc.clone(); + + item_alloc.width -= padding * 2; + item_alloc.height -= padding * 2; + + item_alloc.x += padding; + item_alloc.y += padding; + + item.allocate(&item_alloc, frame, widgets); + } + Self::Widget(_) => { widgets.push(*alloc); } @@ -74,6 +89,7 @@ impl LayoutItem { Self::Rows { unit, .. } => unit, Self::Columns { unit, .. } => unit, Self::Widget(unit) => unit, + Self::Frame { item, .. } => item.get_size(), } } } diff --git a/pulse-ui/src/widget/outline.rs b/pulse-ui/src/widget/outline.rs index b2ab554..62daf82 100644 --- a/pulse-ui/src/widget/outline.rs +++ b/pulse-ui/src/widget/outline.rs @@ -13,7 +13,7 @@ impl Widget for Outline { ); scope.draw_text( - (0, scope.rect.height), + (0, scope.rect.height - 1), "-".repeat(scope.rect.width as usize), ); } diff --git a/src/main.rs b/src/main.rs index 1048831..ecec22c 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::State, unit::Size, widget::outline::Outline, + App, + layout::{LayoutItem, layout}, + state::State, + unit::Size, + widget::outline::Outline, }; pub struct PulseTradeApp { @@ -17,14 +21,21 @@ impl App for PulseTradeApp { async fn layout(&self) -> pulse_ui::layout::LayoutItem { layout(vec![ - LayoutItem::Widget(Size::Flex(1)), - LayoutItem::Widget(Size::Flex(1)), + LayoutItem::Frame { + padding: 1, + item: Box::new(LayoutItem::Widget(Size::Flex(1))), + }, + LayoutItem::Frame { + padding: 1, + item: Box::new(LayoutItem::Widget(Size::Flex(1))), + }, ]) } async fn render(&mut self, layout: pulse_ui::layout::Allocation) { layout.draw(1, "Yo"); - layout.draw_frame(0, Outline); + layout.draw_frame(1, Outline); + layout.draw_frame(2, Outline); } }