use bevy::prelude::*;
use crate::element::{Common, Element, SpawnCtx};
use crate::ext::{ElementFlags, TextRole};
use crate::ui_map::text_layout;
pub static TEXT: Element = Element {
flags: ElementFlags {
text: TextRole::Block,
..ElementFlags::NODE
},
spawn: Some(spawn_text),
..Element::new("text")
};
pub static TEXT_SPAN: Element = Element {
flags: ElementFlags {
text: TextRole::Span,
..ElementFlags::NODE_LESS
},
common: Common::IDENTITY,
spawn: Some(spawn_span),
..Element::new("textSpan")
};
fn spawn_text(ctx: &mut SpawnCtx) -> Entity {
let text = Text::new(ctx.text.unwrap_or_default());
let resolved = ctx.text_style();
let layout = text_layout(ctx.style.as_ref());
let entity = ctx.spawn((text, resolved));
if let Some(layout) = layout {
ctx.commands.entity(entity).insert(layout);
}
entity
}
fn spawn_span(ctx: &mut SpawnCtx) -> Entity {
let span = TextSpan(ctx.text.unwrap_or_default().to_owned());
let resolved = ctx.text_style();
ctx.spawn((span, resolved))
}