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