Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_text/src/bounds.rs
6596 views
1
use bevy_ecs::{component::Component, reflect::ReflectComponent};
2
use bevy_math::Vec2;
3
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
4
5
/// The maximum width and height of text. The text will wrap according to the specified size.
6
///
7
/// Characters out of the bounds after wrapping will be truncated. Text is aligned according to the
8
/// specified [`Justify`](crate::text::Justify).
9
///
10
/// Note: only characters that are completely out of the bounds will be truncated, so this is not a
11
/// reliable limit if it is necessary to contain the text strictly in the bounds. Currently this
12
/// component is mainly useful for text wrapping only.
13
#[derive(Component, Copy, Clone, Debug, Reflect)]
14
#[reflect(Component, Default, Debug, Clone)]
15
pub struct TextBounds {
16
/// The maximum width of text in logical pixels.
17
/// If `None`, the width is unbounded.
18
pub width: Option<f32>,
19
/// The maximum height of text in logical pixels.
20
/// If `None`, the height is unbounded.
21
pub height: Option<f32>,
22
}
23
24
impl Default for TextBounds {
25
#[inline]
26
fn default() -> Self {
27
Self::UNBOUNDED
28
}
29
}
30
31
impl TextBounds {
32
/// Unbounded text will not be truncated or wrapped.
33
pub const UNBOUNDED: Self = Self {
34
width: None,
35
height: None,
36
};
37
38
/// Creates a new `TextBounds`, bounded with the specified width and height values.
39
#[inline]
40
pub const fn new(width: f32, height: f32) -> Self {
41
Self {
42
width: Some(width),
43
height: Some(height),
44
}
45
}
46
47
/// Creates a new `TextBounds`, bounded with the specified width value and unbounded on height.
48
#[inline]
49
pub const fn new_horizontal(width: f32) -> Self {
50
Self {
51
width: Some(width),
52
height: None,
53
}
54
}
55
56
/// Creates a new `TextBounds`, bounded with the specified height value and unbounded on width.
57
#[inline]
58
pub const fn new_vertical(height: f32) -> Self {
59
Self {
60
width: None,
61
height: Some(height),
62
}
63
}
64
}
65
66
impl From<Vec2> for TextBounds {
67
#[inline]
68
fn from(v: Vec2) -> Self {
69
Self::new(v.x, v.y)
70
}
71
}
72
73