Skip to content
Snippets Groups Projects
Unverified Commit c19f9d0a authored by StaffEngineer's avatar StaffEngineer Committed by GitHub
Browse files

Merge pull request #9 from bytemunch/bevy_like_api

Refactor API to look like native bevy API
parents 5aa9467d abadf087
No related branches found
No related tags found
No related merge requests found
......@@ -2978,9 +2978,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
version = "0.2.86"
version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73"
checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
dependencies = [
"cfg-if",
"wasm-bindgen-macro",
......@@ -2988,9 +2988,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.86"
version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb"
checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
dependencies = [
"bumpalo",
"log",
......@@ -3015,9 +3015,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.86"
version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258"
checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
......@@ -3025,9 +3025,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.86"
version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8"
checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
dependencies = [
"proc-macro2",
"quote",
......@@ -3038,9 +3038,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.86"
version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93"
checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
[[package]]
name = "wayland-scanner"
......
......@@ -39,7 +39,7 @@ js-sys = "0.3.61"
insta = "1.29.0"
[[example]]
name = "basic_button"
name = "basic_ui"
[[example]]
name = "basic_sprite"
......
use bevy::{core_pipeline::clear_color::ClearColorConfig, prelude::*, window::PrimaryWindow};
use bevy_cosmic_edit::{
create_cosmic_font_system, spawn_cosmic_edit, ActiveEditor, CosmicEditMeta, CosmicEditPlugin,
CosmicEditSprite, CosmicFont, CosmicFontConfig, CosmicMetrics, CosmicNode, CosmicText,
CosmicTextPos,
ActiveEditor, CosmicAttrs, CosmicEditPlugin, CosmicEditSpriteBundle, CosmicFontConfig,
CosmicFontSystem, CosmicMetrics, CosmicText, CosmicTextPosition,
};
use cosmic_text::AttrsOwned;
fn setup(
mut commands: Commands,
windows: Query<&Window, With<PrimaryWindow>>,
mut cosmic_fonts: ResMut<Assets<CosmicFont>>,
mut font_system: ResMut<CosmicFontSystem>,
) {
let primary_window = windows.single();
let camera_bundle = Camera2dBundle {
......@@ -19,49 +18,51 @@ fn setup(
..default()
};
commands.spawn(camera_bundle);
let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
let cosmic_font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: Some(vec![font_bytes]),
load_system_fonts: true,
};
let font_system = create_cosmic_font_system(cosmic_font_config);
let font_system_handle: Handle<CosmicFont> = cosmic_fonts.add(CosmicFont(font_system));
let mut attrs = cosmic_text::Attrs::new();
attrs = attrs.family(cosmic_text::Family::Name("Victor Mono"));
attrs = attrs.color(cosmic_text::Color::rgb(0x94, 0x00, 0xD3));
let scale_factor = primary_window.scale_factor() as f32;
let cosmic_edit_meta = CosmicEditMeta {
text: CosmicText::OneStyle("😀😀😀 x => y".to_string()),
attrs: AttrsOwned::new(attrs),
text_pos: CosmicTextPos::Center,
bg: Color::WHITE,
metrics: CosmicMetrics {
let cosmic_edit = CosmicEditSpriteBundle {
sprite: Sprite {
custom_size: Some(Vec2::new(primary_window.width(), primary_window.height())),
..default()
},
cosmic_metrics: CosmicMetrics {
font_size: 14.,
line_height: 18.,
scale_factor,
},
font_system_handle,
node: CosmicNode::Sprite(CosmicEditSprite {
transform: Transform {
translation: Vec3::new(0., 0., 1.),
..default()
},
}),
size: Some((primary_window.width(), primary_window.height())),
readonly: false,
bg_image: None,
};
let cosmic_edit = spawn_cosmic_edit(&mut commands, &mut cosmic_fonts, cosmic_edit_meta);
text_position: CosmicTextPosition::Center,
cosmic_attrs: CosmicAttrs(AttrsOwned::new(attrs)),
..default()
}
.set_text(
CosmicText::OneStyle("😀😀😀 x => y".to_string()),
AttrsOwned::new(attrs),
&mut font_system.0,
);
let cosmic_edit = commands.spawn(cosmic_edit).id();
commands.insert_resource(ActiveEditor {
entity: Some(cosmic_edit),
});
}
fn main() {
let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
let font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: Some(vec![font_bytes]),
load_system_fonts: true,
};
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(CosmicEditPlugin)
.add_plugins(CosmicEditPlugin { font_config })
.add_systems(Startup, setup)
.run();
}
use bevy::{prelude::*, window::PrimaryWindow};
use bevy::{core_pipeline::clear_color::ClearColorConfig, prelude::*, window::PrimaryWindow};
use bevy_cosmic_edit::{
create_cosmic_font_system, spawn_cosmic_edit, ActiveEditor, CosmicEditMeta, CosmicEditPlugin,
CosmicFont, CosmicFontConfig, CosmicMetrics, CosmicNode, CosmicText, CosmicTextPos,
ActiveEditor, CosmicAttrs, CosmicEditPlugin, CosmicEditUiBundle, CosmicFontConfig,
CosmicFontSystem, CosmicMetrics, CosmicText, CosmicTextPosition,
};
use cosmic_text::AttrsOwned;
fn setup(
mut commands: Commands,
windows: Query<&Window, With<PrimaryWindow>>,
mut cosmic_fonts: ResMut<Assets<CosmicFont>>,
mut font_system: ResMut<CosmicFontSystem>,
) {
let primary_window = windows.single();
commands.spawn(Camera2dBundle::default());
let root = commands
.spawn(NodeBundle {
style: Style {
display: Display::Flex,
width: Val::Percent(100.),
height: Val::Percent(100.),
..default()
},
..default()
})
.id();
let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
let cosmic_font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: Some(vec![font_bytes]),
load_system_fonts: true,
let camera_bundle = Camera2dBundle {
camera_2d: Camera2d {
clear_color: ClearColorConfig::Custom(Color::WHITE),
},
..default()
};
let font_system = create_cosmic_font_system(cosmic_font_config);
let font_system_handle: Handle<CosmicFont> = cosmic_fonts.add(CosmicFont(font_system));
commands.spawn(camera_bundle);
let mut attrs = cosmic_text::Attrs::new();
attrs = attrs.family(cosmic_text::Family::Name("Victor Mono"));
attrs = attrs.color(cosmic_text::Color::rgb(0x94, 0x00, 0xD3));
let cosmic_edit_meta = CosmicEditMeta {
text: CosmicText::OneStyle("😀😀😀 x => y".to_string()),
attrs: AttrsOwned::new(attrs),
text_pos: CosmicTextPos::Center,
bg: Color::WHITE,
metrics: CosmicMetrics {
let scale_factor = primary_window.scale_factor() as f32;
let cosmic_edit = CosmicEditUiBundle {
style: Style {
width: Val::Percent(100.),
height: Val::Percent(100.),
..default()
},
cosmic_metrics: CosmicMetrics {
font_size: 14.,
line_height: 18.,
scale_factor: primary_window.scale_factor() as f32,
scale_factor,
},
font_system_handle,
node: CosmicNode::Ui,
size: None,
readonly: false,
bg_image: None,
};
let cosmic_edit = spawn_cosmic_edit(&mut commands, &mut cosmic_fonts, cosmic_edit_meta);
commands.entity(root).add_child(cosmic_edit);
text_position: CosmicTextPosition::Center,
cosmic_attrs: CosmicAttrs(AttrsOwned::new(attrs)),
..default()
}
.set_text(
CosmicText::OneStyle("😀😀😀 x => y".to_string()),
AttrsOwned::new(attrs),
&mut font_system.0,
);
let cosmic_edit = commands.spawn(cosmic_edit).id();
commands.insert_resource(ActiveEditor {
entity: Some(cosmic_edit),
});
}
fn main() {
let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
let font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: Some(vec![font_bytes]),
load_system_fonts: true,
};
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(CosmicEditPlugin)
.add_plugins(CosmicEditPlugin { font_config })
.add_systems(Startup, setup)
.run();
}
use bevy::prelude::*;
use bevy_cosmic_edit::{
change_active_editor_sprite, change_active_editor_ui, ActiveEditor, CosmicEditPlugin,
CosmicEditSpriteBundle, CosmicEditUiBundle,
};
fn setup(mut commands: Commands) {
commands.spawn(Camera2dBundle::default());
// spawn a new CosmicEditBundle
commands.spawn(CosmicEditUiBundle {
style: Style {
// Size and position of text box
width: Val::Px(300.),
height: Val::Px(50.),
left: Val::Px(100.),
top: Val::Px(100.),
..default()
},
..default()
});
let sprite_editor = commands
.spawn(CosmicEditSpriteBundle {
sprite: Sprite {
// Sets size of text box
custom_size: Some(Vec2::new(300., 100.)),
..default()
},
// Position of text box
transform: Transform::from_xyz(100., 200., 0.),
..default()
})
.id();
commands.insert_resource(ActiveEditor {
entity: Some(sprite_editor),
});
}
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(CosmicEditPlugin::default())
.add_systems(Startup, setup)
.add_systems(Update, change_active_editor_ui)
.add_systems(Update, change_active_editor_sprite)
.run();
}
#![allow(clippy::type_complexity)]
use bevy::{prelude::*, window::PrimaryWindow};
use bevy_cosmic_edit::change_active_editor_sprite;
use bevy_cosmic_edit::change_active_editor_ui;
use bevy_cosmic_edit::{
create_cosmic_font_system, get_cosmic_text, spawn_cosmic_edit, ActiveEditor, CosmicEdit,
CosmicEditMeta, CosmicEditPlugin, CosmicFont, CosmicFontConfig, CosmicMetrics, CosmicNode,
CosmicText, CosmicTextPos,
ActiveEditor, CosmicAttrs, CosmicEditPlugin, CosmicEditUiBundle, CosmicFontConfig,
CosmicFontSystem, CosmicMetrics, CosmicText, CosmicTextPosition,
};
use cosmic_text::*;
use cosmic_text::{Attrs, AttrsOwned, Family};
fn setup(
mut commands: Commands,
windows: Query<&Window, With<PrimaryWindow>>,
mut cosmic_fonts: ResMut<Assets<CosmicFont>>,
mut font_system: ResMut<CosmicFontSystem>,
) {
commands.spawn(Camera2dBundle::default());
let root = commands
......@@ -24,13 +27,6 @@ fn setup(
})
.id();
let primary_window = windows.single();
let cosmic_font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: None,
load_system_fonts: true,
};
let font_system = create_cosmic_font_system(cosmic_font_config);
let font_system_handle = cosmic_fonts.add(CosmicFont(font_system));
let attrs = Attrs::new();
let serif_attrs = attrs.family(Family::Serif);
......@@ -229,77 +225,76 @@ fn setup(
)],
];
let cosmic_edit_meta_1 = CosmicEditMeta {
text: CosmicText::MultiStyle(lines),
attrs: AttrsOwned::new(attrs),
text_pos: CosmicTextPos::Center,
metrics: CosmicMetrics {
let cosmic_edit_1 = CosmicEditUiBundle {
text_position: bevy_cosmic_edit::CosmicTextPosition::Center,
cosmic_attrs: CosmicAttrs(AttrsOwned::new(attrs)),
cosmic_metrics: CosmicMetrics {
font_size: 18.,
line_height: 22.,
scale_factor: primary_window.scale_factor() as f32,
},
font_system_handle: font_system_handle.clone(),
node: CosmicNode::Ui,
size: None,
bg: bevy::prelude::Color::WHITE,
readonly: false,
bg_image: None,
};
let cosmic_edit_1 = spawn_cosmic_edit(&mut commands, &mut cosmic_fonts, cosmic_edit_meta_1);
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,
);
let mut attrs_2 = cosmic_text::Attrs::new();
attrs_2 = attrs_2.family(cosmic_text::Family::Name("Times New Roman"));
let cosmic_edit_meta_2 = CosmicEditMeta {
text: CosmicText::OneStyle("Widget 2.\nClick on me =>".to_string()),
attrs: AttrsOwned::new(attrs_2),
metrics: CosmicMetrics {
let cosmic_edit_2 = CosmicEditUiBundle {
cosmic_attrs: CosmicAttrs(AttrsOwned::new(attrs_2)),
cosmic_metrics: CosmicMetrics {
font_size: 14.,
line_height: 18.,
scale_factor: primary_window.scale_factor() as f32,
},
font_system_handle: font_system_handle.clone(),
node: CosmicNode::Ui,
text_pos: CosmicTextPos::Center,
size: None,
bg: bevy::prelude::Color::WHITE.with_a(0.8),
readonly: false,
bg_image: None,
};
let cosmic_edit_2 = spawn_cosmic_edit(&mut commands, &mut cosmic_fonts, cosmic_edit_meta_2);
commands.entity(root).add_child(cosmic_edit_1);
commands.entity(root).add_child(cosmic_edit_2);
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,
);
commands.insert_resource(ActiveEditor {
entity: Some(cosmic_edit_1),
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);
});
}
fn change_active_editor(
mut commands: Commands,
mut interaction_query: Query<
(&Interaction, &mut CosmicEdit, Entity),
(Changed<Interaction>, With<CosmicEdit>),
>,
) {
for (interaction, cosmic_edit, entity) in interaction_query.iter_mut() {
if let Interaction::Pressed = interaction {
commands.insert_resource(ActiveEditor {
entity: Some(entity),
});
info!(
"Widget text: {}",
get_cosmic_text(&cosmic_edit.editor.buffer())
);
}
}
// Set active editor
commands.insert_resource(ActiveEditor { entity: id });
}
fn main() {
let font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: None,
load_system_fonts: true,
};
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(CosmicEditPlugin)
.add_plugins(CosmicEditPlugin { font_config })
.add_systems(Startup, setup)
.add_systems(Update, change_active_editor)
.add_systems(Update, change_active_editor_ui)
.add_systems(Update, change_active_editor_sprite)
.run();
}
use bevy::{core_pipeline::clear_color::ClearColorConfig, prelude::*, window::PrimaryWindow};
use bevy_cosmic_edit::change_active_editor_sprite;
use bevy_cosmic_edit::change_active_editor_ui;
use bevy_cosmic_edit::{
create_cosmic_font_system, spawn_cosmic_edit, ActiveEditor, CosmicEdit, CosmicEditMeta,
CosmicEditPlugin, CosmicEditSprite, CosmicFont, CosmicFontConfig, CosmicMetrics, CosmicNode,
CosmicText, CosmicTextPos,
ActiveEditor, CosmicAttrs, CosmicEditPlugin, CosmicEditSpriteBundle, CosmicFontConfig,
CosmicFontSystem, CosmicMetrics, CosmicText, CosmicTextPosition,
};
use cosmic_text::AttrsOwned;
#[derive(Component)]
pub struct MainCamera;
fn setup(
mut commands: Commands,
windows: Query<&Window, With<PrimaryWindow>>,
mut cosmic_fonts: ResMut<Assets<CosmicFont>>,
mut font_system: ResMut<CosmicFontSystem>,
) {
let primary_window = windows.single();
let camera_bundle = Camera2dBundle {
......@@ -21,15 +19,8 @@ fn setup(
},
..default()
};
commands.spawn((camera_bundle, MainCamera));
let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
let cosmic_font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: Some(vec![font_bytes]),
load_system_fonts: true,
};
let font_system = create_cosmic_font_system(cosmic_font_config);
let font_system_handle = cosmic_fonts.add(CosmicFont(font_system));
commands.spawn(camera_bundle);
let mut attrs = cosmic_text::Attrs::new();
attrs = attrs.family(cosmic_text::Family::Name("Victor Mono"));
attrs = attrs.color(cosmic_text::Color::rgb(0x94, 0x00, 0xD3));
......@@ -38,111 +29,73 @@ fn setup(
line_height: 18.,
scale_factor: primary_window.scale_factor() as f32,
};
let cosmic_edit_meta = CosmicEditMeta {
text: CosmicText::OneStyle("😀😀😀 x => y".to_string()),
attrs: AttrsOwned::new(attrs),
text_pos: CosmicTextPos::Center,
metrics: metrics.clone(),
font_system_handle: font_system_handle.clone(),
node: CosmicNode::Sprite(CosmicEditSprite {
transform: Transform {
translation: Vec3::new(-primary_window.width() / 4., 0., 1.),
..default()
},
}),
size: Some((primary_window.width() / 2., primary_window.height())),
bg: Color::WHITE,
readonly: false,
bg_image: None,
};
let cosmic_edit_1 = spawn_cosmic_edit(&mut commands, &mut cosmic_fonts, cosmic_edit_meta);
let cosmic_edit_meta = CosmicEditMeta {
text: CosmicText::OneStyle("Widget_2. Click on me".to_string()),
attrs: AttrsOwned::new(attrs),
text_pos: CosmicTextPos::Center,
metrics: metrics.clone(),
font_system_handle: font_system_handle.clone(),
node: CosmicNode::Sprite(CosmicEditSprite {
transform: Transform {
translation: Vec3::new(
primary_window.width() / 4.,
-primary_window.height() / 4.,
1.,
),
..default()
},
}),
size: Some((primary_window.width() / 2., primary_window.height() / 2.)),
bg: Color::GRAY.with_a(0.5),
readonly: false,
bg_image: None,
};
let _ = spawn_cosmic_edit(&mut commands, &mut cosmic_fonts, cosmic_edit_meta);
let cosmic_edit_meta = CosmicEditMeta {
text: CosmicText::OneStyle("Widget_3. Click on me".to_string()),
attrs: AttrsOwned::new(attrs),
text_pos: CosmicTextPos::Center,
metrics: metrics.clone(),
font_system_handle: font_system_handle.clone(),
node: CosmicNode::Sprite(CosmicEditSprite {
transform: Transform {
translation: Vec3::new(
primary_window.width() / 4.,
primary_window.height() / 4.,
1.,
),
..default()
},
}),
size: Some((primary_window.width() / 2., primary_window.height() / 2.)),
bg: Color::GRAY.with_a(0.8),
readonly: false,
bg_image: None,
};
let _ = spawn_cosmic_edit(&mut commands, &mut cosmic_fonts, cosmic_edit_meta);
commands.insert_resource(ActiveEditor {
entity: Some(cosmic_edit_1),
});
}
fn change_active_editor(
mut commands: Commands,
windows: Query<&Window, With<PrimaryWindow>>,
buttons: Res<Input<MouseButton>>,
mut cosmic_edit_query: Query<(&mut CosmicEdit, &GlobalTransform, Entity), With<CosmicEdit>>,
camera_q: Query<(&Camera, &GlobalTransform), With<MainCamera>>,
) {
let window = windows.single();
let (camera, camera_transform) = camera_q.single();
if buttons.just_pressed(MouseButton::Left) {
for (cosmic_edit, node_transform, entity) in &mut cosmic_edit_query.iter_mut() {
let size = (cosmic_edit.width, cosmic_edit.height);
let x_min = node_transform.affine().translation.x - size.0 / 2.;
let y_min = node_transform.affine().translation.y - size.1 / 2.;
let x_max = node_transform.affine().translation.x + size.0 / 2.;
let y_max = node_transform.affine().translation.y + size.1 / 2.;
window.cursor_position().and_then(|pos| {
if let Some(pos) = camera.viewport_to_world_2d(camera_transform, pos) {
Some({
if x_min < pos.x && pos.x < x_max && y_min < pos.y && pos.y < y_max {
commands.insert_resource(ActiveEditor {
entity: Some(entity),
});
};
})
} else {
None
}
});
}
let cosmic_edit_1 = CosmicEditSpriteBundle {
cosmic_attrs: CosmicAttrs(AttrsOwned::new(attrs)),
cosmic_metrics: metrics.clone(),
sprite: Sprite {
custom_size: Some(Vec2 {
x: primary_window.width() / 2.,
y: primary_window.height(),
}),
..default()
},
transform: Transform::from_translation(Vec3::new(-primary_window.width() / 4., 0., 1.)),
text_position: CosmicTextPosition::Center,
background_color: BackgroundColor(Color::ALICE_BLUE),
..default()
}
.set_text(
CosmicText::OneStyle("😀😀😀 x => y".to_string()),
AttrsOwned::new(attrs),
&mut font_system.0,
);
let cosmic_edit_2 = CosmicEditSpriteBundle {
cosmic_attrs: CosmicAttrs(AttrsOwned::new(attrs)),
cosmic_metrics: metrics,
sprite: Sprite {
custom_size: Some(Vec2 {
x: primary_window.width() / 2.,
y: primary_window.height() / 2.,
}),
..default()
},
transform: Transform::from_translation(Vec3::new(
primary_window.width() / 4.,
-primary_window.height() / 4.,
1.,
)),
text_position: CosmicTextPosition::Center,
background_color: BackgroundColor(Color::GRAY.with_a(0.5)),
..default()
}
.set_text(
CosmicText::OneStyle("Widget_2. Click on me".to_string()),
AttrsOwned::new(attrs),
&mut font_system.0,
);
let id = commands.spawn(cosmic_edit_1).id();
commands.insert_resource(ActiveEditor { entity: Some(id) });
commands.spawn(cosmic_edit_2);
}
fn main() {
let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
let font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: Some(vec![font_bytes]),
load_system_fonts: true,
};
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(CosmicEditPlugin)
.add_plugins(CosmicEditPlugin { font_config })
.add_systems(Startup, setup)
.add_systems(Update, change_active_editor)
.add_systems(Update, change_active_editor_ui)
.add_systems(Update, change_active_editor_sprite)
.run();
}
use bevy::{prelude::*, window::PrimaryWindow};
use bevy_cosmic_edit::{
create_cosmic_font_system, spawn_cosmic_edit, ActiveEditor, CosmicEditMeta, CosmicEditPlugin,
CosmicFont, CosmicFontConfig, CosmicMetrics, CosmicNode, CosmicText, CosmicTextPos,
ActiveEditor, CosmicAttrs, CosmicEditPlugin, CosmicEditUiBundle, CosmicFontConfig,
CosmicFontSystem, CosmicMetrics, CosmicText, CosmicTextPosition, ReadOnly,
};
use cosmic_text::AttrsOwned;
fn setup(
mut commands: Commands,
windows: Query<&Window, With<PrimaryWindow>>,
mut cosmic_fonts: ResMut<Assets<CosmicFont>>,
mut font_system: ResMut<CosmicFontSystem>,
) {
let primary_window = windows.single();
commands.spawn(Camera2dBundle::default());
......@@ -23,45 +23,54 @@ fn setup(
..default()
})
.id();
let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
let cosmic_font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: Some(vec![font_bytes]),
load_system_fonts: true,
};
let font_system = create_cosmic_font_system(cosmic_font_config);
let font_system_handle = cosmic_fonts.add(CosmicFont(font_system));
let mut attrs = cosmic_text::Attrs::new();
attrs = attrs.family(cosmic_text::Family::Name("Victor Mono"));
attrs = attrs.color(cosmic_text::Color::rgb(0x94, 0x00, 0xD3));
let cosmic_edit_meta = CosmicEditMeta {
text: CosmicText::OneStyle("😀😀😀 x => y\nRead only widget".to_string()),
attrs: AttrsOwned::new(attrs),
text_pos: CosmicTextPos::Center,
bg: Color::WHITE,
metrics: CosmicMetrics {
let cosmic_edit = CosmicEditUiBundle {
style: Style {
width: Val::Percent(100.),
height: Val::Percent(100.),
..default()
},
cosmic_attrs: CosmicAttrs(AttrsOwned::new(attrs)),
text_position: CosmicTextPosition::Center,
background_color: BackgroundColor(Color::WHITE),
cosmic_metrics: CosmicMetrics {
font_size: 14.,
line_height: 18.,
scale_factor: primary_window.scale_factor() as f32,
},
font_system_handle,
node: CosmicNode::Ui,
size: None,
readonly: true,
bg_image: None,
};
let cosmic_edit = spawn_cosmic_edit(&mut commands, &mut cosmic_fonts, cosmic_edit_meta);
commands.entity(root).add_child(cosmic_edit);
commands.insert_resource(ActiveEditor {
entity: Some(cosmic_edit),
..default()
}
.set_text(
CosmicText::OneStyle("😀😀😀 x => y\nRead only widget".to_string()),
AttrsOwned::new(attrs),
&mut font_system.0,
);
let mut id = None;
// Spawn the CosmicEditUiBundle as a child of root
commands.entity(root).with_children(|parent| {
id = Some(parent.spawn(cosmic_edit).insert(ReadOnly).id());
});
// Set active editor
commands.insert_resource(ActiveEditor { entity: id });
}
fn main() {
let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
let font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: Some(vec![font_bytes]),
load_system_fonts: true,
};
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(CosmicEditPlugin)
.add_plugins(CosmicEditPlugin { font_config })
.add_systems(Startup, setup)
.run();
}
This diff is collapsed.
......@@ -10,3 +10,59 @@ pub fn get_timestamp() -> f64 {
let duration = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
duration.as_millis() as f64
}
use crate::{ActiveEditor, CosmicEditor, ReadOnly};
use bevy::{prelude::*, ui::Interaction, window::PrimaryWindow};
// util fns for examples
//
pub fn change_active_editor_ui(
mut commands: Commands,
mut interaction_query: Query<
(&Interaction, Entity),
(
Changed<Interaction>,
(With<CosmicEditor>, Without<ReadOnly>),
),
>,
) {
for (interaction, entity) in interaction_query.iter_mut() {
if let Interaction::Pressed = interaction {
commands.insert_resource(ActiveEditor {
entity: Some(entity),
});
}
}
}
pub fn change_active_editor_sprite(
mut commands: Commands,
windows: Query<&Window, With<PrimaryWindow>>,
buttons: Res<Input<MouseButton>>,
mut cosmic_edit_query: Query<
(&mut Sprite, &GlobalTransform, Entity),
(With<CosmicEditor>, Without<ReadOnly>),
>,
camera_q: Query<(&Camera, &GlobalTransform)>,
) {
let window = windows.single();
let (camera, camera_transform) = camera_q.single();
if buttons.just_pressed(MouseButton::Left) {
for (sprite, node_transform, entity) in &mut cosmic_edit_query.iter_mut() {
let size = sprite.custom_size.unwrap_or(Vec2::new(1., 1.));
let x_min = node_transform.affine().translation.x - size.x / 2.;
let y_min = node_transform.affine().translation.y - size.y / 2.;
let x_max = node_transform.affine().translation.x + size.x / 2.;
let y_max = node_transform.affine().translation.y + size.y / 2.;
if let Some(pos) = window.cursor_position() {
if let Some(pos) = camera.viewport_to_world_2d(camera_transform, pos) {
if x_min < pos.x && pos.x < x_max && y_min < pos.y && pos.y < y_max {
commands.insert_resource(ActiveEditor {
entity: Some(entity),
});
};
}
};
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment