mirror of
https://github.com/bevyengine/bevy.git
synced 2026-05-06 06:06:42 -04:00
b00ff93c87
# Objective Remove the `new_with_` prefixes from the `TextLayout` constuctor functions. Generally, the "new" part is redundant and "with" is used by fluent APIs. ## Solution Just delete the prefixes, shorten the names (all on `TextLayout`). * `new_with_justify` -> `justify` * `new_with_linebreak` -> `linebreak` * `new_with_no_wrap` -> `no_wrap`
100 lines
3.3 KiB
Rust
100 lines
3.3 KiB
Rust
//! This example demonstrates generic font families,
|
|
//! which allow font faces to be selected using broadly defined
|
|
//! categories (such as serif or monospace) without selecting
|
|
//! a specific font family.
|
|
//!
|
|
//! Each generic font family is first resolved to a concrete
|
|
//! family name, which is then matched to a font in the internal
|
|
//! font database. This example loads system installed fonts to
|
|
//! populate the database.
|
|
//!
|
|
//! This feature is most useful for non-game applications;
|
|
//! most games instead choose to simply bundle their required fonts
|
|
//! to ensure a unified visual look.
|
|
|
|
use bevy::{
|
|
color::palettes::{
|
|
css::{WHEAT, YELLOW},
|
|
tailwind::ZINC_600,
|
|
},
|
|
prelude::*,
|
|
text::FontCx,
|
|
};
|
|
|
|
fn main() {
|
|
let mut app = App::new();
|
|
app.add_plugins(DefaultPlugins).add_systems(Startup, setup);
|
|
|
|
app.run();
|
|
}
|
|
|
|
const FONT_SIZE: FontSize = FontSize::Px(25.);
|
|
|
|
fn setup(mut commands: Commands, mut font_system: ResMut<FontCx>) {
|
|
// UI camera
|
|
commands.spawn(Camera2d);
|
|
|
|
commands
|
|
.spawn((Node {
|
|
display: Display::Grid,
|
|
grid_template_columns: vec![RepeatedGridTrack::fr(3, 1.)],
|
|
margin: UiRect::AUTO,
|
|
row_gap: px(25),
|
|
column_gap: px(15),
|
|
..Default::default()
|
|
},))
|
|
.with_children(|builder| {
|
|
builder.spawn((
|
|
Node {
|
|
justify_self: JustifySelf::Center,
|
|
grid_column: GridPlacement::span(3),
|
|
margin: UiRect::bottom(px(15)),
|
|
..default()
|
|
},
|
|
Text::new("Generic Font Families"),
|
|
TextFont::from_font_size(FONT_SIZE),
|
|
Underline,
|
|
));
|
|
|
|
let outline = Outline {
|
|
color: ZINC_600.into(),
|
|
width: px(2.),
|
|
offset: px(4.),
|
|
};
|
|
|
|
for (source, description) in [
|
|
(FontSource::SansSerif, "generic sans serif font"),
|
|
(FontSource::Serif, "generic serif font"),
|
|
(FontSource::Fantasy, "generic fantasy font"),
|
|
(FontSource::Cursive, "generic cursive font"),
|
|
(FontSource::Monospace, "generic monospace font"),
|
|
] {
|
|
builder.spawn((
|
|
Text::new(description),
|
|
TextFont::from(source.clone()).with_font_size(FONT_SIZE),
|
|
TextColor(WHEAT.into()),
|
|
TextLayout::justify(Justify::Center),
|
|
outline,
|
|
));
|
|
|
|
builder.spawn((
|
|
Text::new(format!("FontSource::{source:?}")),
|
|
TextFont::from_font_size(FONT_SIZE),
|
|
TextColor(YELLOW.into()),
|
|
TextLayout::justify(Justify::Center),
|
|
outline,
|
|
));
|
|
|
|
// Get the family name for the `FontSource` from `FontCx`.
|
|
// `get_family` only returns `None` for `FontSource::Handle`.
|
|
let family_name = font_system.get_family(&source).unwrap();
|
|
builder.spawn((
|
|
Text::new(family_name),
|
|
TextFont::from_font_size(FONT_SIZE),
|
|
TextLayout::justify(Justify::Center),
|
|
outline,
|
|
));
|
|
}
|
|
});
|
|
}
|