From 2b0d85549f98f8e4ae7e6950353c35ca320000f1 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sat, 2 Aug 2025 05:48:57 -0500 Subject: [PATCH 1/6] Simple demo #15 --- src/demos/mod.rs | 7 +++++++ src/main.rs | 16 ++-------------- 2 files changed, 9 insertions(+), 14 deletions(-) create mode 100644 src/demos/mod.rs diff --git a/src/demos/mod.rs b/src/demos/mod.rs new file mode 100644 index 0000000..b666c0d --- /dev/null +++ b/src/demos/mod.rs @@ -0,0 +1,7 @@ +use osui::prelude::*; + +pub fn app() -> Rsx { + rsx! { + "Hello, World" + } +} diff --git a/src/main.rs b/src/main.rs index 36a576b..1e23f4f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,22 +1,10 @@ +mod demos; use osui::prelude::*; fn main() -> std::io::Result<()> { let screen = Screen::new(); - screen.extension(VelocityExtension); - let count = use_state(0); - - rsx! { - @Velocity(20, 0); - @Transform::new(); - static "Count: {count}" - } - .draw(&screen); - - std::thread::spawn(move || loop { - **count.get() += 1; - std::thread::sleep(std::time::Duration::from_millis(100)); - }); + demos::app().draw(&screen); screen.run() } From 48849c7cc21bb29e3deace6a00d4df2c6d179075 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sat, 2 Aug 2025 05:55:35 -0500 Subject: [PATCH 2/6] use_area instead of draw_rect for div --- src/elements/div.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/elements/div.rs b/src/elements/div.rs index 28760eb..5960d18 100644 --- a/src/elements/div.rs +++ b/src/elements/div.rs @@ -22,7 +22,7 @@ impl Div { impl Element for Div { fn render(&mut self, scope: &mut crate::render_scope::RenderScope) { let (width, height) = scope.get_size_or(self.size.0, self.size.1); - scope.draw_rect(width, height, 0); + scope.use_area(width, height); } fn after_render(&mut self, scope: &mut crate::render_scope::RenderScope) { From 0ccf03de3bc5c72ead1b30c1a41f4fbe628578ad Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sat, 2 Aug 2025 06:02:54 -0500 Subject: [PATCH 3/6] Simple demos #15 --- src/demos/mod.rs | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/demos/mod.rs b/src/demos/mod.rs index b666c0d..869e8d0 100644 --- a/src/demos/mod.rs +++ b/src/demos/mod.rs @@ -1,7 +1,34 @@ use osui::prelude::*; pub fn app() -> Rsx { + let count = use_state(0); + + std::thread::spawn({ + let count = count.clone(); + move || loop { + **count.get() += 1; + std::thread::sleep(std::time::Duration::from_secs(1)); + } + }); + rsx! { - "Hello, World" + FlexRow { + FlexCol { + @Transform::new().padding(2, 2); + @Style { foreground: None, background: Background::RoundedOutline(0x00ff00) }; // TODO: Outline doesn't work + Div { + "This is text inside a div" + } + + // TODO: div with width full + } (2) + + FlexCol { + Div { + %count + "This will increment every second: {count}" + } + } (2) + } (0) } } From 3a4c3505ac3a23dc6ce0049058cffe3be1376373 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sat, 2 Aug 2025 06:14:13 -0500 Subject: [PATCH 4/6] Padding fix for flex --- src/elements/flex.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/elements/flex.rs b/src/elements/flex.rs index 3ae6874..fe19d33 100644 --- a/src/elements/flex.rs +++ b/src/elements/flex.rs @@ -67,7 +67,7 @@ impl Element for FlexRow { transform.height = transform.height.max(v + t.height); t.x += transform.x; t.y += transform.y + v; - v += t.height + self.gap; + v += t.height + self.gap + t.py; t.px += transform.px; t.py += transform.py; @@ -123,7 +123,7 @@ impl Element for FlexCol { transform.height = transform.height.max(t.height + (t.py * 2)); t.x += transform.x + v; t.y += transform.y; - v += t.width + self.gap; + v += t.width + self.gap + t.px; t.px += transform.px; t.py += transform.py; From 36e06732d9560b5082555e6cd1135c25451045cf Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sat, 2 Aug 2025 06:15:24 -0500 Subject: [PATCH 5/6] Padding fix for flex --- src/elements/flex.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/elements/flex.rs b/src/elements/flex.rs index fe19d33..3dc95e3 100644 --- a/src/elements/flex.rs +++ b/src/elements/flex.rs @@ -67,7 +67,7 @@ impl Element for FlexRow { transform.height = transform.height.max(v + t.height); t.x += transform.x; t.y += transform.y + v; - v += t.height + self.gap + t.py; + v += t.height + self.gap + (t.py * 2); t.px += transform.px; t.py += transform.py; @@ -123,7 +123,7 @@ impl Element for FlexCol { transform.height = transform.height.max(t.height + (t.py * 2)); t.x += transform.x + v; t.y += transform.y; - v += t.width + self.gap + t.px; + v += t.width + self.gap + (t.px * 2); t.px += transform.px; t.py += transform.py; From 2892176a76ba9184df17d5440b322cf0773789db Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sat, 2 Aug 2025 06:16:09 -0500 Subject: [PATCH 6/6] Square outline demo fix #15 --- src/demos/mod.rs | 10 ++++++++-- src/render_scope.rs | 18 ++++++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/demos/mod.rs b/src/demos/mod.rs index 869e8d0..104f97d 100644 --- a/src/demos/mod.rs +++ b/src/demos/mod.rs @@ -15,13 +15,19 @@ pub fn app() -> Rsx { FlexRow { FlexCol { @Transform::new().padding(2, 2); - @Style { foreground: None, background: Background::RoundedOutline(0x00ff00) }; // TODO: Outline doesn't work + @Style { foreground: None, background: Background::RoundedOutline(0x00ff00) }; Div { "This is text inside a div" } + @Transform::new().padding(2, 2); + @Style { foreground: None, background: Background::Outline(0x00ff00) }; + Div { + "This is text inside a div with square outlines" + } + // TODO: div with width full - } (2) + } (1) FlexCol { Div { diff --git a/src/render_scope.rs b/src/render_scope.rs index 42cdd4d..4fbaf18 100644 --- a/src/render_scope.rs +++ b/src/render_scope.rs @@ -105,8 +105,22 @@ impl RenderScope { match self.style.background { crate::style::Background::NoBackground => {} - crate::style::Background::Outline(_c) => { - // TODO: Implement basic outline drawing if needed + crate::style::Background::Outline(c) => { + let width = width + self.transform.px * 2; + let height = height + self.transform.py * 2; + if width > 1 && height > 1 { + let d = "─".repeat(width as usize - 2); + utils::print_liner( + self.transform.x, + self.transform.y, + &utils::hex_ansi(c), + &format!( + "┌{d}┐{}\n└{d}┘", + format!("\n│{}│", " ".repeat(width as usize - 2)) + .repeat(height as usize - 2), + ), + ); + } } crate::style::Background::RoundedOutline(c) => { let width = width + self.transform.px * 2;