From ee23f7676bddd241637f5041b092052ecd1de3a5 Mon Sep 17 00:00:00 2001
From: milse113 <56005814+milse113@users.noreply.github.com>
Date: Fri, 13 Oct 2023 08:35:32 +0000
Subject: [PATCH] Basic multi-camera support (#86)

---
 Cargo.toml    |  3 +++
 src/cursor.rs | 12 +++++++++++-
 src/lib.rs    |  4 ++++
 3 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/Cargo.toml b/Cargo.toml
index 618ecea..c777fae 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -10,6 +10,9 @@ keywords = ["bevy"]
 
 exclude = ["assets/*"]
 
+[features]
+multicam = []
+
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 # Enable max optimizations for dependencies, but not for our code:
diff --git a/src/cursor.rs b/src/cursor.rs
index 037d88f..e0485b4 100644
--- a/src/cursor.rs
+++ b/src/cursor.rs
@@ -2,6 +2,9 @@ use bevy::{input::mouse::MouseMotion, prelude::*, window::PrimaryWindow};
 
 use crate::{CosmicEditor, CosmicTextChanged};
 
+#[cfg(feature = "multicam")]
+use crate::CosmicPrimaryCamera;
+
 /// For use with custom cursor control; Event is emitted when cursor enters a text widget
 #[derive(Event)]
 pub struct TextHoverIn;
@@ -33,10 +36,17 @@ pub fn change_cursor(
     }
 }
 
+#[cfg(feature = "multicam")]
+type CameraQuery<'a, 'b, 'c, 'd> =
+    Query<'a, 'b, (&'c Camera, &'d GlobalTransform), With<CosmicPrimaryCamera>>;
+
+#[cfg(not(feature = "multicam"))]
+type CameraQuery<'a, 'b, 'c, 'd> = Query<'a, 'b, (&'c Camera, &'d GlobalTransform)>;
+
 pub fn hover_sprites(
     windows: Query<&Window, With<PrimaryWindow>>,
     mut cosmic_edit_query: Query<(&mut Sprite, &GlobalTransform), With<CosmicEditor>>,
-    camera_q: Query<(&Camera, &GlobalTransform)>,
+    camera_q: CameraQuery,
     mut hovered: Local<bool>,
     mut last_hovered: Local<bool>,
     mut evw_hover_in: EventWriter<TextHoverIn>,
diff --git a/src/lib.rs b/src/lib.rs
index da8bd57..20c7fe4 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -26,6 +26,10 @@ use render::{
     on_scale_factor_change, CursorBlinkTimer, CursorVisibility, SwashCacheState,
 };
 
+#[cfg(feature = "multicam")]
+#[derive(Component)]
+pub struct CosmicPrimaryCamera;
+
 #[derive(Clone, Component, PartialEq, Debug)]
 pub enum CosmicText {
     OneStyle(String),
-- 
GitLab