Remove Size and UiRect generics (#5404)
# Objective - Migrate changes from #3503. ## Solution - Change `Size<T>` and `UiRect<T>` to `Size` and `UiRect` using `Val`. - Implement `Sub`, `SubAssign`, `Mul`, `MulAssign`, `Div` and `DivAssign` for `Val`. - Update tests for `Size`. --- ## Changelog ### Changed - The generic `T` of `Size` and `UiRect` got removed and instead they both now always use `Val`. ## Migration Guide - The generic `T` of `Size` and `UiRect` got removed and instead they both now always use `Val`. If you used a `Size<f32>` consider replacing it with a `Vec2` which is way more powerful. Co-authored-by: KDecay <KDecayMusic@protonmail.com>
This commit is contained in:
parent
6752c9c59b
commit
bf085ee1d2
@ -5,7 +5,7 @@ use crate::{
|
|||||||
|
|
||||||
pub fn from_rect(
|
pub fn from_rect(
|
||||||
scale_factor: f64,
|
scale_factor: f64,
|
||||||
rect: UiRect<Val>,
|
rect: UiRect,
|
||||||
) -> taffy::geometry::Rect<taffy::style::Dimension> {
|
) -> taffy::geometry::Rect<taffy::style::Dimension> {
|
||||||
taffy::geometry::Rect {
|
taffy::geometry::Rect {
|
||||||
start: from_val(scale_factor, rect.left),
|
start: from_val(scale_factor, rect.left),
|
||||||
@ -16,16 +16,16 @@ pub fn from_rect(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_f32_size(scale_factor: f64, size: Size<f32>) -> taffy::geometry::Size<f32> {
|
pub fn from_f32_size(scale_factor: f64, size: Size) -> taffy::geometry::Size<f32> {
|
||||||
taffy::geometry::Size {
|
taffy::geometry::Size {
|
||||||
width: (scale_factor * size.width as f64) as f32,
|
width: val_to_f32(scale_factor, size.width),
|
||||||
height: (scale_factor * size.height as f64) as f32,
|
height: val_to_f32(scale_factor, size.height),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_val_size(
|
pub fn from_val_size(
|
||||||
scale_factor: f64,
|
scale_factor: f64,
|
||||||
size: Size<Val>,
|
size: Size,
|
||||||
) -> taffy::geometry::Size<taffy::style::Dimension> {
|
) -> taffy::geometry::Size<taffy::style::Dimension> {
|
||||||
taffy::geometry::Size {
|
taffy::geometry::Size {
|
||||||
width: from_val(scale_factor, size.width),
|
width: from_val(scale_factor, size.width),
|
||||||
@ -60,6 +60,15 @@ pub fn from_style(scale_factor: f64, value: &Style) -> taffy::style::Style {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Converts a [`Val`] to a [`f32`] while respecting the scale factor.
|
||||||
|
pub fn val_to_f32(scale_factor: f64, val: Val) -> f32 {
|
||||||
|
match val {
|
||||||
|
Val::Undefined | Val::Auto => 0.0,
|
||||||
|
Val::Px(value) => (scale_factor * value as f64) as f32,
|
||||||
|
Val::Percent(value) => value / 100.0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn from_val(scale_factor: f64, val: Val) -> taffy::style::Dimension {
|
pub fn from_val(scale_factor: f64, val: Val) -> taffy::style::Dimension {
|
||||||
match val {
|
match val {
|
||||||
Val::Auto => taffy::style::Dimension::Auto,
|
Val::Auto => taffy::style::Dimension::Auto,
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
use crate::Val;
|
||||||
use bevy_math::Vec2;
|
use bevy_math::Vec2;
|
||||||
use bevy_reflect::Reflect;
|
use bevy_reflect::Reflect;
|
||||||
use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Sub, SubAssign};
|
use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Sub, SubAssign};
|
||||||
@ -119,20 +120,20 @@ use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Sub, SubAssign};
|
|||||||
/// bottom: Val::Px(40.0),
|
/// bottom: Val::Px(40.0),
|
||||||
/// };
|
/// };
|
||||||
/// ```
|
/// ```
|
||||||
#[derive(Copy, Clone, PartialEq, Debug, Reflect)]
|
#[derive(Copy, Clone, PartialEq, Debug, Default, Reflect)]
|
||||||
#[reflect(PartialEq)]
|
#[reflect(PartialEq)]
|
||||||
pub struct UiRect<T: Reflect + PartialEq> {
|
pub struct UiRect {
|
||||||
/// The value corresponding to the left side of the UI rect.
|
/// The value corresponding to the left side of the UI rect.
|
||||||
pub left: T,
|
pub left: Val,
|
||||||
/// The value corresponding to the right side of the UI rect.
|
/// The value corresponding to the right side of the UI rect.
|
||||||
pub right: T,
|
pub right: Val,
|
||||||
/// The value corresponding to the top side of the UI rect.
|
/// The value corresponding to the top side of the UI rect.
|
||||||
pub top: T,
|
pub top: Val,
|
||||||
/// The value corresponding to the bottom side of the UI rect.
|
/// The value corresponding to the bottom side of the UI rect.
|
||||||
pub bottom: T,
|
pub bottom: Val,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Reflect + PartialEq> UiRect<T> {
|
impl UiRect {
|
||||||
/// Creates a new [`UiRect`] from the values specified.
|
/// Creates a new [`UiRect`] from the values specified.
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
@ -152,7 +153,7 @@ impl<T: Reflect + PartialEq> UiRect<T> {
|
|||||||
/// assert_eq!(ui_rect.top, Val::Px(30.0));
|
/// assert_eq!(ui_rect.top, Val::Px(30.0));
|
||||||
/// assert_eq!(ui_rect.bottom, Val::Px(40.0));
|
/// assert_eq!(ui_rect.bottom, Val::Px(40.0));
|
||||||
/// ```
|
/// ```
|
||||||
pub fn new(left: T, right: T, top: T, bottom: T) -> Self {
|
pub fn new(left: Val, right: Val, top: Val, bottom: Val) -> Self {
|
||||||
UiRect {
|
UiRect {
|
||||||
left,
|
left,
|
||||||
right,
|
right,
|
||||||
@ -175,43 +176,29 @@ impl<T: Reflect + PartialEq> UiRect<T> {
|
|||||||
/// assert_eq!(ui_rect.top, Val::Px(10.0));
|
/// assert_eq!(ui_rect.top, Val::Px(10.0));
|
||||||
/// assert_eq!(ui_rect.bottom, Val::Px(10.0));
|
/// assert_eq!(ui_rect.bottom, Val::Px(10.0));
|
||||||
/// ```
|
/// ```
|
||||||
pub fn all(value: T) -> Self
|
pub fn all(value: Val) -> Self {
|
||||||
where
|
|
||||||
T: Clone,
|
|
||||||
{
|
|
||||||
UiRect {
|
UiRect {
|
||||||
left: value.clone(),
|
left: value,
|
||||||
right: value.clone(),
|
right: value,
|
||||||
top: value.clone(),
|
top: value,
|
||||||
bottom: value,
|
bottom: value,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Default + Reflect + PartialEq> Default for UiRect<T> {
|
|
||||||
fn default() -> Self {
|
|
||||||
Self {
|
|
||||||
left: Default::default(),
|
|
||||||
right: Default::default(),
|
|
||||||
top: Default::default(),
|
|
||||||
bottom: Default::default(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A 2-dimensional area defined by a width and height.
|
/// A 2-dimensional area defined by a width and height.
|
||||||
///
|
///
|
||||||
/// It is commonly used to define the size of a text or UI element.
|
/// It is commonly used to define the size of a text or UI element.
|
||||||
#[derive(Copy, Clone, PartialEq, Debug, Reflect)]
|
#[derive(Copy, Clone, PartialEq, Debug, Default, Reflect)]
|
||||||
#[reflect(PartialEq)]
|
#[reflect(PartialEq)]
|
||||||
pub struct Size<T: Reflect + PartialEq = f32> {
|
pub struct Size {
|
||||||
/// The width of the 2-dimensional area.
|
/// The width of the 2-dimensional area.
|
||||||
pub width: T,
|
pub width: Val,
|
||||||
/// The height of the 2-dimensional area.
|
/// The height of the 2-dimensional area.
|
||||||
pub height: T,
|
pub height: Val,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Reflect + PartialEq> Size<T> {
|
impl Size {
|
||||||
/// Creates a new [`Size`] from a width and a height.
|
/// Creates a new [`Size`] from a width and a height.
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
@ -224,25 +211,13 @@ impl<T: Reflect + PartialEq> Size<T> {
|
|||||||
/// assert_eq!(size.width, Val::Px(100.0));
|
/// assert_eq!(size.width, Val::Px(100.0));
|
||||||
/// assert_eq!(size.height, Val::Px(200.0));
|
/// assert_eq!(size.height, Val::Px(200.0));
|
||||||
/// ```
|
/// ```
|
||||||
pub fn new(width: T, height: T) -> Self {
|
pub fn new(width: Val, height: Val) -> Self {
|
||||||
Size { width, height }
|
Size { width, height }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Default + Reflect + PartialEq> Default for Size<T> {
|
impl Add<Vec2> for Size {
|
||||||
fn default() -> Self {
|
type Output = Size;
|
||||||
Self {
|
|
||||||
width: Default::default(),
|
|
||||||
height: Default::default(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: Reflect + PartialEq> Add<Vec2> for Size<T>
|
|
||||||
where
|
|
||||||
T: Add<f32, Output = T>,
|
|
||||||
{
|
|
||||||
type Output = Size<T>;
|
|
||||||
|
|
||||||
fn add(self, rhs: Vec2) -> Self::Output {
|
fn add(self, rhs: Vec2) -> Self::Output {
|
||||||
Self {
|
Self {
|
||||||
@ -252,21 +227,15 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Reflect + PartialEq> AddAssign<Vec2> for Size<T>
|
impl AddAssign<Vec2> for Size {
|
||||||
where
|
|
||||||
T: AddAssign<f32>,
|
|
||||||
{
|
|
||||||
fn add_assign(&mut self, rhs: Vec2) {
|
fn add_assign(&mut self, rhs: Vec2) {
|
||||||
self.width += rhs.x;
|
self.width += rhs.x;
|
||||||
self.height += rhs.y;
|
self.height += rhs.y;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Reflect + PartialEq> Sub<Vec2> for Size<T>
|
impl Sub<Vec2> for Size {
|
||||||
where
|
type Output = Size;
|
||||||
T: Sub<f32, Output = T>,
|
|
||||||
{
|
|
||||||
type Output = Size<T>;
|
|
||||||
|
|
||||||
fn sub(self, rhs: Vec2) -> Self::Output {
|
fn sub(self, rhs: Vec2) -> Self::Output {
|
||||||
Self {
|
Self {
|
||||||
@ -276,21 +245,15 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Reflect + PartialEq> SubAssign<Vec2> for Size<T>
|
impl SubAssign<Vec2> for Size {
|
||||||
where
|
|
||||||
T: SubAssign<f32>,
|
|
||||||
{
|
|
||||||
fn sub_assign(&mut self, rhs: Vec2) {
|
fn sub_assign(&mut self, rhs: Vec2) {
|
||||||
self.width -= rhs.x;
|
self.width -= rhs.x;
|
||||||
self.height -= rhs.y;
|
self.height -= rhs.y;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Reflect + PartialEq> Mul<f32> for Size<T>
|
impl Mul<f32> for Size {
|
||||||
where
|
type Output = Size;
|
||||||
T: Mul<f32, Output = T>,
|
|
||||||
{
|
|
||||||
type Output = Size<T>;
|
|
||||||
|
|
||||||
fn mul(self, rhs: f32) -> Self::Output {
|
fn mul(self, rhs: f32) -> Self::Output {
|
||||||
Self::Output {
|
Self::Output {
|
||||||
@ -300,21 +263,15 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Reflect + PartialEq> MulAssign<f32> for Size<T>
|
impl MulAssign<f32> for Size {
|
||||||
where
|
|
||||||
T: MulAssign<f32>,
|
|
||||||
{
|
|
||||||
fn mul_assign(&mut self, rhs: f32) {
|
fn mul_assign(&mut self, rhs: f32) {
|
||||||
self.width *= rhs;
|
self.width *= rhs;
|
||||||
self.height *= rhs;
|
self.height *= rhs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Reflect + PartialEq> Div<f32> for Size<T>
|
impl Div<f32> for Size {
|
||||||
where
|
type Output = Size;
|
||||||
T: Div<f32, Output = T>,
|
|
||||||
{
|
|
||||||
type Output = Size<T>;
|
|
||||||
|
|
||||||
fn div(self, rhs: f32) -> Self::Output {
|
fn div(self, rhs: f32) -> Self::Output {
|
||||||
Self::Output {
|
Self::Output {
|
||||||
@ -324,10 +281,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Reflect + PartialEq> DivAssign<f32> for Size<T>
|
impl DivAssign<f32> for Size {
|
||||||
where
|
|
||||||
T: DivAssign<f32>,
|
|
||||||
{
|
|
||||||
fn div_assign(&mut self, rhs: f32) {
|
fn div_assign(&mut self, rhs: f32) {
|
||||||
self.width /= rhs;
|
self.width /= rhs;
|
||||||
self.height /= rhs;
|
self.height /= rhs;
|
||||||
@ -339,22 +293,50 @@ mod tests {
|
|||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn size_ops() {
|
fn test_size_add() {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
Size::new(10., 10.) + Vec2::new(10., 10.),
|
Size::new(Val::Px(10.), Val::Px(10.)) + Vec2::new(10., 10.),
|
||||||
Size::new(20., 20.)
|
Size::new(Val::Px(20.), Val::Px(20.))
|
||||||
);
|
);
|
||||||
assert_eq!(
|
|
||||||
Size::new(20., 20.) - Vec2::new(10., 10.),
|
|
||||||
Size::new(10., 10.)
|
|
||||||
);
|
|
||||||
assert_eq!(Size::new(10., 10.) * 2., Size::new(20., 20.));
|
|
||||||
assert_eq!(Size::new(20., 20.) / 2., Size::new(10., 10.));
|
|
||||||
|
|
||||||
let mut size = Size::new(10., 10.);
|
|
||||||
|
|
||||||
|
let mut size = Size::new(Val::Px(10.), Val::Px(10.));
|
||||||
size += Vec2::new(10., 10.);
|
size += Vec2::new(10., 10.);
|
||||||
|
assert_eq!(size, Size::new(Val::Px(20.), Val::Px(20.)));
|
||||||
|
}
|
||||||
|
|
||||||
assert_eq!(size, Size::new(20., 20.));
|
#[test]
|
||||||
|
fn test_size_sub() {
|
||||||
|
assert_eq!(
|
||||||
|
Size::new(Val::Px(20.), Val::Px(20.)) - Vec2::new(10., 10.),
|
||||||
|
Size::new(Val::Px(10.), Val::Px(10.))
|
||||||
|
);
|
||||||
|
|
||||||
|
let mut size = Size::new(Val::Px(20.), Val::Px(20.));
|
||||||
|
size -= Vec2::new(10., 10.);
|
||||||
|
assert_eq!(size, Size::new(Val::Px(10.), Val::Px(10.)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_size_mul() {
|
||||||
|
assert_eq!(
|
||||||
|
Size::new(Val::Px(10.), Val::Px(10.)) * 2.,
|
||||||
|
Size::new(Val::Px(20.), Val::Px(20.))
|
||||||
|
);
|
||||||
|
|
||||||
|
let mut size = Size::new(Val::Px(10.), Val::Px(10.));
|
||||||
|
size *= 2.;
|
||||||
|
assert_eq!(size, Size::new(Val::Px(20.), Val::Px(20.)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_size_div() {
|
||||||
|
assert_eq!(
|
||||||
|
Size::new(Val::Px(20.), Val::Px(20.)) / 2.,
|
||||||
|
Size::new(Val::Px(10.), Val::Px(10.))
|
||||||
|
);
|
||||||
|
|
||||||
|
let mut size = Size::new(Val::Px(20.), Val::Px(20.));
|
||||||
|
size /= 2.;
|
||||||
|
assert_eq!(size, Size::new(Val::Px(10.), Val::Px(10.)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -67,9 +67,8 @@ impl Plugin for UiPlugin {
|
|||||||
.register_type::<Option<f32>>()
|
.register_type::<Option<f32>>()
|
||||||
.register_type::<Overflow>()
|
.register_type::<Overflow>()
|
||||||
.register_type::<PositionType>()
|
.register_type::<PositionType>()
|
||||||
.register_type::<Size<f32>>()
|
.register_type::<Size>()
|
||||||
.register_type::<Size<Val>>()
|
.register_type::<UiRect>()
|
||||||
.register_type::<UiRect<Val>>()
|
|
||||||
.register_type::<Style>()
|
.register_type::<Style>()
|
||||||
.register_type::<UiColor>()
|
.register_type::<UiColor>()
|
||||||
.register_type::<UiImage>()
|
.register_type::<UiImage>()
|
||||||
|
|||||||
@ -9,7 +9,7 @@ use bevy_render::{
|
|||||||
texture::{Image, DEFAULT_IMAGE_HANDLE},
|
texture::{Image, DEFAULT_IMAGE_HANDLE},
|
||||||
};
|
};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::ops::{Add, AddAssign};
|
use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Sub, SubAssign};
|
||||||
|
|
||||||
/// Describes the size of a UI node
|
/// Describes the size of a UI node
|
||||||
#[derive(Component, Debug, Clone, Default, Reflect)]
|
#[derive(Component, Debug, Clone, Default, Reflect)]
|
||||||
@ -56,6 +56,72 @@ impl AddAssign<f32> for Val {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Sub<f32> for Val {
|
||||||
|
type Output = Val;
|
||||||
|
|
||||||
|
fn sub(self, rhs: f32) -> Self::Output {
|
||||||
|
match self {
|
||||||
|
Val::Undefined => Val::Undefined,
|
||||||
|
Val::Auto => Val::Auto,
|
||||||
|
Val::Px(value) => Val::Px(value - rhs),
|
||||||
|
Val::Percent(value) => Val::Percent(value - rhs),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SubAssign<f32> for Val {
|
||||||
|
fn sub_assign(&mut self, rhs: f32) {
|
||||||
|
match self {
|
||||||
|
Val::Undefined | Val::Auto => {}
|
||||||
|
Val::Px(value) | Val::Percent(value) => *value -= rhs,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Mul<f32> for Val {
|
||||||
|
type Output = Val;
|
||||||
|
|
||||||
|
fn mul(self, rhs: f32) -> Self::Output {
|
||||||
|
match self {
|
||||||
|
Val::Undefined => Val::Undefined,
|
||||||
|
Val::Auto => Val::Auto,
|
||||||
|
Val::Px(value) => Val::Px(value * rhs),
|
||||||
|
Val::Percent(value) => Val::Percent(value * rhs),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MulAssign<f32> for Val {
|
||||||
|
fn mul_assign(&mut self, rhs: f32) {
|
||||||
|
match self {
|
||||||
|
Val::Undefined | Val::Auto => {}
|
||||||
|
Val::Px(value) | Val::Percent(value) => *value *= rhs,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Div<f32> for Val {
|
||||||
|
type Output = Val;
|
||||||
|
|
||||||
|
fn div(self, rhs: f32) -> Self::Output {
|
||||||
|
match self {
|
||||||
|
Val::Undefined => Val::Undefined,
|
||||||
|
Val::Auto => Val::Auto,
|
||||||
|
Val::Px(value) => Val::Px(value / rhs),
|
||||||
|
Val::Percent(value) => Val::Percent(value / rhs),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DivAssign<f32> for Val {
|
||||||
|
fn div_assign(&mut self, rhs: f32) {
|
||||||
|
match self {
|
||||||
|
Val::Undefined | Val::Auto => {}
|
||||||
|
Val::Px(value) | Val::Percent(value) => *value /= rhs,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Describes the style of a UI node
|
/// Describes the style of a UI node
|
||||||
///
|
///
|
||||||
/// It uses the [Flexbox](https://cssreference.io/flexbox/) system.
|
/// It uses the [Flexbox](https://cssreference.io/flexbox/) system.
|
||||||
@ -87,13 +153,13 @@ pub struct Style {
|
|||||||
/// How items align according to the main axis
|
/// How items align according to the main axis
|
||||||
pub justify_content: JustifyContent,
|
pub justify_content: JustifyContent,
|
||||||
/// The position of the node as described by its Rect
|
/// The position of the node as described by its Rect
|
||||||
pub position: UiRect<Val>,
|
pub position: UiRect,
|
||||||
/// The margin of the node
|
/// The margin of the node
|
||||||
pub margin: UiRect<Val>,
|
pub margin: UiRect,
|
||||||
/// The padding of the node
|
/// The padding of the node
|
||||||
pub padding: UiRect<Val>,
|
pub padding: UiRect,
|
||||||
/// The border of the node
|
/// The border of the node
|
||||||
pub border: UiRect<Val>,
|
pub border: UiRect,
|
||||||
/// Defines how much a flexbox item should grow if there's space available
|
/// Defines how much a flexbox item should grow if there's space available
|
||||||
pub flex_grow: f32,
|
pub flex_grow: f32,
|
||||||
/// How to shrink if there's not enough space available
|
/// How to shrink if there's not enough space available
|
||||||
@ -101,11 +167,11 @@ pub struct Style {
|
|||||||
/// The initial size of the item
|
/// The initial size of the item
|
||||||
pub flex_basis: Val,
|
pub flex_basis: Val,
|
||||||
/// The size of the flexbox
|
/// The size of the flexbox
|
||||||
pub size: Size<Val>,
|
pub size: Size,
|
||||||
/// The minimum size of the flexbox
|
/// The minimum size of the flexbox
|
||||||
pub min_size: Size<Val>,
|
pub min_size: Size,
|
||||||
/// The maximum size of the flexbox
|
/// The maximum size of the flexbox
|
||||||
pub max_size: Size<Val>,
|
pub max_size: Size,
|
||||||
/// The aspect ratio of the flexbox
|
/// The aspect ratio of the flexbox
|
||||||
pub aspect_ratio: Option<f32>,
|
pub aspect_ratio: Option<f32>,
|
||||||
/// How to handle overflow
|
/// How to handle overflow
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
use crate::Size;
|
use crate::{CalculatedSize, Size, UiImage, Val};
|
||||||
use crate::{CalculatedSize, UiImage};
|
|
||||||
use bevy_asset::Assets;
|
use bevy_asset::Assets;
|
||||||
use bevy_ecs::{
|
use bevy_ecs::{
|
||||||
component::Component,
|
component::Component,
|
||||||
@ -28,8 +27,8 @@ pub fn image_node_system(
|
|||||||
for (mut calculated_size, image) in &mut query {
|
for (mut calculated_size, image) in &mut query {
|
||||||
if let Some(texture) = textures.get(image) {
|
if let Some(texture) = textures.get(image) {
|
||||||
let size = Size {
|
let size = Size {
|
||||||
width: texture.texture_descriptor.size.width as f32,
|
width: Val::Px(texture.texture_descriptor.size.width as f32),
|
||||||
height: texture.texture_descriptor.size.height as f32,
|
height: Val::Px(texture.texture_descriptor.size.height as f32),
|
||||||
};
|
};
|
||||||
// Update only if size has changed to avoid needless layout calculations
|
// Update only if size has changed to avoid needless layout calculations
|
||||||
if size != calculated_size.size {
|
if size != calculated_size.size {
|
||||||
|
|||||||
@ -118,8 +118,8 @@ pub fn text_system(
|
|||||||
"Failed to get glyphs from the pipeline that have just been computed",
|
"Failed to get glyphs from the pipeline that have just been computed",
|
||||||
);
|
);
|
||||||
calculated_size.size = Size {
|
calculated_size.size = Size {
|
||||||
width: scale_value(text_layout_info.size.x, inv_scale_factor),
|
width: Val::Px(scale_value(text_layout_info.size.x, inv_scale_factor)),
|
||||||
height: scale_value(text_layout_info.size.y, inv_scale_factor),
|
height: Val::Px(scale_value(text_layout_info.size.y, inv_scale_factor)),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user