From d3bffa5880d9be08c5d72058d142697c33c74302 Mon Sep 17 00:00:00 2001
From: sam edelsten <samedelsten1@gmail.com>
Date: Wed, 10 Apr 2024 12:17:51 +0100
Subject: [PATCH] user editable min padding on center infiniteline

---
 examples/basic_sprite.rs     |  1 -
 examples/basic_ui.rs         |  1 -
 examples/font_per_widget.rs  |  2 --
 examples/multiple_sprites.rs |  2 --
 examples/placeholder.rs      |  1 -
 examples/readonly.rs         |  1 -
 src/input.rs                 |  2 +-
 src/layout.rs                |  7 +++----
 src/lib.rs                   | 19 ++++++++++---------
 src/render.rs                | 15 +++++++++++----
 10 files changed, 25 insertions(+), 26 deletions(-)

diff --git a/examples/basic_sprite.rs b/examples/basic_sprite.rs
index bfdbefb..09073d0 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 2584d4c..94eb841 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 f6f6959..1728274 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 13d15f4..e8623fc 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 bc081ea..82d4595 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 b41ad9f..0a76bd8 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 135703e..9bb5477 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 2f6fab3..f5d0bce 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 b14e0c3..726f5a2 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 ab50243..78e376e 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,
                     );
-- 
GitLab