diff --git a/Cargo.lock b/Cargo.lock index 2ebc893bd8213bddf763c326f201100cac6e73ac..026a1f29c3cbef05b39d377f8abfe6ec3c861cee 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -388,7 +388,7 @@ dependencies = [ [[package]] name = "bevy_cosmic_edit" -version = "0.11.0" +version = "0.12.0" dependencies = [ "arboard", "bevy", diff --git a/Cargo.toml b/Cargo.toml index 6894731a7df86c8992cced398f2b1b1db0fc0494..e635cf97f617c681fdd6bf7daf27330e1ff8c1cb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bevy_cosmic_edit" -version = "0.11.0" +version = "0.12.0" edition = "2021" license = "MIT OR Apache-2.0" description = "Bevy cosmic-text multiline text input" diff --git a/examples/basic_sprite.rs b/examples/basic_sprite.rs index 59fa63823422e8617b465cca3bbf6a13e7545f56..1019ce106e7665d1270a2d54961a90d88fef2a26 100644 --- a/examples/basic_sprite.rs +++ b/examples/basic_sprite.rs @@ -1,7 +1,7 @@ use bevy::{core_pipeline::clear_color::ClearColorConfig, prelude::*, window::PrimaryWindow}; use bevy_cosmic_edit::{ - ActiveEditor, AttrsOwned, CosmicAttrs, CosmicEditPlugin, CosmicEditSpriteBundle, - CosmicFontConfig, CosmicMetrics, CosmicText, CosmicTextPosition, + AttrsOwned, CosmicAttrs, CosmicEditPlugin, CosmicEditSpriteBundle, CosmicFontConfig, + CosmicMetrics, CosmicText, CosmicTextPosition, Focus, }; fn setup(mut commands: Commands, windows: Query<&Window, With<PrimaryWindow>>) { @@ -38,9 +38,7 @@ fn setup(mut commands: Commands, windows: Query<&Window, With<PrimaryWindow>>) { let cosmic_edit = commands.spawn(cosmic_edit).id(); - commands.insert_resource(ActiveEditor { - entity: Some(cosmic_edit), - }); + commands.insert_resource(Focus(Some(cosmic_edit))); } fn main() { diff --git a/examples/basic_ui.rs b/examples/basic_ui.rs index f390de55cc3cff758814ee119b5042ab389a7420..09235a7eb7e3178ff1811ed389aabe7a3e3fb17f 100644 --- a/examples/basic_ui.rs +++ b/examples/basic_ui.rs @@ -1,7 +1,7 @@ use bevy::{core_pipeline::clear_color::ClearColorConfig, prelude::*, window::PrimaryWindow}; use bevy_cosmic_edit::{ - ActiveEditor, AttrsOwned, CosmicAttrs, CosmicEditPlugin, CosmicEditUiBundle, CosmicEditor, - CosmicFontConfig, CosmicMetrics, CosmicText, CosmicTextPosition, + AttrsOwned, CosmicAttrs, CosmicEditPlugin, CosmicEditUiBundle, CosmicEditor, CosmicFontConfig, + CosmicMetrics, CosmicText, CosmicTextPosition, Focus, }; fn setup(mut commands: Commands, windows: Query<&Window, With<PrimaryWindow>>) { @@ -39,9 +39,7 @@ fn setup(mut commands: Commands, windows: Query<&Window, With<PrimaryWindow>>) { let cosmic_edit = commands.spawn(cosmic_edit).id(); - commands.insert_resource(ActiveEditor { - entity: Some(cosmic_edit), - }); + commands.insert_resource(Focus(Some(cosmic_edit))); } fn print_text( diff --git a/examples/bevy_api_testing.rs b/examples/bevy_api_testing.rs index 83a85f2becf044d63bc5b62812d3d4d1e54b3d75..7bc27c18441fca92f6187404531239e319d7c281 100644 --- a/examples/bevy_api_testing.rs +++ b/examples/bevy_api_testing.rs @@ -1,7 +1,7 @@ use bevy::prelude::*; use bevy_cosmic_edit::{ - bevy_color_to_cosmic, change_active_editor_sprite, change_active_editor_ui, ActiveEditor, - Attrs, AttrsOwned, CosmicAttrs, CosmicEditPlugin, CosmicEditSpriteBundle, CosmicEditUiBundle, + bevy_color_to_cosmic, change_active_editor_sprite, change_active_editor_ui, Attrs, AttrsOwned, + CosmicAttrs, CosmicEditPlugin, CosmicEditSpriteBundle, CosmicEditUiBundle, Focus, }; fn setup(mut commands: Commands) { @@ -36,9 +36,7 @@ fn setup(mut commands: Commands) { }) .id(); - commands.insert_resource(ActiveEditor { - entity: Some(sprite_editor), - }); + commands.insert_resource(Focus(Some(sprite_editor))); } fn main() { diff --git a/examples/every_option.rs b/examples/every_option.rs index 1a9697bc8dcb932779003edb6abd77207f71d23d..0fe4f19a95fa4f8ac43556ecea21e659ea5744ba 100644 --- a/examples/every_option.rs +++ b/examples/every_option.rs @@ -1,9 +1,9 @@ use bevy::{prelude::*, ui::FocusPolicy, window::PrimaryWindow}; use bevy_cosmic_edit::{ bevy_color_to_cosmic, change_active_editor_sprite, change_active_editor_ui, get_x_offset, - ActiveEditor, Attrs, AttrsOwned, CosmicAttrs, CosmicBackground, CosmicEditPlugin, - CosmicEditUiBundle, CosmicEditor, CosmicMaxChars, CosmicMaxLines, CosmicMetrics, CosmicText, - CosmicTextPosition, Edit, + Attrs, AttrsOwned, CosmicAttrs, CosmicBackground, CosmicEditPlugin, CosmicEditUiBundle, + CosmicEditor, CosmicMaxChars, CosmicMaxLines, CosmicMetrics, CosmicText, CosmicTextPosition, + Edit, Focus, }; #[derive(Resource)] @@ -53,9 +53,7 @@ fn setup(mut commands: Commands, windows: Query<&Window, With<PrimaryWindow>>) { }) .id(); - commands.insert_resource(ActiveEditor { - entity: Some(editor), - }); + commands.insert_resource(Focus(Some(editor))); commands.insert_resource(TextChangeTimer(Timer::from_seconds( 1., diff --git a/examples/font_per_widget.rs b/examples/font_per_widget.rs index b8721cb0e2a2ca82f144eb55799b8b368e43066e..089a17b2d660da9a84b7c14759a9f8f479a55e91 100644 --- a/examples/font_per_widget.rs +++ b/examples/font_per_widget.rs @@ -2,9 +2,9 @@ use bevy::{prelude::*, window::PrimaryWindow}; use bevy_cosmic_edit::{ - bevy_color_to_cosmic, change_active_editor_sprite, change_active_editor_ui, ActiveEditor, - Attrs, AttrsOwned, CosmicAttrs, CosmicEditPlugin, CosmicEditUiBundle, CosmicFontConfig, - CosmicMetrics, CosmicText, CosmicTextPosition, Family, FontStyle, FontWeight, + bevy_color_to_cosmic, change_active_editor_sprite, change_active_editor_ui, Attrs, AttrsOwned, + CosmicAttrs, CosmicEditPlugin, CosmicEditUiBundle, CosmicFontConfig, CosmicMetrics, CosmicText, + CosmicTextPosition, Family, Focus, FontStyle, FontWeight, }; fn setup(mut commands: Commands, windows: Query<&Window, With<PrimaryWindow>>) { @@ -259,7 +259,7 @@ fn setup(mut commands: Commands, windows: Query<&Window, With<PrimaryWindow>>) { }); // Set active editor - commands.insert_resource(ActiveEditor { entity: id }); + commands.insert_resource(Focus(id)); } fn main() { diff --git a/examples/image_background.rs b/examples/image_background.rs index 135ee717158b9de7067339e1219abb115f3f916c..7945c74591c5202708a6afc87d0cb275f203a154 100644 --- a/examples/image_background.rs +++ b/examples/image_background.rs @@ -1,7 +1,7 @@ use bevy::prelude::*; use bevy_cosmic_edit::{ - bevy_color_to_cosmic, change_active_editor_sprite, change_active_editor_ui, ActiveEditor, - Attrs, AttrsOwned, CosmicAttrs, CosmicBackground, CosmicEditPlugin, CosmicEditUiBundle, + bevy_color_to_cosmic, change_active_editor_sprite, change_active_editor_ui, + Attrs, AttrsOwned, CosmicAttrs, CosmicBackground, CosmicEditPlugin, CosmicEditUiBundle, Focus, }; fn setup(mut commands: Commands, asset_server: Res<AssetServer>) { @@ -26,10 +26,7 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>) { ..default() }) .id(); - - commands.insert_resource(ActiveEditor { - entity: Some(editor), - }); + commands.insert_resource(Focus(Some(editor))); } fn main() { diff --git a/examples/multiple_sprites.rs b/examples/multiple_sprites.rs index fd240f1672ec85aa691afd932fa258c8450dd424..2c2c74a26b44487fe11420b750bcb76bda600c24 100644 --- a/examples/multiple_sprites.rs +++ b/examples/multiple_sprites.rs @@ -1,8 +1,8 @@ use bevy::{core_pipeline::clear_color::ClearColorConfig, prelude::*, window::PrimaryWindow}; use bevy_cosmic_edit::{ - bevy_color_to_cosmic, change_active_editor_sprite, change_active_editor_ui, ActiveEditor, - Attrs, AttrsOwned, CosmicAttrs, CosmicEditPlugin, CosmicEditSpriteBundle, CosmicFontConfig, - CosmicMetrics, CosmicText, CosmicTextPosition, Family, + bevy_color_to_cosmic, change_active_editor_sprite, change_active_editor_ui, Attrs, AttrsOwned, + CosmicAttrs, CosmicEditPlugin, CosmicEditSpriteBundle, CosmicFontConfig, CosmicMetrics, + CosmicText, CosmicTextPosition, Family, Focus, }; fn setup(mut commands: Commands, windows: Query<&Window, With<PrimaryWindow>>) { @@ -64,7 +64,7 @@ fn setup(mut commands: Commands, windows: Query<&Window, With<PrimaryWindow>>) { let id = commands.spawn(cosmic_edit_1).id(); - commands.insert_resource(ActiveEditor { entity: Some(id) }); + commands.insert_resource(Focus(Some(id))); commands.spawn(cosmic_edit_2); } diff --git a/examples/readonly.rs b/examples/readonly.rs index 4c67c1b45316eb39a6805983cf1c24a4ca48d822..efbacca3cb28bda313836dfb5cd7fb1d7442f344 100644 --- a/examples/readonly.rs +++ b/examples/readonly.rs @@ -1,8 +1,7 @@ use bevy::{prelude::*, window::PrimaryWindow}; use bevy_cosmic_edit::{ - bevy_color_to_cosmic, ActiveEditor, Attrs, AttrsOwned, CosmicAttrs, CosmicEditPlugin, - CosmicEditUiBundle, CosmicFontConfig, CosmicMetrics, CosmicText, CosmicTextPosition, Family, - ReadOnly, + bevy_color_to_cosmic, Attrs, AttrsOwned, CosmicAttrs, CosmicEditPlugin, CosmicEditUiBundle, + CosmicFontConfig, CosmicMetrics, CosmicText, CosmicTextPosition, Family, Focus, ReadOnly, }; fn setup(mut commands: Commands, windows: Query<&Window, With<PrimaryWindow>>) { @@ -49,7 +48,7 @@ fn setup(mut commands: Commands, windows: Query<&Window, With<PrimaryWindow>>) { }); // Set active editor - commands.insert_resource(ActiveEditor { entity: id }); + commands.insert_resource(Focus(id)); } fn main() { diff --git a/examples/restricted_input.rs b/examples/restricted_input.rs index 847e0ebbf71078a15d0887f5545162d9c919394c..e43b2aa5860f8976dd7fa96445450e04da99f420 100644 --- a/examples/restricted_input.rs +++ b/examples/restricted_input.rs @@ -1,8 +1,8 @@ use bevy::{prelude::*, window::PrimaryWindow}; use bevy_cosmic_edit::{ - bevy_color_to_cosmic, change_active_editor_sprite, change_active_editor_ui, ActiveEditor, - Attrs, AttrsOwned, CosmicAttrs, CosmicEditPlugin, CosmicEditUiBundle, CosmicMaxChars, - CosmicMaxLines, CosmicMetrics, CosmicText, + bevy_color_to_cosmic, change_active_editor_sprite, change_active_editor_ui, Attrs, AttrsOwned, + CosmicAttrs, CosmicEditPlugin, CosmicEditUiBundle, CosmicMaxChars, CosmicMaxLines, + CosmicMetrics, CosmicText, Focus, }; fn setup(mut commands: Commands, windows: Query<&Window, With<PrimaryWindow>>) { @@ -40,9 +40,7 @@ fn setup(mut commands: Commands, windows: Query<&Window, With<PrimaryWindow>>) { }) .id(); - commands.insert_resource(ActiveEditor { - entity: Some(editor), - }); + commands.insert_resource(Focus(Some(editor))); } fn main() { diff --git a/src/lib.rs b/src/lib.rs index 0bdcd281d17aa73f72dfc76ce0353c261b393dd1..0a669d39944ac1685f7cc6a8a5870aba43edecfc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,7 +14,8 @@ use bevy::{ window::{PrimaryWindow, WindowScaleFactorChanged}, }; pub use cosmic_text::{ - Action, Attrs, AttrsOwned, Cursor, Edit, Family, Style as FontStyle, Weight as FontWeight, + Action, Attrs, AttrsOwned, Color as CosmicColor, Cursor, Edit, Family, Style as FontStyle, + Weight as FontWeight, }; use cosmic_text::{ AttrsList, Buffer, BufferLine, Editor, FontSystem, Metrics, Shaping, SwashCache, @@ -402,8 +403,7 @@ impl Plugin for CosmicEditPlugin { clear_inactive_selection, ), ) - .init_resource::<ActiveEditor>() - // .add_asset::<CosmicFont>() + .init_resource::<Focus>() .insert_resource(SwashCacheState { swash_cache: SwashCache::new(), }) @@ -412,10 +412,8 @@ impl Plugin for CosmicEditPlugin { } /// Resource struct that keeps track of the currently active editor entity. -#[derive(Resource, Default)] -pub struct ActiveEditor { - pub entity: Option<Entity>, -} +#[derive(Resource, Default, Deref, DerefMut)] +pub struct Focus(pub Option<Entity>); /// Resource struct that holds configuration options for cosmic fonts. #[derive(Resource, Clone)] @@ -689,7 +687,7 @@ pub fn get_x_offset(buffer: &Buffer) -> i32 { // the meat of the input management fn cosmic_edit_bevy_events( windows: Query<&Window, With<PrimaryWindow>>, - active_editor: Res<ActiveEditor>, + active_editor: Res<Focus>, keys: Res<Input<KeyCode>>, mut char_evr: EventReader<ReceivedCharacter>, buttons: Res<Input<MouseButton>>, @@ -743,7 +741,7 @@ fn cosmic_edit_bevy_events( let attrs = &attrs.0; - if active_editor.entity == Some(entity) { + if active_editor.0 == Some(entity) { let now_ms = get_timestamp(); #[cfg(target_os = "macos")] @@ -1308,10 +1306,10 @@ fn blink_cursor( mut visible: Local<bool>, mut timer: Local<Option<Timer>>, time: Res<Time>, - active_editor: ResMut<ActiveEditor>, + active_editor: ResMut<Focus>, mut cosmic_editor_q: Query<&mut CosmicEditor, Without<ReadOnly>>, ) { - if let Some(e) = active_editor.entity { + if let Some(e) = active_editor.0 { if let Ok(mut editor) = cosmic_editor_q.get_mut(e) { let timer = timer.get_or_insert_with(|| Timer::from_seconds(0.53, TimerMode::Repeating)); @@ -1343,14 +1341,14 @@ fn blink_cursor( fn hide_inactive_cursor( mut cosmic_editor_q: Query<(Entity, &mut CosmicEditor)>, - active_editor: Res<ActiveEditor>, + active_editor: Res<Focus>, ) { - if !active_editor.is_changed() || active_editor.entity.is_none() { + if !active_editor.is_changed() || active_editor.0.is_none() { return; } for (e, mut editor) in &mut cosmic_editor_q.iter_mut() { - if e != active_editor.entity.unwrap() { + if e != active_editor.0.unwrap() { let mut cursor = editor.0.cursor(); cursor.color = Some(cosmic_text::Color::rgba(0, 0, 0, 0)); editor.0.set_cursor(cursor); @@ -1361,14 +1359,14 @@ fn hide_inactive_cursor( fn clear_inactive_selection( mut cosmic_editor_q: Query<(Entity, &mut CosmicEditor)>, - active_editor: Res<ActiveEditor>, + active_editor: Res<Focus>, ) { - if !active_editor.is_changed() || active_editor.entity.is_none() { + if !active_editor.is_changed() || active_editor.0.is_none() { return; } for (e, mut editor) in &mut cosmic_editor_q.iter_mut() { - if e != active_editor.entity.unwrap() { + if e != active_editor.0.unwrap() { editor.0.set_select_opt(None); } } diff --git a/src/utils.rs b/src/utils.rs index b3d72d9f081f61ad21e7b53265798d03cc2381b4..0e519db91829e49572a71000c60aefee0c61815e 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -11,7 +11,7 @@ pub fn get_timestamp() -> f64 { duration.as_millis() as f64 } -use crate::{ActiveEditor, CosmicEditor, ReadOnly}; +use crate::{CosmicEditor, Focus, ReadOnly}; use bevy::{prelude::*, ui::Interaction, window::PrimaryWindow}; // util fns for examples @@ -28,9 +28,7 @@ pub fn change_active_editor_ui( ) { for (interaction, entity) in interaction_query.iter_mut() { if let Interaction::Pressed = interaction { - commands.insert_resource(ActiveEditor { - entity: Some(entity), - }); + commands.insert_resource(Focus(Some(entity))); } } } @@ -57,9 +55,7 @@ pub fn change_active_editor_sprite( 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), - }); + commands.insert_resource(Focus(Some(entity))) }; } };