diff --git a/TODO b/TODO index 1d4f2d7600350872ac53c4e536530f337e1e07f2..795e37b2268a3c9c6998233ac8f3475e4678ee1f 100644 --- a/TODO +++ b/TODO @@ -3,8 +3,6 @@ BUGS INTRODUCED: -[ ] Not all text boxes want to be click-selectable - Make utils.rs in examples; move click functions there. BUGS SQUASHED: @@ -20,3 +18,6 @@ BUGS SQUASHED: Used to redraw on click, now redraws on scroll or drag? Now drag doesn't work either (tested on readonly, might be that) fixed by percentage-select fix + +[x] Not all text boxes want to be click-selectable + Make utils.rs in examples; move click functions there. diff --git a/examples/bevy_api_testing.rs b/examples/bevy_api_testing.rs index c2677d11076e29f91435c7e66174040df8b6c527..fcb9bc8f0abac266939ecf841e7671c7db8654d7 100644 --- a/examples/bevy_api_testing.rs +++ b/examples/bevy_api_testing.rs @@ -1,6 +1,7 @@ use bevy::prelude::*; use bevy_cosmic_edit::{ - ActiveEditor, CosmicEditPlugin, CosmicEditSpriteBundle, CosmicEditUiBundle, + change_active_editor_sprite, change_active_editor_ui, ActiveEditor, CosmicEditPlugin, + CosmicEditSpriteBundle, CosmicEditUiBundle, }; fn setup(mut commands: Commands) { @@ -42,5 +43,7 @@ fn main() { .add_plugins(DefaultPlugins) .add_plugins(CosmicEditPlugin::default()) .add_systems(Startup, setup) + .add_systems(Update, change_active_editor_ui) + .add_systems(Update, change_active_editor_sprite) .run(); } diff --git a/examples/font_per_widget.rs b/examples/font_per_widget.rs index 59687bb43a21a8dee00204ddbe1164a9d0dd5113..50d0843d14160b3d9d57981b18dd49eec0439a10 100644 --- a/examples/font_per_widget.rs +++ b/examples/font_per_widget.rs @@ -1,6 +1,8 @@ #![allow(clippy::type_complexity)] use bevy::{prelude::*, window::PrimaryWindow}; +use bevy_cosmic_edit::change_active_editor_sprite; +use bevy_cosmic_edit::change_active_editor_ui; use bevy_cosmic_edit::{ ActiveEditor, CosmicAttrs, CosmicEditPlugin, CosmicEditUiBundle, CosmicFontConfig, CosmicFontSystem, CosmicMetrics, CosmicText, CosmicTextPosition, @@ -292,5 +294,7 @@ fn main() { .add_plugins(DefaultPlugins) .add_plugins(CosmicEditPlugin { font_config }) .add_systems(Startup, setup) + .add_systems(Update, change_active_editor_ui) + .add_systems(Update, change_active_editor_sprite) .run(); } diff --git a/examples/multiple_sprites.rs b/examples/multiple_sprites.rs index cd54dad9b36ae3e45bc6ecd43e6919609a93a8fb..d71e6b5860fd5f6f7bdc762183dab7da544ed4c5 100644 --- a/examples/multiple_sprites.rs +++ b/examples/multiple_sprites.rs @@ -1,4 +1,6 @@ use bevy::{core_pipeline::clear_color::ClearColorConfig, prelude::*, window::PrimaryWindow}; +use bevy_cosmic_edit::change_active_editor_sprite; +use bevy_cosmic_edit::change_active_editor_ui; use bevy_cosmic_edit::{ ActiveEditor, CosmicAttrs, CosmicEditPlugin, CosmicEditSpriteBundle, CosmicFontConfig, CosmicFontSystem, CosmicMetrics, CosmicText, CosmicTextPosition, @@ -93,5 +95,7 @@ fn main() { .add_plugins(DefaultPlugins) .add_plugins(CosmicEditPlugin { font_config }) .add_systems(Startup, setup) + .add_systems(Update, change_active_editor_ui) + .add_systems(Update, change_active_editor_sprite) .run(); } diff --git a/src/lib.rs b/src/lib.rs index 80c95e6c566887c423a652a3b286d61803203f0d..8dcf611d028c7ee959a044721c482c9c2af1c6e3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -368,8 +368,6 @@ impl Plugin for CosmicEditPlugin { .add_systems( Update, ( - change_active_editor_ui, - change_active_editor_sprite, cosmic_edit_bevy_events, cosmic_edit_set_redraw, on_scale_factor_change, @@ -394,57 +392,6 @@ pub struct ActiveEditor { pub entity: Option<Entity>, } -fn change_active_editor_ui( - mut commands: Commands, - mut interaction_query: Query< - (&Interaction, Entity), - ( - Changed<Interaction>, - (With<CosmicEditor>, Without<ReadOnly>), - ), - >, -) { - for (interaction, entity) in interaction_query.iter_mut() { - if let Interaction::Pressed = interaction { - commands.insert_resource(ActiveEditor { - entity: Some(entity), - }); - } - } -} - -fn change_active_editor_sprite( - mut commands: Commands, - windows: Query<&Window, With<PrimaryWindow>>, - buttons: Res<Input<MouseButton>>, - mut cosmic_edit_query: Query< - (&mut Sprite, &GlobalTransform, Entity), - (With<CosmicEditor>, Without<ReadOnly>), - >, - camera_q: Query<(&Camera, &GlobalTransform)>, -) { - let window = windows.single(); - let (camera, camera_transform) = camera_q.single(); - if buttons.just_pressed(MouseButton::Left) { - for (sprite, node_transform, entity) in &mut cosmic_edit_query.iter_mut() { - let size = sprite.custom_size.unwrap_or(Vec2::new(1., 1.)); - let x_min = node_transform.affine().translation.x - size.x / 2.; - let y_min = node_transform.affine().translation.y - size.y / 2.; - let x_max = node_transform.affine().translation.x + size.x / 2.; - let y_max = node_transform.affine().translation.y + size.y / 2.; - 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), - }); - }; - } - }; - } - } -} - /// Resource struct that holds configuration options for cosmic fonts. #[derive(Resource, Clone)] pub struct CosmicFontConfig { @@ -965,11 +912,7 @@ pub fn cosmic_edit_bevy_events( if let Some(node_cursor_pos) = get_node_cursor_pos( primary_window, node_transform, - ( - // TODO this does not work with percent sizes - // well like I haven't tested it so it might - width, height, - ), + (width, height), is_ui_node, camera, camera_transform, diff --git a/src/utils.rs b/src/utils.rs index 8728dda5ac6469cbbf08a5ab5a6496b20edabfeb..b3d72d9f081f61ad21e7b53265798d03cc2381b4 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -10,3 +10,59 @@ pub fn get_timestamp() -> f64 { let duration = SystemTime::now().duration_since(UNIX_EPOCH).unwrap(); duration.as_millis() as f64 } + +use crate::{ActiveEditor, CosmicEditor, ReadOnly}; +use bevy::{prelude::*, ui::Interaction, window::PrimaryWindow}; + +// util fns for examples +// +pub fn change_active_editor_ui( + mut commands: Commands, + mut interaction_query: Query< + (&Interaction, Entity), + ( + Changed<Interaction>, + (With<CosmicEditor>, Without<ReadOnly>), + ), + >, +) { + for (interaction, entity) in interaction_query.iter_mut() { + if let Interaction::Pressed = interaction { + commands.insert_resource(ActiveEditor { + entity: Some(entity), + }); + } + } +} + +pub fn change_active_editor_sprite( + mut commands: Commands, + windows: Query<&Window, With<PrimaryWindow>>, + buttons: Res<Input<MouseButton>>, + mut cosmic_edit_query: Query< + (&mut Sprite, &GlobalTransform, Entity), + (With<CosmicEditor>, Without<ReadOnly>), + >, + camera_q: Query<(&Camera, &GlobalTransform)>, +) { + let window = windows.single(); + let (camera, camera_transform) = camera_q.single(); + if buttons.just_pressed(MouseButton::Left) { + for (sprite, node_transform, entity) in &mut cosmic_edit_query.iter_mut() { + let size = sprite.custom_size.unwrap_or(Vec2::new(1., 1.)); + let x_min = node_transform.affine().translation.x - size.x / 2.; + let y_min = node_transform.affine().translation.y - size.y / 2.; + let x_max = node_transform.affine().translation.x + size.x / 2.; + let y_max = node_transform.affine().translation.y + size.y / 2.; + 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), + }); + }; + } + }; + } + } +}