bug fix and better rendering

This commit is contained in:
2025-07-01 13:02:52 -05:00
parent 41abba18b0
commit 5c2b260e14
4 changed files with 30 additions and 18 deletions
+2 -1
View File
@@ -4,7 +4,8 @@ pub struct Rect;
impl Element for Rect { impl Element for Rect {
fn render(&mut self, scope: &mut crate::render::RenderScope) { fn render(&mut self, scope: &mut crate::render::RenderScope) {
scope.draw_rect(300, 300, 0xffffff); let (w, h) = scope.get_size();
scope.draw_rect(0, 0, w, h, 0xffffff);
} }
fn as_any(&self) -> &dyn std::any::Any { fn as_any(&self) -> &dyn std::any::Any {
+13 -2
View File
@@ -61,8 +61,19 @@ impl Screen {
let (w, h) = self.window.get_size(); let (w, h) = self.window.get_size();
let mut scope = RenderScope::new(w, h); let mut scope = RenderScope::new(w, h);
for e in &self.widgets { for elem in &self.widgets {
e.0.lock().unwrap().render(&mut scope); scope.clear();
if let Some(t) = elem.get() {
scope.set_transform(&t);
}
self.render_extension(elem.clone()).unwrap();
elem.0.lock().unwrap().render(&mut scope);
if let Some(t) = elem.get() {
scope.set_transform(&t);
}
scope.draw(); scope.draw();
} }
+4 -1
View File
@@ -2,6 +2,7 @@ use minifb::{Window, WindowOptions};
use osgui::{ use osgui::{
elements::Rect, elements::Rect,
extensions::velocity::{Velocity, VelocityExtension}, extensions::velocity::{Velocity, VelocityExtension},
style::Transform,
Screen, Screen,
}; };
@@ -20,7 +21,9 @@ fn main() {
let mut app = Screen::new(window); let mut app = Screen::new(window);
app.extension(VelocityExtension); app.extension(VelocityExtension);
app.draw(Rect).component(Velocity(100, 0)); app.draw(Rect)
.component(Transform::new().dimensions(40, 40))
.component(Velocity(500, 0));
app.run().unwrap(); app.run().unwrap();
} }
+10 -13
View File
@@ -2,7 +2,7 @@ use crate::style::{RawTransform, Transform};
enum RenderMethod { enum RenderMethod {
// Text(String), // Text(String),
Rectangle(usize, usize, u32), Rectangle(usize, usize, usize, usize, u32),
} }
pub struct RenderScope { pub struct RenderScope {
@@ -29,16 +29,9 @@ impl RenderScope {
transform.use_position(self.parent_width, self.parent_height, &mut self.transform); transform.use_position(self.parent_width, self.parent_height, &mut self.transform);
} }
// pub fn draw_text(&mut self, text: &str) { pub fn draw_rect(&mut self, x: usize, y: usize, width: usize, height: usize, color: u32) {
// self.render_stack.push(RenderMethod::Text(text.to_string()));
// let (w, h) = utils::str_size(text);
// self.transform.width = self.transform.width.max(w);
// self.transform.height = self.transform.height.max(h);
// }
pub fn draw_rect(&mut self, width: usize, height: usize, color: u32) {
self.render_stack self.render_stack
.push(RenderMethod::Rectangle(width, height, color)); .push(RenderMethod::Rectangle(x, y, width, height, color));
self.transform.width = self.transform.width.max(width); self.transform.width = self.transform.width.max(width);
self.transform.height = self.transform.height.max(height); self.transform.height = self.transform.height.max(height);
} }
@@ -46,9 +39,12 @@ impl RenderScope {
pub fn draw(&mut self) { pub fn draw(&mut self) {
for m in &self.render_stack { for m in &self.render_stack {
match m { match m {
&RenderMethod::Rectangle(width, height, color) => { &RenderMethod::Rectangle(pos_x, pos_y, width, height, color) => {
for y in 0..height { for x in self.transform.x + pos_x..self.transform.x + pos_x + width {
for x in 0..width { for y in self.transform.y + pos_y..self.transform.y + pos_y + height {
if self.buffer.len() > y * self.parent_height + x
&& self.parent_width > x
{
self.buffer[y * self.parent_height + x] = color; self.buffer[y * self.parent_height + x] = color;
} }
} }
@@ -56,6 +52,7 @@ impl RenderScope {
} }
} }
} }
}
pub fn clear(&mut self) { pub fn clear(&mut self) {
self.render_stack.clear(); self.render_stack.clear();