wip rounded corners api

This commit is contained in:
griffi-gh 2024-02-19 03:41:48 +01:00
parent b04694ce83
commit 4828500c45
4 changed files with 43 additions and 27 deletions

View file

@ -14,6 +14,9 @@ pub enum UiDrawCommand {
size: Vec2, size: Vec2,
///Color (RGBA) ///Color (RGBA)
color: Vec4, color: Vec4,
//TODO: rounded corners per side
///Rounded corners
corner_radius: Option<f32>,
}, },
Text { Text {
///Position in pixels ///Position in pixels
@ -129,31 +132,38 @@ impl UiDrawPlan {
} }
match command { match command {
UiDrawCommand::Rectangle { position, size, color } => { UiDrawCommand::Rectangle { position, size, color, corner_radius } => {
let corner_radius = corner_radius.unwrap_or(0.0);
let vidx = swapper.current().vertices.len() as u32; let vidx = swapper.current().vertices.len() as u32;
swapper.current_mut().indices.extend([vidx, vidx + 1, vidx + 2, vidx, vidx + 2, vidx + 3]); if corner_radius > 0.0 {
swapper.current_mut().vertices.extend([ todo!("rounded corners are not implemented");
UiVertex { //TODO vtx-based rounded corners
position: *position, //swapper.current_mut().indices.extend();
color: *color, } else {
uv: vec2(0.0, 0.0), swapper.current_mut().indices.extend([vidx, vidx + 1, vidx + 2, vidx, vidx + 2, vidx + 3]);
}, swapper.current_mut().vertices.extend([
UiVertex { UiVertex {
position: *position + vec2(size.x, 0.0), position: *position,
color: *color, color: *color,
uv: vec2(1.0, 0.0), uv: vec2(0.0, 0.0),
}, },
UiVertex { UiVertex {
position: *position + *size, position: *position + vec2(size.x, 0.0),
color: *color, color: *color,
uv: vec2(1.0, 1.0), uv: vec2(1.0, 0.0),
}, },
UiVertex { UiVertex {
position: *position + vec2(0.0, size.y), position: *position + *size,
color: *color, color: *color,
uv: vec2(0.0, 1.0), uv: vec2(1.0, 1.0),
}, },
]); UiVertex {
position: *position + vec2(0.0, size.y),
color: *color,
uv: vec2(0.0, 1.0),
},
]);
}
}, },
UiDrawCommand::Text { position, size, color, text, font } => { UiDrawCommand::Text { position, size, color, text, font } => {
//XXX: should we be doing this every time? //XXX: should we be doing this every time?

View file

@ -62,6 +62,7 @@ pub struct Container {
pub borders: Sides<Option<Border>>, pub borders: Sides<Option<Border>>,
pub clip: bool, pub clip: bool,
pub elements: Vec<Box<dyn UiElement>>, pub elements: Vec<Box<dyn UiElement>>,
pub corner_radius: Option<f32>,
} }
impl Default for Container { impl Default for Container {
@ -79,6 +80,7 @@ impl Default for Container {
borders: Default::default(), borders: Default::default(),
clip: Default::default(), clip: Default::default(),
elements: Vec::new(), elements: Vec::new(),
corner_radius: None,
} }
} }
} }
@ -168,7 +170,8 @@ impl UiElement for Container {
ctx.draw.add(UiDrawCommand::Rectangle { ctx.draw.add(UiDrawCommand::Rectangle {
position, position,
size: ctx.measure.size, size: ctx.measure.size,
color color,
corner_radius: self.corner_radius,
}); });
} }

View file

@ -55,14 +55,16 @@ impl UiElement for ProgressBar {
ctx.draw.add(UiDrawCommand::Rectangle { ctx.draw.add(UiDrawCommand::Rectangle {
position: ctx.layout.position, position: ctx.layout.position,
size: ctx.measure.size, size: ctx.measure.size,
color: self.color_background color: self.color_background,
corner_radius: None,
}); });
} }
if value > 0. { if value > 0. {
ctx.draw.add(UiDrawCommand::Rectangle { ctx.draw.add(UiDrawCommand::Rectangle {
position: ctx.layout.position, position: ctx.layout.position,
size: ctx.measure.size * vec2(value, 1.0), size: ctx.measure.size * vec2(value, 1.0),
color: self.color_foreground color: self.color_foreground,
corner_radius: None,
}); });
} }
} }

View file

@ -46,6 +46,7 @@ impl UiElement for Rect {
position: ctx.layout.position, position: ctx.layout.position,
size: ctx.measure.size, size: ctx.measure.size,
color, color,
corner_radius: None,
}); });
} }
} }