From ac95acd83fec7cb15438610c96122da8f6447928 Mon Sep 17 00:00:00 2001
From: sam edelsten <samedelsten1@gmail.com>
Date: Mon, 29 Apr 2024 19:47:58 +0100
Subject: [PATCH] tidy internal use statements

---
 src/cosmic_edit.rs | 112 ++++++++++++++++++++++++++++++++++
 src/cursor.rs      |   6 +-
 src/focus.rs       |   3 +-
 src/input.rs       |  13 +---
 src/lib.rs         | 149 +--------------------------------------------
 src/password.rs    |   7 +--
 src/placeholder.rs |   4 +-
 src/render.rs      |   7 +--
 src/util.rs        |  39 +++++++++++-
 src/widget.rs      |   5 --
 10 files changed, 159 insertions(+), 186 deletions(-)
 create mode 100644 src/cosmic_edit.rs

diff --git a/src/cosmic_edit.rs b/src/cosmic_edit.rs
new file mode 100644
index 0000000..e36a24f
--- /dev/null
+++ b/src/cosmic_edit.rs
@@ -0,0 +1,112 @@
+use crate::*;
+use bevy::prelude::*;
+
+#[derive(Clone, Component, PartialEq, Default)]
+pub enum CosmicMode {
+    InfiniteLine,
+    #[default]
+    Wrap,
+}
+
+/// Enum representing the position of the cosmic text.
+#[derive(Clone, Component)]
+pub enum CosmicTextPosition {
+    Center { padding: i32 },
+    TopLeft { padding: i32 },
+    Left { padding: i32 },
+}
+
+impl Default for CosmicTextPosition {
+    fn default() -> Self {
+        CosmicTextPosition::Center { padding: 5 }
+    }
+}
+
+#[derive(Component)]
+pub struct ReadOnly; // tag component
+
+#[derive(Component, Debug, Default)]
+pub struct XOffset {
+    pub left: f32,
+    pub width: f32,
+}
+
+#[derive(Component, Deref, DerefMut)]
+pub struct DefaultAttrs(pub AttrsOwned);
+
+impl Default for DefaultAttrs {
+    fn default() -> Self {
+        DefaultAttrs(AttrsOwned::new(Attrs::new()))
+    }
+}
+
+#[derive(Component, Default)]
+pub struct CosmicBackground(pub Option<Handle<Image>>);
+
+#[derive(Component, Default, Deref)]
+pub struct FillColor(pub Color);
+
+#[derive(Component, Default, Deref)]
+pub struct CursorColor(pub Color);
+
+#[derive(Component, Default, Deref)]
+pub struct SelectionColor(pub Color);
+
+#[derive(Component, Default)]
+pub struct CosmicMaxLines(pub usize);
+
+#[derive(Component, Default)]
+pub struct CosmicMaxChars(pub usize);
+
+#[derive(Component)]
+pub struct CosmicSource(pub Entity);
+
+#[derive(Bundle)]
+pub struct CosmicEditBundle {
+    // cosmic bits
+    pub buffer: CosmicBuffer,
+    // render bits
+    pub fill_color: FillColor,
+    pub cursor_color: CursorColor,
+    pub selection_color: SelectionColor,
+    pub default_attrs: DefaultAttrs,
+    pub background_image: CosmicBackground,
+    pub sprite_bundle: SpriteBundle,
+    // restriction bits
+    pub max_lines: CosmicMaxLines,
+    pub max_chars: CosmicMaxChars,
+    // layout bits
+    pub x_offset: XOffset,
+    pub mode: CosmicMode,
+    pub text_position: CosmicTextPosition,
+    pub padding: CosmicPadding,
+    pub widget_size: CosmicWidgetSize,
+}
+
+impl Default for CosmicEditBundle {
+    fn default() -> Self {
+        CosmicEditBundle {
+            buffer: Default::default(),
+            fill_color: Default::default(),
+            cursor_color: CursorColor(Color::BLACK),
+            selection_color: SelectionColor(Color::GRAY),
+            text_position: Default::default(),
+            default_attrs: Default::default(),
+            background_image: Default::default(),
+            max_lines: Default::default(),
+            max_chars: Default::default(),
+            mode: Default::default(),
+            sprite_bundle: SpriteBundle {
+                sprite: Sprite {
+                    custom_size: Some(Vec2::ONE * 128.0),
+                    ..default()
+                },
+                visibility: Visibility::Hidden,
+                ..default()
+            },
+            x_offset: Default::default(),
+            padding: Default::default(),
+            widget_size: Default::default(),
+        }
+    }
+}
diff --git a/src/cursor.rs b/src/cursor.rs
index b7dc8eb..e147209 100644
--- a/src/cursor.rs
+++ b/src/cursor.rs
@@ -1,10 +1,6 @@
+use crate::*;
 use bevy::{input::mouse::MouseMotion, prelude::*, window::PrimaryWindow};
 
-use crate::{CosmicBuffer, CosmicSource, CosmicTextChanged, CursorConfig};
-
-#[cfg(feature = "multicam")]
-use crate::CosmicPrimaryCamera;
-
 #[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)]
 pub struct CursorSet;
 
diff --git a/src/focus.rs b/src/focus.rs
index edef5dc..4f8d5f8 100644
--- a/src/focus.rs
+++ b/src/focus.rs
@@ -1,8 +1,7 @@
+use crate::*;
 use bevy::prelude::*;
 use cosmic_text::{Edit, Editor};
 
-use crate::{CosmicBuffer, CosmicEditor};
-
 #[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)]
 pub struct FocusSet;
 
diff --git a/src/input.rs b/src/input.rs
index 53481ca..6e7ad8f 100644
--- a/src/input.rs
+++ b/src/input.rs
@@ -1,8 +1,6 @@
 #![allow(clippy::too_many_arguments, clippy::type_complexity)]
 
-#[cfg(target_arch = "wasm32")]
-use bevy::tasks::AsyncComputeTaskPool;
-
+use crate::*;
 use bevy::{
     input::mouse::{MouseMotion, MouseScrollUnit, MouseWheel},
     prelude::*,
@@ -13,19 +11,14 @@ use cosmic_text::{Action, Cursor, Edit, Motion, Selection};
 #[cfg(target_arch = "wasm32")]
 use crate::DefaultAttrs;
 #[cfg(target_arch = "wasm32")]
+use bevy::tasks::AsyncComputeTaskPool;
+#[cfg(target_arch = "wasm32")]
 use js_sys::Promise;
 #[cfg(target_arch = "wasm32")]
 use wasm_bindgen::prelude::*;
 #[cfg(target_arch = "wasm32")]
 use wasm_bindgen_futures::JsFuture;
 
-use crate::{
-    buffer::{get_x_offset_center, get_y_offset_center, BufferExtras},
-    focus::FocusedWidget,
-    get_node_cursor_pos, CosmicBuffer, CosmicEditor, CosmicFontSystem, CosmicMaxChars,
-    CosmicMaxLines, CosmicSource, CosmicTextChanged, CosmicTextPosition, ReadOnly, XOffset,
-};
-
 #[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)]
 pub struct InputSet;
 
diff --git a/src/lib.rs b/src/lib.rs
index 5926c02..4f9a2ea 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,6 +1,7 @@
 #![allow(clippy::type_complexity)]
 
 mod buffer;
+mod cosmic_edit;
 mod cursor;
 mod focus;
 mod input;
@@ -15,6 +16,7 @@ use std::{path::PathBuf, time::Duration};
 use bevy::{prelude::*, transform::TransformSystem};
 
 pub use buffer::*;
+pub use cosmic_edit::*;
 pub use cosmic_text::{
     Action, Attrs, AttrsOwned, Buffer, Color as CosmicColor, Cursor, Edit, Editor, Family,
     FontSystem, Metrics, Shaping, Style as FontStyle, Weight as FontWeight,
@@ -27,7 +29,6 @@ pub use placeholder::*;
 pub use render::*;
 pub use util::*;
 pub use widget::*;
-
 /// Plugin struct that adds systems and initializes resources related to cosmic edit functionality.
 #[derive(Default)]
 pub struct CosmicEditPlugin {
@@ -67,13 +68,6 @@ impl Plugin for CosmicEditPlugin {
 #[derive(Component)]
 pub struct CosmicPrimaryCamera;
 
-#[derive(Clone, Component, PartialEq, Default)]
-pub enum CosmicMode {
-    InfiniteLine,
-    #[default]
-    Wrap,
-}
-
 #[derive(Default, Clone)]
 pub enum CursorConfig {
     #[default]
@@ -82,35 +76,12 @@ pub enum CursorConfig {
     None,
 }
 
-/// Enum representing the position of the cosmic text.
-#[derive(Clone, Component)]
-pub enum CosmicTextPosition {
-    Center { padding: i32 },
-    TopLeft { padding: i32 },
-    Left { padding: i32 },
-}
-
-impl Default for CosmicTextPosition {
-    fn default() -> Self {
-        CosmicTextPosition::Center { padding: 5 }
-    }
-}
-
 #[derive(Event, Debug)]
 pub struct CosmicTextChanged(pub (Entity, String));
 
 #[derive(Resource, Deref, DerefMut)]
 pub struct CosmicFontSystem(pub FontSystem);
 
-#[derive(Component)]
-pub struct ReadOnly; // tag component
-
-#[derive(Component, Debug, Default)]
-pub struct XOffset {
-    pub left: f32,
-    pub width: f32,
-}
-
 #[derive(Component, Deref, DerefMut)]
 pub struct CosmicEditor {
     #[deref]
@@ -129,86 +100,6 @@ impl CosmicEditor {
     }
 }
 
-#[derive(Component, Deref, DerefMut)]
-pub struct DefaultAttrs(pub AttrsOwned);
-
-impl Default for DefaultAttrs {
-    fn default() -> Self {
-        DefaultAttrs(AttrsOwned::new(Attrs::new()))
-    }
-}
-
-#[derive(Component, Default)]
-pub struct CosmicBackground(pub Option<Handle<Image>>);
-
-#[derive(Component, Default, Deref)]
-pub struct FillColor(pub Color);
-
-#[derive(Component, Default, Deref)]
-pub struct CursorColor(pub Color);
-
-#[derive(Component, Default, Deref)]
-pub struct SelectionColor(pub Color);
-
-#[derive(Component, Default)]
-pub struct CosmicMaxLines(pub usize);
-
-#[derive(Component, Default)]
-pub struct CosmicMaxChars(pub usize);
-
-#[derive(Component)]
-pub struct CosmicSource(pub Entity);
-
-#[derive(Bundle)]
-pub struct CosmicEditBundle {
-    // cosmic bits
-    pub buffer: CosmicBuffer,
-    // render bits
-    pub fill_color: FillColor,
-    pub cursor_color: CursorColor,
-    pub selection_color: SelectionColor,
-    pub default_attrs: DefaultAttrs,
-    pub background_image: CosmicBackground,
-    pub sprite_bundle: SpriteBundle,
-    // restriction bits
-    pub max_lines: CosmicMaxLines,
-    pub max_chars: CosmicMaxChars,
-    // layout bits
-    pub x_offset: XOffset,
-    pub mode: CosmicMode,
-    pub text_position: CosmicTextPosition,
-    pub padding: CosmicPadding,
-    pub widget_size: CosmicWidgetSize,
-}
-
-impl Default for CosmicEditBundle {
-    fn default() -> Self {
-        CosmicEditBundle {
-            buffer: Default::default(),
-            fill_color: Default::default(),
-            cursor_color: CursorColor(Color::BLACK),
-            selection_color: SelectionColor(Color::GRAY),
-            text_position: Default::default(),
-            default_attrs: Default::default(),
-            background_image: Default::default(),
-            max_lines: Default::default(),
-            max_chars: Default::default(),
-            mode: Default::default(),
-            sprite_bundle: SpriteBundle {
-                sprite: Sprite {
-                    custom_size: Some(Vec2::ONE * 128.0),
-                    ..default()
-                },
-                visibility: Visibility::Hidden,
-                ..default()
-            },
-            x_offset: Default::default(),
-            padding: Default::default(),
-            widget_size: Default::default(),
-        }
-    }
-}
-
 /// Resource struct that holds configuration options for cosmic fonts.
 #[derive(Resource, Clone)]
 pub struct CosmicFontConfig {
@@ -245,42 +136,6 @@ fn create_cosmic_font_system(cosmic_font_config: CosmicFontConfig) -> FontSystem
     cosmic_text::FontSystem::new_with_locale_and_db(locale, db)
 }
 
-pub fn get_node_cursor_pos(
-    window: &Window,
-    node_transform: &GlobalTransform,
-    size: (f32, f32),
-    is_ui_node: bool,
-    camera: &Camera,
-    camera_transform: &GlobalTransform,
-) -> Option<(f32, f32)> {
-    let (x_min, y_min, x_max, y_max) = (
-        node_transform.affine().translation.x - size.0 / 2.,
-        node_transform.affine().translation.y - size.1 / 2.,
-        node_transform.affine().translation.x + size.0 / 2.,
-        node_transform.affine().translation.y + size.1 / 2.,
-    );
-
-    window.cursor_position().and_then(|pos| {
-        if is_ui_node {
-            if x_min < pos.x && pos.x < x_max && y_min < pos.y && pos.y < y_max {
-                Some((pos.x - x_min, pos.y - y_min))
-            } else {
-                None
-            }
-        } else {
-            camera
-                .viewport_to_world_2d(camera_transform, pos)
-                .and_then(|pos| {
-                    if x_min < pos.x && pos.x < x_max && y_min < pos.y && pos.y < y_max {
-                        Some((pos.x - x_min, y_max - pos.y))
-                    } else {
-                        None
-                    }
-                })
-        }
-    })
-}
-
 #[cfg(target_arch = "wasm32")]
 pub fn get_timestamp() -> f64 {
     js_sys::Date::now()
diff --git a/src/password.rs b/src/password.rs
index fcfac40..f84819e 100644
--- a/src/password.rs
+++ b/src/password.rs
@@ -1,13 +1,8 @@
-use crate::{buffer::BufferExtras, placeholder::Placeholder, render::RenderSet};
+use crate::*;
 use bevy::prelude::*;
 use cosmic_text::{Cursor, Edit, Selection, Shaping};
 use unicode_segmentation::UnicodeSegmentation;
 
-use crate::{
-    input::{input_mouse, kb_input_text, kb_move_cursor},
-    CosmicBuffer, CosmicEditor, CosmicFontSystem, DefaultAttrs,
-};
-
 pub struct PasswordPlugin;
 
 #[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)]
diff --git a/src/placeholder.rs b/src/placeholder.rs
index f38a94b..d956760 100644
--- a/src/placeholder.rs
+++ b/src/placeholder.rs
@@ -1,9 +1,7 @@
-use crate::{buffer::BufferExtras, input::InputSet, render::RenderSet};
+use crate::*;
 use bevy::prelude::*;
 use cosmic_text::{Attrs, Edit};
 
-use crate::{CosmicBuffer, CosmicEditor, CosmicFontSystem, CosmicTextChanged, DefaultAttrs};
-
 #[derive(Component)]
 pub struct Placeholder {
     pub text: &'static str,
diff --git a/src/render.rs b/src/render.rs
index 6283d54..ef9d04d 100644
--- a/src/render.rs
+++ b/src/render.rs
@@ -1,13 +1,8 @@
+use crate::*;
 use bevy::{prelude::*, render::render_resource::Extent3d};
 use cosmic_text::{Color, Edit, SwashCache};
 use image::{imageops::FilterType, GenericImageView};
 
-use crate::{
-    widget::{CosmicPadding, CosmicWidgetSize, WidgetSet},
-    CosmicBackground, CosmicBuffer, CosmicEditor, CosmicFontSystem, CosmicTextPosition,
-    CursorColor, DefaultAttrs, FillColor, ReadOnly, SelectionColor, XOffset,
-};
-
 #[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)]
 pub struct RenderSet;
 
diff --git a/src/util.rs b/src/util.rs
index 65d687b..cb50afc 100644
--- a/src/util.rs
+++ b/src/util.rs
@@ -1,7 +1,6 @@
 // Common functions for examples
-use bevy::{prelude::*, window::PrimaryWindow};
-
 use crate::*;
+use bevy::{prelude::*, window::PrimaryWindow};
 
 pub fn deselect_editor_on_esc(i: Res<ButtonInput<KeyCode>>, mut focus: ResMut<FocusedWidget>) {
     if i.just_pressed(KeyCode::Escape) {
@@ -9,6 +8,42 @@ pub fn deselect_editor_on_esc(i: Res<ButtonInput<KeyCode>>, mut focus: ResMut<Fo
     }
 }
 
+pub fn get_node_cursor_pos(
+    window: &Window,
+    node_transform: &GlobalTransform,
+    size: (f32, f32),
+    is_ui_node: bool,
+    camera: &Camera,
+    camera_transform: &GlobalTransform,
+) -> Option<(f32, f32)> {
+    let (x_min, y_min, x_max, y_max) = (
+        node_transform.affine().translation.x - size.0 / 2.,
+        node_transform.affine().translation.y - size.1 / 2.,
+        node_transform.affine().translation.x + size.0 / 2.,
+        node_transform.affine().translation.y + size.1 / 2.,
+    );
+
+    window.cursor_position().and_then(|pos| {
+        if is_ui_node {
+            if x_min < pos.x && pos.x < x_max && y_min < pos.y && pos.y < y_max {
+                Some((pos.x - x_min, pos.y - y_min))
+            } else {
+                None
+            }
+        } else {
+            camera
+                .viewport_to_world_2d(camera_transform, pos)
+                .and_then(|pos| {
+                    if x_min < pos.x && pos.x < x_max && y_min < pos.y && pos.y < y_max {
+                        Some((pos.x - x_min, y_max - pos.y))
+                    } else {
+                        None
+                    }
+                })
+        }
+    })
+}
+
 pub fn change_active_editor_sprite(
     mut commands: Commands,
     windows: Query<&Window, With<PrimaryWindow>>,
diff --git a/src/widget.rs b/src/widget.rs
index e20047a..e79ac22 100644
--- a/src/widget.rs
+++ b/src/widget.rs
@@ -2,11 +2,6 @@ use crate::*;
 use bevy::{prelude::*, window::PrimaryWindow};
 use cosmic_text::Affinity;
 
-use self::{
-    buffer::{get_x_offset_center, get_y_offset_center},
-    input::InputSet,
-};
-
 #[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)]
 pub struct WidgetSet;
 
-- 
GitLab