From 9c66f0f2040bc8920fd1dd80c08cc58d255fec66 Mon Sep 17 00:00:00 2001
From: MrGVSV <gino.valente.code@gmail.com>
Date: Tue, 15 Feb 2022 12:51:25 -0800
Subject: [PATCH] Border radius now uses Corner

---
 bevy_kayak_ui/src/render/unified/font/extract.rs      |  3 ++-
 bevy_kayak_ui/src/render/unified/mod.rs               |  4 ++--
 .../src/render/unified/nine_patch/extract.rs          |  3 ++-
 bevy_kayak_ui/src/render/unified/pipeline.rs          | 11 ++++++-----
 examples/image.rs                                     |  4 ++--
 examples/todo/add_button.rs                           |  4 ++--
 examples/todo/delete_button.rs                        |  4 ++--
 kayak_core/src/render_primitive.rs                    |  6 +++---
 kayak_core/src/styles/mod.rs                          |  2 +-
 src/widgets/button.rs                                 |  4 ++--
 src/widgets/inspector.rs                              |  4 ++--
 src/widgets/text_box.rs                               |  4 ++--
 src/widgets/window.rs                                 |  6 +++---
 13 files changed, 31 insertions(+), 28 deletions(-)

diff --git a/bevy_kayak_ui/src/render/unified/font/extract.rs b/bevy_kayak_ui/src/render/unified/font/extract.rs
index 195e16e..8f0fa13 100644
--- a/bevy_kayak_ui/src/render/unified/font/extract.rs
+++ b/bevy_kayak_ui/src/render/unified/font/extract.rs
@@ -4,6 +4,7 @@ use bevy::{
     sprite::Rect,
 };
 use kayak_core::render_primitive::RenderPrimitive;
+use kayak_core::styles::Corner;
 use kayak_font::{Alignment, CoordinateSystem, KayakFont};
 
 use crate::{
@@ -77,7 +78,7 @@ pub fn extract_texts(
                 z_index: layout.z_index,
                 quad_type: UIQuadType::Text,
                 type_index: 0,
-                border_radius: (0.0, 0.0, 0.0, 0.0),
+                border_radius: Corner::default(),
                 image: None,
                 uv_max: None,
                 uv_min: None,
diff --git a/bevy_kayak_ui/src/render/unified/mod.rs b/bevy_kayak_ui/src/render/unified/mod.rs
index 3400b0e..1616285 100644
--- a/bevy_kayak_ui/src/render/unified/mod.rs
+++ b/bevy_kayak_ui/src/render/unified/mod.rs
@@ -9,7 +9,7 @@ use bevy::{
     sprite::Rect,
     window::Windows,
 };
-use kayak_core::{render_primitive::RenderPrimitive, Binding, Bound};
+use kayak_core::{render_primitive::RenderPrimitive, styles::Corner, Binding, Bound};
 use kayak_font::KayakFont;
 
 use crate::{
@@ -129,7 +129,7 @@ pub fn extract(
                         font_handle: None,
                         quad_type: UIQuadType::Clip,
                         type_index: 0,
-                        border_radius: (0.0, 0.0, 0.0, 0.0),
+                        border_radius: Corner::default(),
                         image: None,
                         uv_min: None,
                         uv_max: None,
diff --git a/bevy_kayak_ui/src/render/unified/nine_patch/extract.rs b/bevy_kayak_ui/src/render/unified/nine_patch/extract.rs
index 7fd27af..239a20d 100644
--- a/bevy_kayak_ui/src/render/unified/nine_patch/extract.rs
+++ b/bevy_kayak_ui/src/render/unified/nine_patch/extract.rs
@@ -5,6 +5,7 @@ use bevy::{
     sprite::Rect,
 };
 use kayak_core::render_primitive::RenderPrimitive;
+use kayak_core::styles::Corner;
 
 use crate::{
     render::unified::pipeline::{ExtractQuadBundle, ExtractedQuad, UIQuadType},
@@ -60,7 +61,7 @@ pub fn extract_nine_patch(
         font_handle: None,
         quad_type: UIQuadType::Image,
         type_index: 0,
-        border_radius: (0.0, 0.0, 0.0, 0.0),
+        border_radius: Corner::default(),
         image: image_handle,
         uv_max: None,
         uv_min: None,
diff --git a/bevy_kayak_ui/src/render/unified/pipeline.rs b/bevy_kayak_ui/src/render/unified/pipeline.rs
index 5c5857a..3d6d99c 100644
--- a/bevy_kayak_ui/src/render/unified/pipeline.rs
+++ b/bevy_kayak_ui/src/render/unified/pipeline.rs
@@ -37,6 +37,7 @@ use kayak_font::{
     KayakFont,
 };
 
+use kayak_core::styles::Corner;
 use super::{Dpi, UNIFIED_SHADER_HANDLE};
 use crate::{render::ui_pass::TransparentUI, WindowSize};
 
@@ -320,7 +321,7 @@ pub struct ExtractedQuad {
     pub font_handle: Option<Handle<KayakFont>>,
     pub quad_type: UIQuadType,
     pub type_index: u32,
-    pub border_radius: (f32, f32, f32, f32),
+    pub border_radius: Corner<f32>,
     pub image: Option<Handle<Image>>,
     pub uv_min: Option<Vec2>,
     pub uv_max: Option<Vec2>,
@@ -413,25 +414,25 @@ pub fn prepare_quads(
             uv_min.x,
             uv_max.y,
             extracted_sprite.char_id as f32,
-            extracted_sprite.border_radius.0,
+            extracted_sprite.border_radius.top_left,
         );
         let top_left = Vec4::new(
             uv_min.x,
             uv_min.y,
             extracted_sprite.char_id as f32,
-            extracted_sprite.border_radius.1,
+            extracted_sprite.border_radius.bottom_left,
         );
         let top_right = Vec4::new(
             uv_max.x,
             uv_min.y,
             extracted_sprite.char_id as f32,
-            extracted_sprite.border_radius.2,
+            extracted_sprite.border_radius.bottom_right,
         );
         let bottom_right = Vec4::new(
             uv_max.x,
             uv_max.y,
             extracted_sprite.char_id as f32,
-            extracted_sprite.border_radius.3,
+            extracted_sprite.border_radius.top_right,
         );
 
         let uvs: [[f32; 4]; 6] = [
diff --git a/examples/image.rs b/examples/image.rs
index ec63e30..952129f 100644
--- a/examples/image.rs
+++ b/examples/image.rs
@@ -7,7 +7,7 @@ use kayak_core::styles::PositionType;
 use kayak_ui::bevy::{BevyContext, BevyKayakUIPlugin, ImageManager, UICameraBundle};
 use kayak_ui::core::{
     render,
-    styles::{Style, StyleProp, Units},
+    styles::{Corner, Style, StyleProp, Units},
     Index,
 };
 use kayak_ui::widgets::{App, Image};
@@ -27,7 +27,7 @@ fn startup(
             position_type: StyleProp::Value(PositionType::SelfDirected),
             left: StyleProp::Value(Units::Pixels(10.0)),
             top: StyleProp::Value(Units::Pixels(10.0)),
-            border_radius: StyleProp::Value((500.0, 500.0, 500.0, 500.0)),
+            border_radius: StyleProp::Value(Corner::all(500.0)),
             width: StyleProp::Value(Units::Pixels(200.0)),
             height: StyleProp::Value(Units::Pixels(182.0)),
             ..Style::default()
diff --git a/examples/todo/add_button.rs b/examples/todo/add_button.rs
index 4e17f14..a127545 100644
--- a/examples/todo/add_button.rs
+++ b/examples/todo/add_button.rs
@@ -3,7 +3,7 @@ use kayak_ui::core::{
     color::Color,
     render_command::RenderCommand,
     rsx,
-    styles::{Style, StyleProp, Units},
+    styles::{Corner, Style, StyleProp, Units},
     use_state, widget, EventType, OnEvent, WidgetProps,
 };
 
@@ -30,7 +30,7 @@ pub fn AddButton(props: AddButtonProps) {
     });
 
     let background_styles = Some(Style {
-        border_radius: StyleProp::Value((5.0, 5.0, 5.0, 5.0)),
+        border_radius: StyleProp::Value(Corner::all(5.0)),
         background_color: StyleProp::Value(color),
         cursor: CursorIcon::Hand.into(),
         padding_left: StyleProp::Value(Units::Pixels(9.0)),
diff --git a/examples/todo/delete_button.rs b/examples/todo/delete_button.rs
index 99371b4..51951b5 100644
--- a/examples/todo/delete_button.rs
+++ b/examples/todo/delete_button.rs
@@ -3,7 +3,7 @@ use kayak_ui::core::{
     color::Color,
     render_command::RenderCommand,
     rsx,
-    styles::{Style, StyleProp, Units},
+    styles::{Corner, Style, StyleProp, Units},
     use_state, widget, EventType, OnEvent, WidgetProps,
 };
 
@@ -31,7 +31,7 @@ pub fn DeleteButton(props: DeleteButtonProps) {
     });
 
     let background_styles = Some(Style {
-        border_radius: StyleProp::Value((5.0, 5.0, 5.0, 5.0)),
+        border_radius: StyleProp::Value(Corner::all(5.0)),
         background_color: StyleProp::Value(color),
         cursor: CursorIcon::Hand.into(),
         padding_left: StyleProp::Value(Units::Pixels(8.0)),
diff --git a/kayak_core/src/render_primitive.rs b/kayak_core/src/render_primitive.rs
index b3a64cf..fbac64f 100644
--- a/kayak_core/src/render_primitive.rs
+++ b/kayak_core/src/render_primitive.rs
@@ -2,7 +2,7 @@ use crate::{
     color::Color,
     layout_cache::Rect,
     render_command::RenderCommand,
-    styles::{Edge, Style, StyleProp},
+    styles::{Corner, Edge, Style, StyleProp},
 };
 
 #[derive(Debug, Clone, PartialEq)]
@@ -16,7 +16,7 @@ pub enum RenderPrimitive {
         background_color: Color,
         border_color: Color,
         border: Edge<f32>,
-        border_radius: (f32, f32, f32, f32),
+        border_radius: Corner<f32>,
     },
     Text {
         color: Color,
@@ -28,7 +28,7 @@ pub enum RenderPrimitive {
         size: f32,
     },
     Image {
-        border_radius: (f32, f32, f32, f32),
+        border_radius: Corner<f32>,
         layout: Rect,
         handle: u16,
     },
diff --git a/kayak_core/src/styles/mod.rs b/kayak_core/src/styles/mod.rs
index a4eb8a0..158855c 100644
--- a/kayak_core/src/styles/mod.rs
+++ b/kayak_core/src/styles/mod.rs
@@ -145,7 +145,7 @@ define_styles! {
     pub struct Style {
         pub background_color : StyleProp<Color>,
         pub border_color: StyleProp<Color>,
-        pub border_radius: StyleProp<(f32, f32, f32, f32)>,
+        pub border_radius: StyleProp<Corner<f32>>,
         pub border: StyleProp<Edge<f32>>,
         pub bottom: StyleProp<Units>,
         pub color: StyleProp<Color>,
diff --git a/src/widgets/button.rs b/src/widgets/button.rs
index a0cf25f..9a4b762 100644
--- a/src/widgets/button.rs
+++ b/src/widgets/button.rs
@@ -1,7 +1,7 @@
 use crate::core::{
     render_command::RenderCommand,
     rsx,
-    styles::{Style, StyleProp, Units},
+    styles::{Corner, Style, StyleProp, Units},
     widget, Children, Color, Fragment, OnEvent, WidgetProps,
 };
 use kayak_core::CursorIcon;
@@ -48,7 +48,7 @@ pub fn Button(props: ButtonProps) {
             .with_style(&props.styles)
             .with_style(Style {
                 background_color: StyleProp::Value(Color::new(0.0781, 0.0898, 0.101, 1.0)),
-                border_radius: StyleProp::Value((5.0, 5.0, 5.0, 5.0)),
+                border_radius: StyleProp::Value(Corner::all(5.0)),
                 height: StyleProp::Value(Units::Pixels(45.0)),
                 padding_left: StyleProp::Value(Units::Stretch(1.0)),
                 padding_right: StyleProp::Value(Units::Stretch(1.0)),
diff --git a/src/widgets/inspector.rs b/src/widgets/inspector.rs
index 88350ec..2484854 100644
--- a/src/widgets/inspector.rs
+++ b/src/widgets/inspector.rs
@@ -1,4 +1,4 @@
-use kayak_core::styles::{PositionType, Style, StyleProp, Units};
+use kayak_core::styles::{Corner, PositionType, Style, StyleProp, Units};
 use kayak_core::{Bound, Color, EventType, OnEvent, VecTracker};
 use kayak_render_macros::{constructor, use_state};
 
@@ -24,7 +24,7 @@ pub fn Inspector(props: InspectorProps) {
 
     let background_styles = Some(Style {
         background_color: StyleProp::Value(Color::new(0.125, 0.125, 0.125, 1.0)),
-        border_radius: StyleProp::Value((0.0, 0.0, 0.0, 0.0)),
+        border_radius: StyleProp::Value(Corner::all(0.0)),
         position_type: StyleProp::Value(PositionType::SelfDirected),
         left: StyleProp::Value(Units::Stretch(1.0)),
         top: StyleProp::Value(Units::Stretch(0.0)),
diff --git a/src/widgets/text_box.rs b/src/widgets/text_box.rs
index 457f9b7..99a355d 100644
--- a/src/widgets/text_box.rs
+++ b/src/widgets/text_box.rs
@@ -1,7 +1,7 @@
 use crate::core::{
     render_command::RenderCommand,
     rsx,
-    styles::{Style, Units},
+    styles::{Corner, Style, Units},
     widget, Bound, Children, Color, EventType, MutableBound, OnEvent, WidgetProps,
 };
 use kayak_core::CursorIcon;
@@ -102,7 +102,7 @@ pub fn TextBox(props: TextBoxProps) {
 
     let background_styles = Style {
         background_color: Color::new(0.176, 0.196, 0.215, 1.0).into(),
-        border_radius: (5.0, 5.0, 5.0, 5.0).into(),
+        border_radius: Corner::all(5.0).into(),
         height: Units::Pixels(26.0).into(),
         padding_left: Units::Pixels(5.0).into(),
         padding_right: Units::Pixels(5.0).into(),
diff --git a/src/widgets/window.rs b/src/widgets/window.rs
index ff37cf5..1607c90 100644
--- a/src/widgets/window.rs
+++ b/src/widgets/window.rs
@@ -2,7 +2,7 @@ use crate::core::{
     color::Color,
     render_command::RenderCommand,
     rsx,
-    styles::{Edge, PositionType, Style, StyleProp, Units},
+    styles::{Corner, Edge, PositionType, Style, StyleProp, Units},
     use_state, widget, Children, EventType, OnEvent, WidgetProps,
 };
 use kayak_core::CursorIcon;
@@ -65,7 +65,7 @@ pub fn Window(props: WindowProps) {
         background_color: StyleProp::Value(Color::new(0.125, 0.125, 0.125, 1.0)),
         border_color: StyleProp::Value(Color::new(0.0781, 0.0898, 0.101, 1.0)),
         border: StyleProp::Value(Edge::all(4.0)),
-        border_radius: StyleProp::Value((5.0, 5.0, 5.0, 5.0)),
+        border_radius: StyleProp::Value(Corner::all(5.0)),
         render_command: StyleProp::Value(RenderCommand::Quad),
         position_type: StyleProp::Value(PositionType::SelfDirected),
         left: StyleProp::Value(Units::Pixels(pos.0)),
@@ -98,7 +98,7 @@ pub fn Window(props: WindowProps) {
 
     let title_background_styles = Style {
         background_color: StyleProp::Value(Color::new(0.0781, 0.0898, 0.101, 1.0)),
-        border_radius: StyleProp::Value((5.0, 5.0, 5.0, 5.0)),
+        border_radius: StyleProp::Value(Corner::all(5.0)),
         cursor: cursor.into(),
         height: StyleProp::Value(Units::Pixels(24.0)),
         width: StyleProp::Value(Units::Stretch(1.0)),
-- 
GitLab