Extract module out
This commit is contained in:
parent
cfc92ecb55
commit
4fb0f30862
|
@ -1,10 +1,10 @@
|
||||||
use crate::{events::is_supported_event, tick::IntrinsicTextNode};
|
use crate::{events::is_supported_event, parse_attributes::set_attribute, tick::IntrinsicTextNode};
|
||||||
use bevy::{
|
use bevy::{
|
||||||
ecs::{entity::Entity, system::Command, world::World},
|
ecs::{entity::Entity, system::Command, world::World},
|
||||||
hierarchy::{BuildWorldChildren, Children, DespawnRecursive, Parent},
|
hierarchy::{BuildWorldChildren, Children, DespawnRecursive, Parent},
|
||||||
prelude::default,
|
prelude::default,
|
||||||
render::color::Color,
|
render::color::Color,
|
||||||
text::{Text, TextAlignment, TextLayoutInfo, TextStyle},
|
text::{Text, TextLayoutInfo, TextStyle},
|
||||||
ui::{
|
ui::{
|
||||||
node_bundles::{NodeBundle, TextBundle},
|
node_bundles::{NodeBundle, TextBundle},
|
||||||
widget::TextFlags,
|
widget::TextFlags,
|
||||||
|
@ -357,113 +357,3 @@ fn parse_template_attributes(attributes: &[TemplateAttribute]) -> (Style, Backgr
|
||||||
}
|
}
|
||||||
(style, background_color, text)
|
(style, background_color, text)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_attribute(
|
|
||||||
name: &str,
|
|
||||||
value: &str,
|
|
||||||
style: &mut Style,
|
|
||||||
background_color: &mut BackgroundColor,
|
|
||||||
text: Option<&mut Text>,
|
|
||||||
) {
|
|
||||||
match (name, value) {
|
|
||||||
("display", "flex") => style.display = Display::Flex,
|
|
||||||
("display", "grid") => style.display = Display::Grid,
|
|
||||||
("display", "none") => style.display = Display::None,
|
|
||||||
("position", "relative") => style.position_type = PositionType::Relative,
|
|
||||||
("position", "absolute") => style.position_type = PositionType::Absolute,
|
|
||||||
("overflow", "visible") => style.overflow = Overflow::visible(),
|
|
||||||
("overflow", "clip") => style.overflow = Overflow::clip(),
|
|
||||||
("overflow_x", "visible") => style.overflow.x = OverflowAxis::Visible,
|
|
||||||
("overflow_x", "clip") => style.overflow.x = OverflowAxis::Clip,
|
|
||||||
("overflow_y", "visible") => style.overflow.y = OverflowAxis::Visible,
|
|
||||||
("overflow_y", "clip") => style.overflow.y = OverflowAxis::Clip,
|
|
||||||
("left", val) => style.left = parse_val(val),
|
|
||||||
("right", val) => style.right = parse_val(val),
|
|
||||||
("top", val) => style.top = parse_val(val),
|
|
||||||
("bottom", val) => style.bottom = parse_val(val),
|
|
||||||
("width", val) => style.width = parse_val(val),
|
|
||||||
("height", val) => style.height = parse_val(val),
|
|
||||||
("min_width", val) => style.min_width = parse_val(val),
|
|
||||||
("min_height", val) => style.min_height = parse_val(val),
|
|
||||||
("max_width", val) => style.max_width = parse_val(val),
|
|
||||||
("max_height", val) => style.max_height = parse_val(val),
|
|
||||||
("aspect_ratio", "none") => style.aspect_ratio = None,
|
|
||||||
("aspect_ratio", float) => {
|
|
||||||
style.aspect_ratio = Some(
|
|
||||||
float
|
|
||||||
.parse::<f32>()
|
|
||||||
.unwrap_or_else(|val| panic!("Encountered invalid bevy_dioxus f32 `{val}`.")),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
("align_items", "default") => style.align_items = AlignItems::Default,
|
|
||||||
("align_items", "start") => style.align_items = AlignItems::Start,
|
|
||||||
("align_items", "end") => style.align_items = AlignItems::End,
|
|
||||||
("align_items", "flex_start") => style.align_items = AlignItems::FlexStart,
|
|
||||||
("align_items", "flex_end") => style.align_items = AlignItems::FlexEnd,
|
|
||||||
("align_items", "center") => style.align_items = AlignItems::Center,
|
|
||||||
("align_items", "baseline") => style.align_items = AlignItems::Baseline,
|
|
||||||
("align_items", "stretch") => style.align_items = AlignItems::Stretch,
|
|
||||||
// TODO: The rest of the attributes from here on out
|
|
||||||
("flex_direction", "column") => style.flex_direction = FlexDirection::Column,
|
|
||||||
("background_color", hex) => {
|
|
||||||
background_color.0 = Color::hex(hex).expect(&format!(
|
|
||||||
"Encountered invalid bevy_dioxus Color hex `{hex}`."
|
|
||||||
));
|
|
||||||
}
|
|
||||||
("padding", val) => style.padding = UiRect::all(parse_val(val)),
|
|
||||||
("justify_content", "space_between") => {
|
|
||||||
style.justify_content = JustifyContent::SpaceBetween;
|
|
||||||
}
|
|
||||||
("align_content", "space_between") => style.align_content = AlignContent::SpaceBetween,
|
|
||||||
("text", new_text) if text.is_some() => text.unwrap().sections[0] = new_text.into(),
|
|
||||||
("text_direction", "inherit") if text.is_some() => style.direction = Direction::Inherit,
|
|
||||||
("text_direction", "left_to_right") if text.is_some() => {
|
|
||||||
style.direction = Direction::LeftToRight;
|
|
||||||
}
|
|
||||||
("text_direction", "right_to_left") if text.is_some() => {
|
|
||||||
style.direction = Direction::RightToLeft;
|
|
||||||
}
|
|
||||||
("text_alignment", "left") if text.is_some() => {
|
|
||||||
text.unwrap().alignment = TextAlignment::Left;
|
|
||||||
}
|
|
||||||
("text_alignment", "center") if text.is_some() => {
|
|
||||||
text.unwrap().alignment = TextAlignment::Center;
|
|
||||||
}
|
|
||||||
("text_alignment", "right") if text.is_some() => {
|
|
||||||
text.unwrap().alignment = TextAlignment::Right;
|
|
||||||
}
|
|
||||||
("text_size", val) if text.is_some() => {
|
|
||||||
text.unwrap().sections[0].style.font_size = val
|
|
||||||
.parse::<f32>()
|
|
||||||
.unwrap_or_else(|val| panic!("Encountered invalid bevy_dioxus f32 `{val}`."));
|
|
||||||
}
|
|
||||||
("text_color", hex) if text.is_some() => {
|
|
||||||
text.unwrap().sections[0].style.color = Color::hex(hex).expect(&format!(
|
|
||||||
"Encountered invalid bevy_dioxus Color hex `{hex}`."
|
|
||||||
));
|
|
||||||
}
|
|
||||||
_ => panic!("Encountered unsupported bevy_dioxus attribute `{name}: {value}`."),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn parse_val(val: &str) -> Val {
|
|
||||||
if let Ok(val) = val.parse::<f32>() {
|
|
||||||
return Val::Px(val);
|
|
||||||
}
|
|
||||||
if let Some((val, "")) = val.split_once("px") {
|
|
||||||
if let Ok(val) = val.parse::<f32>() {
|
|
||||||
return Val::Px(val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if let Some((val, "")) = val.split_once("vw") {
|
|
||||||
if let Ok(val) = val.parse::<f32>() {
|
|
||||||
return Val::Vw(val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if let Some((val, "")) = val.split_once("vh") {
|
|
||||||
if let Ok(val) = val.parse::<f32>() {
|
|
||||||
return Val::Vh(val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
panic!("Encountered invalid bevy_dioxus Val `{val}`.");
|
|
||||||
}
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ mod elements;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
mod events;
|
mod events;
|
||||||
mod hooks;
|
mod hooks;
|
||||||
|
mod parse_attributes;
|
||||||
mod tick;
|
mod tick;
|
||||||
|
|
||||||
use self::{
|
use self::{
|
||||||
|
|
115
src/parse_attributes.rs
Normal file
115
src/parse_attributes.rs
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
use bevy::{
|
||||||
|
render::color::Color,
|
||||||
|
text::{Text, TextAlignment},
|
||||||
|
ui::*,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub fn set_attribute(
|
||||||
|
name: &str,
|
||||||
|
value: &str,
|
||||||
|
style: &mut Style,
|
||||||
|
background_color: &mut BackgroundColor,
|
||||||
|
text: Option<&mut Text>,
|
||||||
|
) {
|
||||||
|
match (name, value) {
|
||||||
|
("display", "flex") => style.display = Display::Flex,
|
||||||
|
("display", "grid") => style.display = Display::Grid,
|
||||||
|
("display", "none") => style.display = Display::None,
|
||||||
|
("position", "relative") => style.position_type = PositionType::Relative,
|
||||||
|
("position", "absolute") => style.position_type = PositionType::Absolute,
|
||||||
|
("overflow", "visible") => style.overflow = Overflow::visible(),
|
||||||
|
("overflow", "clip") => style.overflow = Overflow::clip(),
|
||||||
|
("overflow_x", "visible") => style.overflow.x = OverflowAxis::Visible,
|
||||||
|
("overflow_x", "clip") => style.overflow.x = OverflowAxis::Clip,
|
||||||
|
("overflow_y", "visible") => style.overflow.y = OverflowAxis::Visible,
|
||||||
|
("overflow_y", "clip") => style.overflow.y = OverflowAxis::Clip,
|
||||||
|
("left", val) => style.left = parse_val(val),
|
||||||
|
("right", val) => style.right = parse_val(val),
|
||||||
|
("top", val) => style.top = parse_val(val),
|
||||||
|
("bottom", val) => style.bottom = parse_val(val),
|
||||||
|
("width", val) => style.width = parse_val(val),
|
||||||
|
("height", val) => style.height = parse_val(val),
|
||||||
|
("min_width", val) => style.min_width = parse_val(val),
|
||||||
|
("min_height", val) => style.min_height = parse_val(val),
|
||||||
|
("max_width", val) => style.max_width = parse_val(val),
|
||||||
|
("max_height", val) => style.max_height = parse_val(val),
|
||||||
|
("aspect_ratio", "none") => style.aspect_ratio = None,
|
||||||
|
("aspect_ratio", float) => {
|
||||||
|
style.aspect_ratio = Some(
|
||||||
|
float
|
||||||
|
.parse::<f32>()
|
||||||
|
.unwrap_or_else(|val| panic!("Encountered invalid bevy_dioxus f32 `{val}`.")),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
("align_items", "default") => style.align_items = AlignItems::Default,
|
||||||
|
("align_items", "start") => style.align_items = AlignItems::Start,
|
||||||
|
("align_items", "end") => style.align_items = AlignItems::End,
|
||||||
|
("align_items", "flex_start") => style.align_items = AlignItems::FlexStart,
|
||||||
|
("align_items", "flex_end") => style.align_items = AlignItems::FlexEnd,
|
||||||
|
("align_items", "center") => style.align_items = AlignItems::Center,
|
||||||
|
("align_items", "baseline") => style.align_items = AlignItems::Baseline,
|
||||||
|
("align_items", "stretch") => style.align_items = AlignItems::Stretch,
|
||||||
|
// TODO: The rest of the attributes from here on out
|
||||||
|
("flex_direction", "column") => style.flex_direction = FlexDirection::Column,
|
||||||
|
("background_color", hex) => {
|
||||||
|
background_color.0 = Color::hex(hex).expect(&format!(
|
||||||
|
"Encountered invalid bevy_dioxus Color hex `{hex}`."
|
||||||
|
));
|
||||||
|
}
|
||||||
|
("padding", val) => style.padding = UiRect::all(parse_val(val)),
|
||||||
|
("justify_content", "space_between") => {
|
||||||
|
style.justify_content = JustifyContent::SpaceBetween;
|
||||||
|
}
|
||||||
|
("align_content", "space_between") => style.align_content = AlignContent::SpaceBetween,
|
||||||
|
("text", new_text) if text.is_some() => text.unwrap().sections[0] = new_text.into(),
|
||||||
|
("text_direction", "inherit") if text.is_some() => style.direction = Direction::Inherit,
|
||||||
|
("text_direction", "left_to_right") if text.is_some() => {
|
||||||
|
style.direction = Direction::LeftToRight;
|
||||||
|
}
|
||||||
|
("text_direction", "right_to_left") if text.is_some() => {
|
||||||
|
style.direction = Direction::RightToLeft;
|
||||||
|
}
|
||||||
|
("text_alignment", "left") if text.is_some() => {
|
||||||
|
text.unwrap().alignment = TextAlignment::Left;
|
||||||
|
}
|
||||||
|
("text_alignment", "center") if text.is_some() => {
|
||||||
|
text.unwrap().alignment = TextAlignment::Center;
|
||||||
|
}
|
||||||
|
("text_alignment", "right") if text.is_some() => {
|
||||||
|
text.unwrap().alignment = TextAlignment::Right;
|
||||||
|
}
|
||||||
|
("text_size", val) if text.is_some() => {
|
||||||
|
text.unwrap().sections[0].style.font_size = val
|
||||||
|
.parse::<f32>()
|
||||||
|
.unwrap_or_else(|val| panic!("Encountered invalid bevy_dioxus f32 `{val}`."));
|
||||||
|
}
|
||||||
|
("text_color", hex) if text.is_some() => {
|
||||||
|
text.unwrap().sections[0].style.color = Color::hex(hex).expect(&format!(
|
||||||
|
"Encountered invalid bevy_dioxus Color hex `{hex}`."
|
||||||
|
));
|
||||||
|
}
|
||||||
|
_ => panic!("Encountered unsupported bevy_dioxus attribute `{name}: {value}`."),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_val(val: &str) -> Val {
|
||||||
|
if let Ok(val) = val.parse::<f32>() {
|
||||||
|
return Val::Px(val);
|
||||||
|
}
|
||||||
|
if let Some((val, "")) = val.split_once("px") {
|
||||||
|
if let Ok(val) = val.parse::<f32>() {
|
||||||
|
return Val::Px(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let Some((val, "")) = val.split_once("vw") {
|
||||||
|
if let Ok(val) = val.parse::<f32>() {
|
||||||
|
return Val::Vw(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let Some((val, "")) = val.split_once("vh") {
|
||||||
|
if let Ok(val) = val.parse::<f32>() {
|
||||||
|
return Val::Vh(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
panic!("Encountered invalid bevy_dioxus Val `{val}`.");
|
||||||
|
}
|
Loading…
Reference in a new issue