extern crate alloc;
mod bounds;
mod cursor;
mod editing;
mod error;
mod font;
mod font_atlas;
mod font_atlas_set;
mod font_loader;
mod glyph;
mod parley_context;
mod pipeline;
mod text;
mod text_access;
mod text_edit;
pub use bounds::*;
pub use cursor::*;
pub use editing::*;
pub use error::*;
pub use font::*;
pub use font_atlas::*;
pub use font_atlas_set::*;
pub use font_loader::*;
pub use glyph::*;
pub use parley_context::*;
pub use pipeline::*;
pub use text::*;
pub use text_access::*;
pub use text_edit::*;
pub mod prelude {
#[doc(hidden)]
pub use crate::{
Font, FontHinting, FontSize, FontSmoothing, FontSource, FontStyle, FontWeight, FontWidth,
Justify, LineBreak, Strikethrough, StrikethroughColor, TextColor, TextError, TextFont,
TextLayout, TextSpan, Underline, UnderlineColor,
};
}
use bevy_app::prelude::*;
use bevy_asset::AssetApp;
use bevy_ecs::prelude::*;
#[cfg(feature = "default_font")]
pub const DEFAULT_FONT_DATA: &[u8] = include_bytes!("FiraMono-subset.ttf");
#[derive(Default)]
pub struct TextPlugin;
#[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)]
pub struct Text2dUpdateSystems;
#[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)]
pub struct EditableTextSystems;
impl Plugin for TextPlugin {
fn build(&self, app: &mut App) {
if !app.is_plugin_added::<bevy_clipboard::ClipboardPlugin>() {
app.add_plugins(bevy_clipboard::ClipboardPlugin);
}
app.init_asset::<Font>()
.init_asset_loader::<FontLoader>()
.init_resource::<FontAtlasSet>()
.init_resource::<TextPipeline>()
.init_resource::<FontCx>()
.init_resource::<LayoutCx>()
.init_resource::<ScaleCx>()
.init_resource::<TextIterScratch>()
.init_resource::<RemSize>()
.add_systems(
PostUpdate,
(
detect_text_needs_rerender,
load_font_assets_into_font_collection,
)
.chain(),
)
.add_systems(Last, trim_source_cache)
.add_systems(
PostUpdate,
apply_text_edits
.after(load_font_assets_into_font_collection)
.in_set(EditableTextSystems),
);
#[cfg(feature = "default_font")]
{
use bevy_asset::{AssetId, Assets};
let mut assets = app.world_mut().resource_mut::<Assets<Font>>();
let asset = Font::from_bytes(DEFAULT_FONT_DATA.to_vec(), "bevy default font");
assets.insert(AssetId::default(), asset).unwrap();
};
}
}