Skip to content
Snippets Groups Projects
font_per_widget.rs 10.4 KiB
Newer Older
#![allow(clippy::type_complexity)]

StaffEngineer's avatar
StaffEngineer committed
use bevy::{prelude::*, window::PrimaryWindow};
use bevy_cosmic_edit::change_active_editor_sprite;
use bevy_cosmic_edit::change_active_editor_ui;
StaffEngineer's avatar
StaffEngineer committed
use bevy_cosmic_edit::{
    ActiveEditor, CosmicAttrs, CosmicEditPlugin, CosmicEditUiBundle, CosmicFontConfig,
    CosmicFontSystem, CosmicMetrics, CosmicText, CosmicTextPosition,
StaffEngineer's avatar
StaffEngineer committed
};
use cosmic_text::{Attrs, AttrsOwned, Family};
StaffEngineer's avatar
StaffEngineer committed

fn setup(
    mut commands: Commands,
    windows: Query<&Window, With<PrimaryWindow>>,
    mut font_system: ResMut<CosmicFontSystem>,
StaffEngineer's avatar
StaffEngineer committed
) {
    commands.spawn(Camera2dBundle::default());
    let root = commands
        .spawn(NodeBundle {
            style: bevy::prelude::Style {
                position_type: PositionType::Absolute,
                width: Val::Percent(100.),
                height: Val::Percent(100.),
                ..default()
            },
            ..default()
        })
        .id();
    let primary_window = windows.single();

    let attrs = Attrs::new();
    let serif_attrs = attrs.family(Family::Serif);
    let mono_attrs = attrs.family(Family::Monospace);
    let comic_attrs = attrs.family(Family::Name("Comic Neue"));
    let lines: Vec<Vec<(String, AttrsOwned)>> = vec![
        vec![
            (
                String::from("B"),
                AttrsOwned::new(attrs.weight(cosmic_text::Weight::BOLD)),
            ),
            (String::from("old "), AttrsOwned::new(attrs)),
            (
                String::from("I"),
                AttrsOwned::new(attrs.style(cosmic_text::Style::Italic)),
            ),
            (String::from("talic "), AttrsOwned::new(attrs)),
            (String::from("f"), AttrsOwned::new(attrs)),
            (String::from("i "), AttrsOwned::new(attrs)),
            (
                String::from("f"),
                AttrsOwned::new(attrs.weight(cosmic_text::Weight::BOLD)),
            ),
            (String::from("i "), AttrsOwned::new(attrs)),
            (
                String::from("f"),
                AttrsOwned::new(attrs.style(cosmic_text::Style::Italic)),
            ),
            (String::from("i "), AttrsOwned::new(attrs)),
        ],
        vec![
            (String::from("Sans-Serif Normal "), AttrsOwned::new(attrs)),
            (
                String::from("Sans-Serif Bold "),
                AttrsOwned::new(attrs.weight(cosmic_text::Weight::BOLD)),
            ),
            (
                String::from("Sans-Serif Italic "),
                AttrsOwned::new(attrs.style(cosmic_text::Style::Italic)),
            ),
            (
                String::from("Sans-Serif Bold Italic"),
                AttrsOwned::new(
                    attrs
                        .weight(cosmic_text::Weight::BOLD)
                        .style(cosmic_text::Style::Italic),
                ),
            ),
        ],
        vec![
            (String::from("Serif Normal "), AttrsOwned::new(serif_attrs)),
            (
                String::from("Serif Bold "),
                AttrsOwned::new(serif_attrs.weight(cosmic_text::Weight::BOLD)),
            ),
            (
                String::from("Serif Italic "),
                AttrsOwned::new(serif_attrs.style(cosmic_text::Style::Italic)),
            ),
            (
                String::from("Serif Bold Italic"),
                AttrsOwned::new(
                    serif_attrs
                        .weight(cosmic_text::Weight::BOLD)
                        .style(cosmic_text::Style::Italic),
                ),
            ),
        ],
        vec![
            (String::from("Mono Normal "), AttrsOwned::new(mono_attrs)),
            (
                String::from("Mono Bold "),
                AttrsOwned::new(mono_attrs.weight(cosmic_text::Weight::BOLD)),
            ),
            (
                String::from("Mono Italic "),
                AttrsOwned::new(mono_attrs.style(cosmic_text::Style::Italic)),
            ),
            (
                String::from("Mono Bold Italic"),
                AttrsOwned::new(
                    mono_attrs
                        .weight(cosmic_text::Weight::BOLD)
                        .style(cosmic_text::Style::Italic),
                ),
            ),
        ],
        vec![
            (String::from("Comic Normal "), AttrsOwned::new(comic_attrs)),
            (
                String::from("Comic Bold "),
                AttrsOwned::new(comic_attrs.weight(cosmic_text::Weight::BOLD)),
            ),
            (
                String::from("Comic Italic "),
                AttrsOwned::new(comic_attrs.style(cosmic_text::Style::Italic)),
            ),
            (
                String::from("Comic Bold Italic"),
                AttrsOwned::new(
                    comic_attrs
                        .weight(cosmic_text::Weight::BOLD)
                        .style(cosmic_text::Style::Italic),
                ),
            ),
        ],
        vec![
            (
                String::from("R"),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0xFF, 0x00, 0x00))),
            ),
            (
                String::from("A"),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0xFF, 0x7F, 0x00))),
            ),
            (
                String::from("I"),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0xFF, 0xFF, 0x00))),
            ),
            (
                String::from("N"),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0x00, 0xFF, 0x00))),
            ),
            (
                String::from("B"),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0x00, 0x00, 0xFF))),
            ),
            (
                String::from("O"),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0x4B, 0x00, 0x82))),
            ),
            (
                String::from("W "),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0x94, 0x00, 0xD3))),
            ),
            (
                String::from("Red "),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0xFF, 0x00, 0x00))),
            ),
            (
                String::from("Orange "),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0xFF, 0x7F, 0x00))),
            ),
            (
                String::from("Yellow "),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0xFF, 0xFF, 0x00))),
            ),
            (
                String::from("Green "),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0x00, 0xFF, 0x00))),
            ),
            (
                String::from("Blue "),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0x00, 0x00, 0xFF))),
            ),
            (
                String::from("Indigo "),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0x4B, 0x00, 0x82))),
            ),
            (
                String::from("Violet "),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0x94, 0x00, 0xD3))),
            ),
            (
                String::from("U"),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0x94, 0x00, 0xD3))),
            ),
            (
                String::from("N"),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0x4B, 0x00, 0x82))),
            ),
            (
                String::from("I"),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0x00, 0x00, 0xFF))),
            ),
            (
                String::from("C"),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0x00, 0xFF, 0x00))),
            ),
            (
                String::from("O"),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0xFF, 0xFF, 0x00))),
            ),
            (
                String::from("R"),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0xFF, 0x7F, 0x00))),
            ),
            (
                String::from("N"),
                AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0xFF, 0x00, 0x00))),
            ),
        ],
        vec![(
            String::from("生活,삶,जिंदगी 😀 FPS"),
            AttrsOwned::new(attrs.color(cosmic_text::Color::rgb(0xFF, 0x00, 0x00))),
        )],
    ];

    let cosmic_edit_1 = CosmicEditUiBundle {
        text_position: bevy_cosmic_edit::CosmicTextPosition::Center,
        cosmic_attrs: CosmicAttrs(AttrsOwned::new(attrs)),
        cosmic_metrics: CosmicMetrics {
StaffEngineer's avatar
StaffEngineer committed
            font_size: 18.,
            line_height: 22.,
            scale_factor: primary_window.scale_factor() as f32,
        },
        style: Style {
            width: Val::Percent(50.),
            height: Val::Percent(100.),
            ..default()
        },
        background_color: BackgroundColor(Color::WHITE),
        ..default()
    }
    .set_text(
        CosmicText::MultiStyle(lines),
        AttrsOwned::new(attrs),
        &mut font_system.0,
    );
