add br element, update docs

This commit is contained in:
griffi-gh 2024-03-12 01:38:11 +01:00
parent c3f32b3ddd
commit de9f41c296
4 changed files with 33 additions and 2 deletions

View file

@ -9,6 +9,9 @@ pub mod fill_rect;
#[cfg(feature = "builtin_elements")]
pub mod spacer;
#[cfg(feature = "builtin_elements")]
pub mod br;
// "The basics":
#[cfg(feature = "builtin_elements")]

View file

@ -0,0 +1,22 @@
use crate::{
element::{MeasureContext, ProcessContext, UiElement},
measure::Response
};
#[derive(Clone, Copy, Debug, Default)]
pub struct Br;
impl UiElement for Br {
fn name(&self) -> &'static str {
"Br"
}
fn measure(&self, _: MeasureContext) -> Response {
Response {
should_wrap: true,
..Default::default()
}
}
fn process(&self, _: ProcessContext) {}
}

View file

@ -76,7 +76,11 @@ pub struct Container {
#[setters(into)]
pub corner_radius: Corners<f32>,
/// Set this to `true` to allow the elements wrap automatically\
/// Set this to `true` to allow the elements wrap automatically
///
/// Disabling/enabling this does not affect explicit wrapping\
/// (for example, `Br`, or any other element with `should_wrap` set to `true`)
///
/// This is an experimental feature and may not work as expected
pub wrap: bool,
@ -206,7 +210,7 @@ impl UiElement for Container {
};
//Wrap the element if it exceeds container's size and is not the first element in the line
if self.wrap && (end_pos_pri > max_line_pri) && (line_element_count > 0) {
if ((self.wrap && (end_pos_pri > max_line_pri)) || measure.should_wrap) && (line_element_count > 0) {
// >>>>>>> WRAP THAT B*TCH!
//Negate the leftover gap from the previous element

View file

@ -26,6 +26,8 @@ pub struct Response {
/// (the element itself gets wrapped to the next line too)
///
/// You should almost never set this, and the exact behavior may change in the future
///
/// Currently, this forces wrapping even if Container::wrap is set to false
pub should_wrap: bool,
}