Skip to content
Snippets Groups Projects
Commit b3bc0fcd authored by sam edelsten's avatar sam edelsten
Browse files

refactor remaining examples

add sprite bundle click handling to lib.rs
parent 12da846c
No related branches found
No related tags found
No related merge requests found
......@@ -3,6 +3,13 @@
BUGS INTRODUCED:
[ ] MultiStyle text is fully dead. Idk what I did to it :(
[ ] Cannot select text on Ui bundles sized by percentage
Maybe intercept percentages and set as px on instantiation?
Replace evaluate() with custom percent to px fn?
Read into how evaluate() works
[ ] Window resizing broken
Used to redraw on click, now redraws on scroll or drag?
Now drag doesn't work either (tested on readonly, might be that)
......
use bevy::{prelude::*, window::PrimaryWindow};
use bevy::{core_pipeline::clear_color::ClearColorConfig, prelude::*, window::PrimaryWindow};
use bevy_cosmic_edit::{
create_cosmic_font_system, spawn_cosmic_edit, ActiveEditor, CosmicEditMeta, CosmicEditPlugin,
CosmicFont, CosmicFontConfig, CosmicMetrics, CosmicNode, CosmicText, CosmicTextPos,
ActiveEditor, CosmicAttrs, CosmicEditPlugin, CosmicEditUiBundle, CosmicFontConfig,
CosmicFontSystem, CosmicMetrics, CosmicText, CosmicTextPosition,
};
use cosmic_text::AttrsOwned;
fn setup(
mut commands: Commands,
windows: Query<&Window, With<PrimaryWindow>>,
mut cosmic_fonts: ResMut<Assets<CosmicFont>>,
mut font_system: ResMut<CosmicFontSystem>,
) {
let primary_window = windows.single();
commands.spawn(Camera2dBundle::default());
let root = commands
.spawn(NodeBundle {
style: Style {
display: Display::Flex,
width: Val::Percent(100.),
height: Val::Percent(100.),
..default()
},
..default()
})
.id();
let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
let cosmic_font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: Some(vec![font_bytes]),
load_system_fonts: true,
let camera_bundle = Camera2dBundle {
camera_2d: Camera2d {
clear_color: ClearColorConfig::Custom(Color::WHITE),
},
..default()
};
let font_system = create_cosmic_font_system(cosmic_font_config);
let font_system_handle: Handle<CosmicFont> = cosmic_fonts.add(CosmicFont(font_system));
commands.spawn(camera_bundle);
let mut attrs = cosmic_text::Attrs::new();
attrs = attrs.family(cosmic_text::Family::Name("Victor Mono"));
attrs = attrs.color(cosmic_text::Color::rgb(0x94, 0x00, 0xD3));
let cosmic_edit_meta = CosmicEditMeta {
text: CosmicText::OneStyle("😀😀😀 x => y".to_string()),
attrs: AttrsOwned::new(attrs),
text_pos: CosmicTextPos::Center,
bg: Color::WHITE,
metrics: CosmicMetrics {
let scale_factor = primary_window.scale_factor() as f32;
let cosmic_edit = CosmicEditUiBundle {
style: Style {
width: Val::Percent(100.),
height: Val::Percent(100.),
..default()
},
cosmic_metrics: CosmicMetrics {
font_size: 14.,
line_height: 18.,
scale_factor: primary_window.scale_factor() as f32,
scale_factor,
},
font_system_handle,
node: CosmicNode::Ui,
size: None,
readonly: false,
bg_image: None,
};
let cosmic_edit = spawn_cosmic_edit(&mut commands, &mut cosmic_fonts, cosmic_edit_meta);
commands.entity(root).add_child(cosmic_edit);
text_position: CosmicTextPosition::Center,
cosmic_attrs: CosmicAttrs(AttrsOwned::new(attrs)),
..default()
}
.set_text(
CosmicText::OneStyle("😀😀😀 x => y".to_string()),
AttrsOwned::new(attrs),
&mut font_system.0,
);
let cosmic_edit = commands.spawn(cosmic_edit).id();
commands.insert_resource(ActiveEditor {
entity: Some(cosmic_edit),
});
}
fn main() {
let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
let font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: Some(vec![font_bytes]),
load_system_fonts: true,
};
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(CosmicEditPlugin)
.add_plugins(CosmicEditPlugin { font_config })
.add_systems(Startup, setup)
.run();
}
use bevy::{core_pipeline::clear_color::ClearColorConfig, prelude::*, window::PrimaryWindow};
use bevy_cosmic_edit::{
create_cosmic_font_system, spawn_cosmic_edit, ActiveEditor, CosmicEditMeta, CosmicEditPlugin,
CosmicEditSprite, CosmicFont, CosmicFontConfig, CosmicMetrics, CosmicNode, CosmicText,
CosmicTextPos,
ActiveEditor, CosmicAttrs, CosmicEditPlugin, CosmicEditSpriteBundle, CosmicFontConfig,
CosmicFontSystem, CosmicMetrics, CosmicText, CosmicTextPosition,
};
use cosmic_text::AttrsOwned;
fn setup(
mut commands: Commands,
windows: Query<&Window, With<PrimaryWindow>>,
mut cosmic_fonts: ResMut<Assets<CosmicFont>>,
mut font_system: ResMut<CosmicFontSystem>,
) {
let primary_window = windows.single();
let camera_bundle = Camera2dBundle {
......@@ -19,49 +18,51 @@ fn setup(
..default()
};
commands.spawn(camera_bundle);
let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
let cosmic_font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: Some(vec![font_bytes]),
load_system_fonts: true,
};
let font_system = create_cosmic_font_system(cosmic_font_config);
let font_system_handle: Handle<CosmicFont> = cosmic_fonts.add(CosmicFont(font_system));
let mut attrs = cosmic_text::Attrs::new();
attrs = attrs.family(cosmic_text::Family::Name("Victor Mono"));
attrs = attrs.color(cosmic_text::Color::rgb(0x94, 0x00, 0xD3));
let scale_factor = primary_window.scale_factor() as f32;
let cosmic_edit_meta = CosmicEditMeta {
text: CosmicText::OneStyle("😀😀😀 x => y".to_string()),
attrs: AttrsOwned::new(attrs),
text_pos: CosmicTextPos::Center,
bg: Color::WHITE,
metrics: CosmicMetrics {
let cosmic_edit = CosmicEditSpriteBundle {
sprite: Sprite {
custom_size: Some(Vec2::new(primary_window.width(), primary_window.height())),
..default()
},
cosmic_metrics: CosmicMetrics {
font_size: 14.,
line_height: 18.,
scale_factor,
},
font_system_handle,
node: CosmicNode::Sprite(CosmicEditSprite {
transform: Transform {
translation: Vec3::new(0., 0., 1.),
..default()
},
}),
size: Some((primary_window.width(), primary_window.height())),
readonly: false,
bg_image: None,
};
let cosmic_edit = spawn_cosmic_edit(&mut commands, &mut cosmic_fonts, cosmic_edit_meta);
text_position: CosmicTextPosition::Center,
cosmic_attrs: CosmicAttrs(AttrsOwned::new(attrs)),
..default()
}
.set_text(
CosmicText::OneStyle("😀😀😀 x => y".to_string()),
AttrsOwned::new(attrs),
&mut font_system.0,
);
let cosmic_edit = commands.spawn(cosmic_edit).id();
commands.insert_resource(ActiveEditor {
entity: Some(cosmic_edit),
});
}
fn main() {
let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
let font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: Some(vec![font_bytes]),
load_system_fonts: true,
};
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(CosmicEditPlugin)
.add_plugins(CosmicEditPlugin { font_config })
.add_systems(Startup, setup)
.run();
}
#![allow(clippy::type_complexity)]
use bevy::{prelude::*, window::PrimaryWindow};
use bevy_cosmic_edit::{
create_cosmic_font_system, get_cosmic_text, spawn_cosmic_edit, ActiveEditor, CosmicEdit,
CosmicEditMeta, CosmicEditPlugin, CosmicFont, CosmicFontConfig, CosmicMetrics, CosmicNode,
CosmicText, CosmicTextPos,
ActiveEditor, CosmicAttrs, CosmicEditPlugin, CosmicEditUiBundle, CosmicFontConfig,
CosmicFontSystem, CosmicMetrics, CosmicText, CosmicTextPosition,
};
use cosmic_text::*;
use cosmic_text::{Attrs, AttrsOwned, Family};
fn setup(
mut commands: Commands,
windows: Query<&Window, With<PrimaryWindow>>,
mut cosmic_fonts: ResMut<Assets<CosmicFont>>,
mut font_system: ResMut<CosmicFontSystem>,
) {
commands.spawn(Camera2dBundle::default());
let root = commands
......@@ -24,13 +25,6 @@ fn setup(
})
.id();
let primary_window = windows.single();
let cosmic_font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: None,
load_system_fonts: true,
};
let font_system = create_cosmic_font_system(cosmic_font_config);
let font_system_handle = cosmic_fonts.add(CosmicFont(font_system));
let attrs = Attrs::new();
let serif_attrs = attrs.family(Family::Serif);
......@@ -229,77 +223,74 @@ fn setup(
)],
];
let cosmic_edit_meta_1 = CosmicEditMeta {
text: CosmicText::MultiStyle(lines),
attrs: AttrsOwned::new(attrs),
text_pos: CosmicTextPos::Center,
metrics: CosmicMetrics {
let cosmic_edit_1 = CosmicEditUiBundle {
text_position: bevy_cosmic_edit::CosmicTextPosition::Center,
cosmic_attrs: CosmicAttrs(AttrsOwned::new(attrs)),
cosmic_metrics: CosmicMetrics {
font_size: 18.,
line_height: 22.,
scale_factor: primary_window.scale_factor() as f32,
},
font_system_handle: font_system_handle.clone(),
node: CosmicNode::Ui,
size: None,
bg: bevy::prelude::Color::WHITE,
readonly: false,
bg_image: None,
};
let cosmic_edit_1 = spawn_cosmic_edit(&mut commands, &mut cosmic_fonts, cosmic_edit_meta_1);
style: Style {
width: Val::Percent(50.),
height: Val::Percent(100.),
..default()
},
background_color: BackgroundColor(Color::WHITE),
..default()
}
.set_text(
CosmicText::MultiStyle(lines),
AttrsOwned::new(attrs),
&mut font_system.0,
);
let mut attrs_2 = cosmic_text::Attrs::new();
attrs_2 = attrs_2.family(cosmic_text::Family::Name("Times New Roman"));
let cosmic_edit_meta_2 = CosmicEditMeta {
text: CosmicText::OneStyle("Widget 2.\nClick on me =>".to_string()),
attrs: AttrsOwned::new(attrs_2),
metrics: CosmicMetrics {
let cosmic_edit_2 = CosmicEditUiBundle {
cosmic_attrs: CosmicAttrs(AttrsOwned::new(attrs_2)),
cosmic_metrics: CosmicMetrics {
font_size: 14.,
line_height: 18.,
scale_factor: primary_window.scale_factor() as f32,
},
font_system_handle: font_system_handle.clone(),
node: CosmicNode::Ui,
text_pos: CosmicTextPos::Center,
size: None,
bg: bevy::prelude::Color::WHITE.with_a(0.8),
readonly: false,
bg_image: None,
};
let cosmic_edit_2 = spawn_cosmic_edit(&mut commands, &mut cosmic_fonts, cosmic_edit_meta_2);
commands.entity(root).add_child(cosmic_edit_1);
commands.entity(root).add_child(cosmic_edit_2);
text_position: CosmicTextPosition::Center,
background_color: BackgroundColor(Color::WHITE.with_a(0.8)),
style: Style {
width: Val::Percent(50.),
height: Val::Percent(100.),
..default()
},
..default()
}
.set_text(
CosmicText::OneStyle("Widget 2.\nClick on me =>".to_string()),
AttrsOwned::new(attrs_2),
&mut font_system.0,
);
commands.insert_resource(ActiveEditor {
entity: Some(cosmic_edit_1),
let mut id = None;
// Spawn the CosmicEditUiBundles as children of root
commands.entity(root).with_children(|parent| {
id = Some(parent.spawn(cosmic_edit_1).id());
parent.spawn(cosmic_edit_2);
});
}
fn change_active_editor(
mut commands: Commands,
mut interaction_query: Query<
(&Interaction, &mut CosmicEdit, Entity),
(Changed<Interaction>, With<CosmicEdit>),
>,
) {
for (interaction, cosmic_edit, entity) in interaction_query.iter_mut() {
if let Interaction::Pressed = interaction {
commands.insert_resource(ActiveEditor {
entity: Some(entity),
});
info!(
"Widget text: {}",
get_cosmic_text(&cosmic_edit.editor.buffer())
);
}
}
// Set active editor
commands.insert_resource(ActiveEditor { entity: id });
}
fn main() {
let font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: None,
load_system_fonts: true,
};
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(CosmicEditPlugin)
.add_plugins(CosmicEditPlugin { font_config })
.add_systems(Startup, setup)
.add_systems(Update, change_active_editor)
.run();
}
use bevy::{core_pipeline::clear_color::ClearColorConfig, prelude::*, window::PrimaryWindow};
use bevy_cosmic_edit::{
create_cosmic_font_system, spawn_cosmic_edit, ActiveEditor, CosmicEdit, CosmicEditMeta,
CosmicEditPlugin, CosmicEditSprite, CosmicFont, CosmicFontConfig, CosmicMetrics, CosmicNode,
CosmicText, CosmicTextPos,
ActiveEditor, CosmicAttrs, CosmicEditPlugin, CosmicEditSpriteBundle, CosmicFontConfig,
CosmicFontSystem, CosmicMetrics, CosmicText, CosmicTextPosition,
};
use cosmic_text::AttrsOwned;
#[derive(Component)]
pub struct MainCamera;
fn setup(
mut commands: Commands,
windows: Query<&Window, With<PrimaryWindow>>,
mut cosmic_fonts: ResMut<Assets<CosmicFont>>,
mut font_system: ResMut<CosmicFontSystem>,
) {
let primary_window = windows.single();
let camera_bundle = Camera2dBundle {
......@@ -21,15 +17,8 @@ fn setup(
},
..default()
};
commands.spawn((camera_bundle, MainCamera));
let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
let cosmic_font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: Some(vec![font_bytes]),
load_system_fonts: true,
};
let font_system = create_cosmic_font_system(cosmic_font_config);
let font_system_handle = cosmic_fonts.add(CosmicFont(font_system));
commands.spawn(camera_bundle);
let mut attrs = cosmic_text::Attrs::new();
attrs = attrs.family(cosmic_text::Family::Name("Victor Mono"));
attrs = attrs.color(cosmic_text::Color::rgb(0x94, 0x00, 0xD3));
......@@ -38,111 +27,71 @@ fn setup(
line_height: 18.,
scale_factor: primary_window.scale_factor() as f32,
};
let cosmic_edit_meta = CosmicEditMeta {
text: CosmicText::OneStyle("😀😀😀 x => y".to_string()),
attrs: AttrsOwned::new(attrs),
text_pos: CosmicTextPos::Center,
metrics: metrics.clone(),
font_system_handle: font_system_handle.clone(),
node: CosmicNode::Sprite(CosmicEditSprite {
transform: Transform {
translation: Vec3::new(-primary_window.width() / 4., 0., 1.),
..default()
},
}),
size: Some((primary_window.width() / 2., primary_window.height())),
bg: Color::WHITE,
readonly: false,
bg_image: None,
};
let cosmic_edit_1 = spawn_cosmic_edit(&mut commands, &mut cosmic_fonts, cosmic_edit_meta);
let cosmic_edit_meta = CosmicEditMeta {
text: CosmicText::OneStyle("Widget_2. Click on me".to_string()),
attrs: AttrsOwned::new(attrs),
text_pos: CosmicTextPos::Center,
metrics: metrics.clone(),
font_system_handle: font_system_handle.clone(),
node: CosmicNode::Sprite(CosmicEditSprite {
transform: Transform {
translation: Vec3::new(
primary_window.width() / 4.,
-primary_window.height() / 4.,
1.,
),
..default()
},
}),
size: Some((primary_window.width() / 2., primary_window.height() / 2.)),
bg: Color::GRAY.with_a(0.5),
readonly: false,
bg_image: None,
};
let _ = spawn_cosmic_edit(&mut commands, &mut cosmic_fonts, cosmic_edit_meta);
let cosmic_edit_meta = CosmicEditMeta {
text: CosmicText::OneStyle("Widget_3. Click on me".to_string()),
attrs: AttrsOwned::new(attrs),
text_pos: CosmicTextPos::Center,
metrics: metrics.clone(),
font_system_handle: font_system_handle.clone(),
node: CosmicNode::Sprite(CosmicEditSprite {
transform: Transform {
translation: Vec3::new(
primary_window.width() / 4.,
primary_window.height() / 4.,
1.,
),
..default()
},
}),
size: Some((primary_window.width() / 2., primary_window.height() / 2.)),
bg: Color::GRAY.with_a(0.8),
readonly: false,
bg_image: None,
};
let _ = spawn_cosmic_edit(&mut commands, &mut cosmic_fonts, cosmic_edit_meta);
commands.insert_resource(ActiveEditor {
entity: Some(cosmic_edit_1),
});
}
fn change_active_editor(
mut commands: Commands,
windows: Query<&Window, With<PrimaryWindow>>,
buttons: Res<Input<MouseButton>>,
mut cosmic_edit_query: Query<(&mut CosmicEdit, &GlobalTransform, Entity), With<CosmicEdit>>,
camera_q: Query<(&Camera, &GlobalTransform), With<MainCamera>>,
) {
let window = windows.single();
let (camera, camera_transform) = camera_q.single();
if buttons.just_pressed(MouseButton::Left) {
for (cosmic_edit, node_transform, entity) in &mut cosmic_edit_query.iter_mut() {
let size = (cosmic_edit.width, cosmic_edit.height);
let x_min = node_transform.affine().translation.x - size.0 / 2.;
let y_min = node_transform.affine().translation.y - size.1 / 2.;
let x_max = node_transform.affine().translation.x + size.0 / 2.;
let y_max = node_transform.affine().translation.y + size.1 / 2.;
window.cursor_position().and_then(|pos| {
if let Some(pos) = camera.viewport_to_world_2d(camera_transform, pos) {
Some({
if x_min < pos.x && pos.x < x_max && y_min < pos.y && pos.y < y_max {
commands.insert_resource(ActiveEditor {
entity: Some(entity),
});
};
})
} else {
None
}
});
}
let cosmic_edit_1 = CosmicEditSpriteBundle {
cosmic_attrs: CosmicAttrs(AttrsOwned::new(attrs)),
cosmic_metrics: metrics.clone(),
sprite: Sprite {
custom_size: Some(Vec2 {
x: primary_window.width() / 2.,
y: primary_window.height(),
}),
..default()
},
transform: Transform::from_translation(Vec3::new(-primary_window.width() / 4., 0., 1.)),
text_position: CosmicTextPosition::Center,
background_color: BackgroundColor(Color::ALICE_BLUE),
..default()
}
.set_text(
CosmicText::OneStyle("😀😀😀 x => y".to_string()),
AttrsOwned::new(attrs),
&mut font_system.0,
);
let cosmic_edit_2 = CosmicEditSpriteBundle {
cosmic_attrs: CosmicAttrs(AttrsOwned::new(attrs)),
cosmic_metrics: metrics,
sprite: Sprite {
custom_size: Some(Vec2 {
x: primary_window.width() / 2.,
y: primary_window.height() / 2.,
}),
..default()
},
transform: Transform::from_translation(Vec3::new(
primary_window.width() / 4.,
-primary_window.height() / 4.,
1.,
)),
text_position: CosmicTextPosition::Center,
background_color: BackgroundColor(Color::GRAY.with_a(0.5)),
..default()
}
.set_text(
CosmicText::OneStyle("Widget_2. Click on me".to_string()),
AttrsOwned::new(attrs),
&mut font_system.0,
);
let id = commands.spawn(cosmic_edit_1).id();
commands.insert_resource(ActiveEditor { entity: Some(id) });
commands.spawn(cosmic_edit_2);
}
fn main() {
let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
let font_config = CosmicFontConfig {
fonts_dir_path: None,
font_bytes: Some(vec![font_bytes]),
load_system_fonts: true,
};
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(CosmicEditPlugin)
.add_plugins(CosmicEditPlugin { font_config })
.add_systems(Startup, setup)
.add_systems(Update, change_active_editor)
.run();
}
......@@ -22,7 +22,7 @@ use image::{imageops::FilterType, GenericImageView};
#[derive(Clone)]
pub enum CosmicText {
OneStyle(String),
MultiStyle(Vec<Vec<(String, cosmic_text::AttrsOwned)>>),
MultiStyle(Vec<Vec<(String, AttrsOwned)>>),
}
/// Enum representing the position of the cosmic text.
......@@ -57,9 +57,6 @@ pub struct CosmicFontSystem(pub FontSystem);
#[derive(Component)]
pub struct ReadOnly; // tag component
#[derive(Component)]
pub struct CosmicUiNode; // tag component
#[derive(Component)]
pub struct CosmicEditor(pub Editor);
......@@ -74,7 +71,7 @@ impl CosmicEditor {
&mut self,
text: CosmicText,
attrs: AttrsOwned,
// i'd like to get this automagically but i'm too 3head -bytemunch
// i'd like to get the font system automagically but i'm too 3head -bytemunch
font_system: &mut FontSystem,
) -> &mut Self {
let editor = &mut self.0;
......@@ -88,7 +85,7 @@ impl CosmicEditor {
Shaping::Advanced,
);
}
// TODO test
// TODO why not working?
CosmicText::MultiStyle(lines) => {
for line in lines {
let mut line_text = String::new();
......@@ -313,6 +310,18 @@ pub struct CosmicEditSpriteBundle {
pub background_image: CosmicBackground,
}
impl CosmicEditSpriteBundle {
pub fn set_text(
mut self,
text: CosmicText,
attrs: AttrsOwned,
font_system: &mut FontSystem,
) -> Self {
self.editor.set_text(text, attrs, font_system);
self
}
}
impl Default for CosmicEditSpriteBundle {
fn default() -> Self {
Self {
......@@ -361,7 +370,8 @@ impl Plugin for CosmicEditPlugin {
.add_systems(
Update,
(
change_active_editor,
change_active_editor_ui,
change_active_editor_sprite,
cosmic_edit_bevy_events,
cosmic_edit_set_redraw,
on_scale_factor_change,
......@@ -386,20 +396,53 @@ pub struct ActiveEditor {
pub entity: Option<Entity>,
}
fn change_active_editor(
fn change_active_editor_ui(
mut commands: Commands,
mut interaction_query: Query<
(&Interaction, &mut CosmicEditor, Entity),
(Changed<Interaction>, With<CosmicEditor>),
(&Interaction, Entity),
(
Changed<Interaction>,
(With<CosmicEditor>, Without<ReadOnly>),
),
>,
) {
for (interaction, editor, entity) in interaction_query.iter_mut() {
for (interaction, entity) in interaction_query.iter_mut() {
if let Interaction::Pressed = interaction {
info!("PRESSED");
commands.insert_resource(ActiveEditor {
entity: Some(entity),
});
info!("Widget text: {}", editor.get_text());
}
}
}
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),
});
};
}
};
}
}
}
......@@ -630,8 +673,8 @@ pub fn cosmic_edit_bevy_events(
let (width, height, is_ui_node) = match style_query.get(entity) {
Ok(style) => (
style.width.evaluate(1.).unwrap(),
style.height.evaluate(1.).unwrap(),
style.width.evaluate(1.).unwrap_or(1.),
style.height.evaluate(1.).unwrap_or(1.),
true,
),
Err(_) => {
......@@ -1054,8 +1097,6 @@ fn redraw_buffer_common(
let swash_cache = &mut swash_cache_state.swash_cache;
editor.shape_as_needed(&mut font_system.0);
if editor.buffer().redraw() {
println!("REDRAW");
editor
.buffer_mut()
.set_size(&mut font_system.0, width, height);
......@@ -1116,10 +1157,8 @@ fn redraw_buffer_common(
);
editor.buffer_mut().set_redraw(false);
println!("TRY CLEAR");
if let Some(prev_image) = images.get_mut(cosmic_canvas_img_handle) {
if *cosmic_canvas_img_handle == bevy::render::texture::DEFAULT_IMAGE_HANDLE.typed() {
println!("SWAP HANDLE");
let mut prev_image = prev_image.clone();
prev_image.data.clear();
prev_image.data.extend_from_slice(pixels.as_slice());
......@@ -1133,7 +1172,6 @@ fn redraw_buffer_common(
let new_handle = images.set(new_handle, prev_image);
*cosmic_canvas_img_handle = new_handle;
} else {
println!("CLEAR CANVAS");
prev_image.data.clear();
prev_image.data.extend_from_slice(pixels.as_slice());
prev_image.resize(Extent3d {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment