From 60f58392bfeecd45b92befd90240d7fda0baa866 Mon Sep 17 00:00:00 2001
From: StaffEngineer <111751109+StaffEngineer@users.noreply.github.com>
Date: Fri, 22 Sep 2023 09:42:20 +0100
Subject: [PATCH] add text change event (#50)

---
 src/lib.rs | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/lib.rs b/src/lib.rs
index f61d42d..a541969 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -39,6 +39,9 @@ pub enum CosmicTextPosition {
     TopLeft,
 }
 
+#[derive(Event, Debug)]
+pub struct CosmicTextChanged(pub (Entity, String));
+
 // TODO docs
 #[derive(Clone, Component)]
 pub struct CosmicMetrics {
@@ -67,7 +70,7 @@ pub struct ReadOnly; // tag component
 pub struct CosmicEditor(pub Editor);
 
 impl CosmicEditor {
-    fn set_text(
+    pub fn set_text(
         &mut self,
         text: CosmicText,
         attrs: AttrsOwned,
@@ -410,7 +413,8 @@ impl Plugin for CosmicEditPlugin {
             .insert_resource(SwashCacheState {
                 swash_cache: SwashCache::new(),
             })
-            .insert_resource(CosmicFontSystem(font_system));
+            .insert_resource(CosmicFontSystem(font_system))
+            .add_event::<CosmicTextChanged>();
     }
 }
 
@@ -698,6 +702,7 @@ fn cosmic_edit_bevy_events(
         ),
         With<CosmicEditor>,
     >,
+    mut evw_changed: EventWriter<CosmicTextChanged>,
     readonly_query: Query<&ReadOnly>,
     node_query: Query<&mut Node>,
     sprite_query: Query<&mut Sprite>,
@@ -916,6 +921,7 @@ fn cosmic_edit_bevy_events(
                     edit_history.current_edit += 1;
                 }
                 *undoredo_duration = Some(Duration::from_millis(now_ms as u64));
+                evw_changed.send(CosmicTextChanged((entity, editor.get_text())));
                 return;
             }
             // undo
@@ -952,6 +958,7 @@ fn cosmic_edit_bevy_events(
                     edit_history.current_edit -= 1;
                 }
                 *undoredo_duration = Some(Duration::from_millis(now_ms as u64));
+                evw_changed.send(CosmicTextChanged((entity, editor.get_text())));
                 return;
             }
 
@@ -1106,6 +1113,8 @@ fn cosmic_edit_bevy_events(
                 return;
             }
 
+            evw_changed.send(CosmicTextChanged((entity, editor.get_text())));
+
             if let Some(last_edit_duration) = *edits_duration {
                 if Duration::from_millis(now_ms as u64) - last_edit_duration
                     > Duration::from_millis(150)
-- 
GitLab