From 04f874d5a4a5ad78d4fecfe4b5e901f8c2f08df6 Mon Sep 17 00:00:00 2001
From: StaffEngineer <velo.app1@gmail.com>
Date: Sun, 17 Sep 2023 11:55:19 +0100
Subject: [PATCH] rename to focus

---
 Cargo.lock                   |  2 +-
 Cargo.toml                   |  2 +-
 examples/basic_sprite.rs     |  8 +++-----
 examples/basic_ui.rs         |  8 +++-----
 examples/bevy_api_testing.rs |  8 +++-----
 examples/every_option.rs     | 10 ++++------
 examples/font_per_widget.rs  |  8 ++++----
 examples/image_background.rs |  9 +++------
 examples/multiple_sprites.rs |  8 ++++----
 examples/readonly.rs         |  7 +++----
 examples/restricted_input.rs | 10 ++++------
 src/lib.rs                   | 32 +++++++++++++++-----------------
 src/utils.rs                 | 10 +++-------
 13 files changed, 51 insertions(+), 71 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 2ebc893..026a1f2 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 6894731..e635cf9 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 59fa638..1019ce1 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 f390de5..09235a7 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 83a85f2..7bc27c1 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 1a9697b..0fe4f19 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 b8721cb..089a17b 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 135ee71..7945c74 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 fd240f1..2c2c74a 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 4c67c1b..efbacca 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 847e0eb..e43b2aa 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 0bdcd28..0a669d3 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 b3d72d9..0e519db 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)))
                     };
                 }
             };
-- 
GitLab