mirror of
https://github.com/bevyengine/bevy
synced 2025-01-07 18:58:58 +00:00
efda7f3f9c
Takes the first two commits from #15375 and adds suggestions from this comment: https://github.com/bevyengine/bevy/pull/15375#issuecomment-2366968300 See #15375 for more reasoning/motivation. ## Rebasing (rerunning) ```rust git switch simpler-lint-fixes git reset --hard main cargo fmt --all -- --unstable-features --config normalize_comments=true,imports_granularity=Crate cargo fmt --all git add --update git commit --message "rustfmt" cargo clippy --workspace --all-targets --all-features --fix cargo fmt --all -- --unstable-features --config normalize_comments=true,imports_granularity=Crate cargo fmt --all git add --update git commit --message "clippy" git cherry-pick e6c0b94f6795222310fb812fa5c4512661fc7887 ```
71 lines
2.1 KiB
Rust
71 lines
2.1 KiB
Rust
use bevy_ecs::{component::Component, reflect::ReflectComponent};
|
|
use bevy_math::Vec2;
|
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
|
|
|
/// The maximum width and height of text. The text will wrap according to the specified size.
|
|
///
|
|
/// Characters out of the bounds after wrapping will be truncated. Text is aligned according to the
|
|
/// specified [`JustifyText`](crate::text::JustifyText).
|
|
///
|
|
/// Note: only characters that are completely out of the bounds will be truncated, so this is not a
|
|
/// reliable limit if it is necessary to contain the text strictly in the bounds. Currently this
|
|
/// component is mainly useful for text wrapping only.
|
|
#[derive(Component, Copy, Clone, Debug, Reflect)]
|
|
#[reflect(Component, Default, Debug)]
|
|
pub struct TextBounds {
|
|
/// The maximum width of text in logical pixels.
|
|
/// If `None`, the width is unbounded.
|
|
pub width: Option<f32>,
|
|
/// The maximum height of text in logical pixels.
|
|
/// If `None`, the height is unbounded.
|
|
pub height: Option<f32>,
|
|
}
|
|
|
|
impl Default for TextBounds {
|
|
#[inline]
|
|
fn default() -> Self {
|
|
Self::UNBOUNDED
|
|
}
|
|
}
|
|
|
|
impl TextBounds {
|
|
/// Unbounded text will not be truncated or wrapped.
|
|
pub const UNBOUNDED: Self = Self {
|
|
width: None,
|
|
height: None,
|
|
};
|
|
|
|
/// Creates a new `TextBounds`, bounded with the specified width and height values.
|
|
#[inline]
|
|
pub const fn new(width: f32, height: f32) -> Self {
|
|
Self {
|
|
width: Some(width),
|
|
height: Some(height),
|
|
}
|
|
}
|
|
|
|
/// Creates a new `TextBounds`, bounded with the specified width value and unbounded on height.
|
|
#[inline]
|
|
pub const fn new_horizontal(width: f32) -> Self {
|
|
Self {
|
|
width: Some(width),
|
|
height: None,
|
|
}
|
|
}
|
|
|
|
/// Creates a new `TextBounds`, bounded with the specified height value and unbounded on width.
|
|
#[inline]
|
|
pub const fn new_vertical(height: f32) -> Self {
|
|
Self {
|
|
width: None,
|
|
height: Some(height),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<Vec2> for TextBounds {
|
|
#[inline]
|
|
fn from(v: Vec2) -> Self {
|
|
Self::new(v.x, v.y)
|
|
}
|
|
}
|