StaffEngineer's avatar
StaffEngineer committed

    let mut attrs_2 = cosmic_text::Attrs::new();
    attrs_2 = attrs_2.family(cosmic_text::Family::Name("Times New Roman"));

    let cosmic_edit_2 = CosmicEditUiBundle {
        cosmic_attrs: CosmicAttrs(AttrsOwned::new(attrs_2)),
        cosmic_metrics: CosmicMetrics {
StaffEngineer's avatar
StaffEngineer committed
            font_size: 14.,
            line_height: 18.,
            scale_factor: primary_window.scale_factor() as f32,
        },
        text_position: CosmicTextPosition::Center,
        background_color: BackgroundColor(Color::WHITE.with_a(0.8)),
        style: Style {
            width: Val::Percent(50.),
            height: Val::Percent(100.),
            ..default()
        },
        ..default()
    }
    .set_text(
        CosmicText::OneStyle("Widget 2.\nClick on me =>".to_string()),
        AttrsOwned::new(attrs_2),
        &mut font_system.0,
    );
StaffEngineer's avatar
StaffEngineer committed

    let mut id = None;
    // Spawn the CosmicEditUiBundles as children of root
    commands.entity(root).with_children(|parent| {
        id = Some(parent.spawn(cosmic_edit_1).id());
        parent.spawn(cosmic_edit_2);
StaffEngineer's avatar
StaffEngineer committed
    });

    // Set active editor
    commands.insert_resource(ActiveEditor { entity: id });
StaffEngineer's avatar
StaffEngineer committed
}

fn main() {
    let font_config = CosmicFontConfig {
        fonts_dir_path: None,
        font_bytes: None,
        load_system_fonts: true,
    };

StaffEngineer's avatar
StaffEngineer committed
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugins(CosmicEditPlugin { font_config })
StaffEngineer's avatar
StaffEngineer committed
        .add_systems(Startup, setup)
        .add_systems(Update, change_active_editor_ui)
        .add_systems(Update, change_active_editor_sprite)
StaffEngineer's avatar
StaffEngineer committed
        .run();
}