diff --git a/examples/basic_sprite.rs b/examples/basic_sprite.rs index bfdbefb28115ce1a89a059afc05b7ba2c01c572a..09073d0dd2ed969a571185079afa9414ad7c1b80 100644 --- a/examples/basic_sprite.rs +++ b/examples/basic_sprite.rs @@ -27,7 +27,6 @@ fn setup( "馃榾馃榾馃榾 x => y", attrs, ), - text_position: CosmicTextPosition::Center, sprite_bundle: SpriteBundle { sprite: Sprite { custom_size: Some(Vec2::new(primary_window.width(), primary_window.height())), diff --git a/examples/basic_ui.rs b/examples/basic_ui.rs index 2584d4c57c19414a58f3c2e64d08bf754d66acbe..94eb841d7697f97b9589aa2f45bd7359f863794f 100644 --- a/examples/basic_ui.rs +++ b/examples/basic_ui.rs @@ -23,7 +23,6 @@ fn setup(mut commands: Commands, mut font_system: ResMut<CosmicFontSystem>) { vec![("Banana", attrs)], attrs, ), - text_position: CosmicTextPosition::Center, ..default() },)) .id(); diff --git a/examples/font_per_widget.rs b/examples/font_per_widget.rs index f6f6959d825d7800134a9b529e9f8b8ba8ce5bc9..17282745303a8cd5cc5de4f2249dae72f73ab705 100644 --- a/examples/font_per_widget.rs +++ b/examples/font_per_widget.rs @@ -101,7 +101,6 @@ fn setup(mut commands: Commands, mut font_system: ResMut<CosmicFontSystem>) { lines, attrs, ), - text_position: bevy_cosmic_edit::CosmicTextPosition::Center, ..default() }) .id(); @@ -117,7 +116,6 @@ fn setup(mut commands: Commands, mut font_system: ResMut<CosmicFontSystem>) { "Widget 2.\nClick on me =>", attrs_2, ), - text_position: CosmicTextPosition::Center, ..default() }) .id(); diff --git a/examples/multiple_sprites.rs b/examples/multiple_sprites.rs index 13d15f419143813b983dc5ec700b9e95ca2dc179..e8623fcaf16552907c23699ac2a987aa010fd2c3 100644 --- a/examples/multiple_sprites.rs +++ b/examples/multiple_sprites.rs @@ -22,7 +22,6 @@ fn setup( attrs = attrs.color(bevy_color_to_cosmic(Color::PURPLE)); commands.spawn(CosmicEditBundle { - text_position: CosmicTextPosition::Center, fill_color: FillColor(Color::ALICE_BLUE), buffer: CosmicBuffer::new(&mut font_system, Metrics::new(14., 18.)).with_text( &mut font_system, @@ -44,7 +43,6 @@ fn setup( }); commands.spawn(CosmicEditBundle { - text_position: CosmicTextPosition::Center, fill_color: FillColor(Color::GRAY.with_a(0.5)), buffer: CosmicBuffer::new(&mut font_system, Metrics::new(14., 18.)).with_text( &mut font_system, diff --git a/examples/placeholder.rs b/examples/placeholder.rs index bc081eac7c505b91ecf1b0d5160ab98d14ef3124..82d459515548428c7a89a781ad60f275a872f56b 100644 --- a/examples/placeholder.rs +++ b/examples/placeholder.rs @@ -24,7 +24,6 @@ fn setup(mut commands: Commands, mut font_system: ResMut<CosmicFontSystem>) { CosmicEditBundle { buffer: CosmicBuffer::new(&mut font_system, Metrics::new(20., 20.)) .with_rich_text(&mut font_system, vec![("", attrs)], attrs), - text_position: CosmicTextPosition::Center, ..default() }, Placeholder::new( diff --git a/examples/readonly.rs b/examples/readonly.rs index b41ad9f393a78a68bc971b1911bca9f1c7a1eb52..0a76bd89f69ca32326a3256605b251a42ac6d92f 100644 --- a/examples/readonly.rs +++ b/examples/readonly.rs @@ -23,7 +23,6 @@ fn setup(mut commands: Commands, mut font_system: ResMut<CosmicFontSystem>) { // spawn editor let cosmic_edit = commands .spawn(CosmicEditBundle { - text_position: CosmicTextPosition::Center, buffer: CosmicBuffer::new(&mut font_system, Metrics::new(14., 18.)).with_text( &mut font_system, "馃榾馃榾馃榾 x => y\nRead only widget", diff --git a/src/input.rs b/src/input.rs index 135703e4497aa9d0177dc798f167760b06595d51..9bb5477d732c52e0822f1c48d120e36e0a5019b1 100644 --- a/src/input.rs +++ b/src/input.rs @@ -123,7 +123,7 @@ pub(crate) fn input_mouse( } let (padding_x, padding_y) = match text_position { - CosmicTextPosition::Center => ( + CosmicTextPosition::Center { padding: _ } => ( get_x_offset_center(width * scale_factor, &buffer), get_y_offset_center(height * scale_factor, &buffer), ), diff --git a/src/layout.rs b/src/layout.rs index 2f6fab3a0be0ac11c20a02e92b9fc79868d8674c..f5d0bce834a9809cf2fbd15f35922136e5655fd3 100644 --- a/src/layout.rs +++ b/src/layout.rs @@ -46,7 +46,7 @@ pub fn set_padding( } padding.0 = match position { - CosmicTextPosition::Center => Vec2::new( + CosmicTextPosition::Center { padding: _ } => Vec2::new( get_x_offset_center(size.0.x, &buffer) as f32, get_y_offset_center(size.0.y, &buffer) as f32, ), @@ -91,7 +91,7 @@ pub fn set_buffer_size( ) { for (mut buffer, mode, size, position) in query.iter_mut() { let padding_x = match position { - CosmicTextPosition::Center => 0., + CosmicTextPosition::Center { padding: _ } => 0., CosmicTextPosition::TopLeft { padding } => *padding as f32, CosmicTextPosition::Left { padding } => *padding as f32, }; @@ -148,8 +148,7 @@ pub fn set_x_offset( } let padding_x = match position { - // TODO: This 5 should be specified by user - CosmicTextPosition::Center => 5., + CosmicTextPosition::Center { padding } => *padding as f32, CosmicTextPosition::TopLeft { padding } => *padding as f32, CosmicTextPosition::Left { padding } => *padding as f32, }; diff --git a/src/lib.rs b/src/lib.rs index b14e0c3ccdce0ab8d9dbba7deeab214b7d979010..726f5a242712ffeace3c930240f7ae0691c553c0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -55,16 +55,17 @@ pub enum CursorConfig { } /// Enum representing the position of the cosmic text. -#[derive(Clone, Component, Default)] +#[derive(Clone, Component)] pub enum CosmicTextPosition { - #[default] - Center, - TopLeft { - padding: i32, - }, - Left { - padding: i32, - }, + Center { padding: i32 }, + TopLeft { padding: i32 }, + Left { padding: i32 }, +} + +impl Default for CosmicTextPosition { + fn default() -> Self { + CosmicTextPosition::Center { padding: 5 } + } } #[derive(Event, Debug)] diff --git a/src/render.rs b/src/render.rs index ab50243b751f5f85f590747ec68b46b5d63be4d3..78e376ed4d9c069ce0bbc773944d780dd49b0bfc 100644 --- a/src/render.rs +++ b/src/render.rs @@ -4,8 +4,8 @@ use image::{imageops::FilterType, GenericImageView}; use crate::{ layout::{CosmicPadding, CosmicWidgetSize}, - CosmicBackground, CosmicBuffer, CosmicEditor, CosmicFontSystem, CursorColor, DefaultAttrs, - FillColor, ReadOnly, SelectionColor, XOffset, + CosmicBackground, CosmicBuffer, CosmicEditor, CosmicFontSystem, CosmicTextPosition, + CursorColor, DefaultAttrs, FillColor, ReadOnly, SelectionColor, XOffset, }; #[derive(Resource)] @@ -77,6 +77,7 @@ pub(crate) fn render_texture( &CosmicPadding, &XOffset, Option<&ReadOnly>, + &CosmicTextPosition, )>, mut font_system: ResMut<CosmicFontSystem>, mut images: ResMut<Assets<Image>>, @@ -95,6 +96,7 @@ pub(crate) fn render_texture( padding, x_offset, readonly_opt, + position, ) in query.iter_mut() { // Draw background @@ -133,6 +135,12 @@ pub(crate) fn render_texture( .color_opt .unwrap_or(cosmic_text::Color::rgb(0, 0, 0)); + let min_pad = match position { + CosmicTextPosition::Center { padding } => *padding as f32, + CosmicTextPosition::TopLeft { padding } => *padding as f32, + CosmicTextPosition::Left { padding } => *padding as f32, + }; + let draw_closure = |x, y, w, h, color| { for row in 0..h as i32 { for col in 0..w as i32 { @@ -140,8 +148,7 @@ pub(crate) fn render_texture( &mut pixels, size.0.x as i32, size.0.y as i32, - // TODO: padding should draw from a user specified minumum here - x + col + padding.x.max(5.) as i32 - x_offset.left as i32, + x + col + padding.x.max(min_pad) as i32 - x_offset.left as i32, y + row + padding.y as i32, color, );