2020-07-26 19:27:09 +00:00
|
|
|
use bevy_math::{Rect, Size, Vec2};
|
2020-11-28 00:39:59 +00:00
|
|
|
use bevy_reflect::{Reflect, ReflectComponent, ReflectDeserialize};
|
2020-07-17 01:26:21 +00:00
|
|
|
use bevy_render::renderer::RenderResources;
|
2020-11-28 00:39:59 +00:00
|
|
|
use serde::{Deserialize, Serialize};
|
2020-07-28 21:24:03 +00:00
|
|
|
use std::ops::{Add, AddAssign};
|
2020-01-13 00:51:21 +00:00
|
|
|
|
2020-11-28 00:39:59 +00:00
|
|
|
#[derive(Debug, Clone, Default, RenderResources, Reflect)]
|
|
|
|
#[reflect(Component)]
|
2020-01-13 00:51:21 +00:00
|
|
|
pub struct Node {
|
2020-06-25 17:13:00 +00:00
|
|
|
pub size: Vec2,
|
2020-01-13 00:51:21 +00:00
|
|
|
}
|
2020-07-26 19:27:09 +00:00
|
|
|
|
2020-11-28 00:39:59 +00:00
|
|
|
#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize, Reflect)]
|
|
|
|
#[reflect_value(PartialEq, Serialize, Deserialize)]
|
2020-07-26 19:27:09 +00:00
|
|
|
pub enum Val {
|
|
|
|
Undefined,
|
|
|
|
Auto,
|
|
|
|
Px(f32),
|
|
|
|
Percent(f32),
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for Val {
|
|
|
|
fn default() -> Self {
|
|
|
|
Val::Undefined
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Add<f32> for Val {
|
|
|
|
type Output = Val;
|
2020-07-28 21:24:03 +00:00
|
|
|
|
2020-07-26 19:27:09 +00:00
|
|
|
fn add(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 AddAssign<f32> for Val {
|
|
|
|
fn add_assign(&mut self, rhs: f32) {
|
|
|
|
match self {
|
2020-07-28 21:24:03 +00:00
|
|
|
Val::Undefined | Val::Auto => {}
|
2020-07-26 19:27:09 +00:00
|
|
|
Val::Px(value) => *value += rhs,
|
|
|
|
Val::Percent(value) => *value += rhs,
|
|
|
|
}
|
|
|
|
}
|
2020-07-28 04:04:04 +00:00
|
|
|
}
|
|
|
|
|
2020-11-28 00:39:59 +00:00
|
|
|
#[derive(Clone, PartialEq, Debug, Reflect)]
|
2020-07-26 19:27:09 +00:00
|
|
|
pub struct Style {
|
|
|
|
pub display: Display,
|
|
|
|
pub position_type: PositionType,
|
|
|
|
pub direction: Direction,
|
|
|
|
pub flex_direction: FlexDirection,
|
|
|
|
pub flex_wrap: FlexWrap,
|
|
|
|
pub align_items: AlignItems,
|
|
|
|
pub align_self: AlignSelf,
|
|
|
|
pub align_content: AlignContent,
|
|
|
|
pub justify_content: JustifyContent,
|
|
|
|
pub position: Rect<Val>,
|
|
|
|
pub margin: Rect<Val>,
|
|
|
|
pub padding: Rect<Val>,
|
|
|
|
pub border: Rect<Val>,
|
|
|
|
pub flex_grow: f32,
|
|
|
|
pub flex_shrink: f32,
|
|
|
|
pub flex_basis: Val,
|
|
|
|
pub size: Size<Val>,
|
|
|
|
pub min_size: Size<Val>,
|
|
|
|
pub max_size: Size<Val>,
|
|
|
|
pub aspect_ratio: Option<f32>,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for Style {
|
|
|
|
fn default() -> Self {
|
|
|
|
Self {
|
|
|
|
display: Default::default(),
|
|
|
|
position_type: Default::default(),
|
|
|
|
direction: Default::default(),
|
|
|
|
flex_direction: Default::default(),
|
|
|
|
flex_wrap: Default::default(),
|
|
|
|
align_items: Default::default(),
|
|
|
|
align_self: Default::default(),
|
|
|
|
align_content: Default::default(),
|
|
|
|
justify_content: Default::default(),
|
|
|
|
position: Default::default(),
|
|
|
|
margin: Default::default(),
|
|
|
|
padding: Default::default(),
|
|
|
|
border: Default::default(),
|
|
|
|
flex_grow: 0.0,
|
|
|
|
flex_shrink: 1.0,
|
|
|
|
flex_basis: Val::Auto,
|
2020-08-25 19:18:43 +00:00
|
|
|
size: Size::new(Val::Auto, Val::Auto),
|
|
|
|
min_size: Size::new(Val::Auto, Val::Auto),
|
|
|
|
max_size: Size::new(Val::Auto, Val::Auto),
|
2020-07-26 19:27:09 +00:00
|
|
|
aspect_ratio: Default::default(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-11-28 00:39:59 +00:00
|
|
|
#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize, Reflect)]
|
|
|
|
#[reflect_value(PartialEq, Serialize, Deserialize)]
|
2020-07-26 19:27:09 +00:00
|
|
|
pub enum AlignItems {
|
|
|
|
FlexStart,
|
|
|
|
FlexEnd,
|
|
|
|
Center,
|
|
|
|
Baseline,
|
|
|
|
Stretch,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for AlignItems {
|
|
|
|
fn default() -> AlignItems {
|
|
|
|
AlignItems::Stretch
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-11-28 00:39:59 +00:00
|
|
|
#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize, Reflect)]
|
|
|
|
#[reflect_value(PartialEq, Serialize, Deserialize)]
|
2020-07-26 19:27:09 +00:00
|
|
|
pub enum AlignSelf {
|
|
|
|
Auto,
|
|
|
|
FlexStart,
|
|
|
|
FlexEnd,
|
|
|
|
Center,
|
|
|
|
Baseline,
|
|
|
|
Stretch,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for AlignSelf {
|
|
|
|
fn default() -> AlignSelf {
|
|
|
|
AlignSelf::Auto
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-11-28 00:39:59 +00:00
|
|
|
#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize, Reflect)]
|
|
|
|
#[reflect_value(PartialEq, Serialize, Deserialize)]
|
2020-07-26 19:27:09 +00:00
|
|
|
pub enum AlignContent {
|
|
|
|
FlexStart,
|
|
|
|
FlexEnd,
|
|
|
|
Center,
|
|
|
|
Stretch,
|
|
|
|
SpaceBetween,
|
|
|
|
SpaceAround,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for AlignContent {
|
|
|
|
fn default() -> AlignContent {
|
|
|
|
AlignContent::Stretch
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-11-28 00:39:59 +00:00
|
|
|
#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize, Reflect)]
|
|
|
|
#[reflect_value(PartialEq, Serialize, Deserialize)]
|
2020-07-26 19:27:09 +00:00
|
|
|
pub enum Direction {
|
|
|
|
Inherit,
|
|
|
|
LTR,
|
|
|
|
RTL,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for Direction {
|
|
|
|
fn default() -> Direction {
|
|
|
|
Direction::Inherit
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-11-28 00:39:59 +00:00
|
|
|
#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize, Reflect)]
|
|
|
|
#[reflect_value(PartialEq, Serialize, Deserialize)]
|
2020-07-26 19:27:09 +00:00
|
|
|
pub enum Display {
|
|
|
|
Flex,
|
|
|
|
None,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for Display {
|
|
|
|
fn default() -> Display {
|
|
|
|
Display::Flex
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-11-28 00:39:59 +00:00
|
|
|
#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize, Reflect)]
|
|
|
|
#[reflect_value(PartialEq, Serialize, Deserialize)]
|
2020-07-26 19:27:09 +00:00
|
|
|
pub enum FlexDirection {
|
|
|
|
Row,
|
|
|
|
Column,
|
|
|
|
RowReverse,
|
|
|
|
ColumnReverse,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for FlexDirection {
|
|
|
|
fn default() -> FlexDirection {
|
|
|
|
FlexDirection::Row
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-11-28 00:39:59 +00:00
|
|
|
#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize, Reflect)]
|
|
|
|
#[reflect_value(PartialEq, Serialize, Deserialize)]
|
2020-07-26 19:27:09 +00:00
|
|
|
pub enum JustifyContent {
|
|
|
|
FlexStart,
|
|
|
|
FlexEnd,
|
|
|
|
Center,
|
|
|
|
SpaceBetween,
|
|
|
|
SpaceAround,
|
|
|
|
SpaceEvenly,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for JustifyContent {
|
|
|
|
fn default() -> JustifyContent {
|
|
|
|
JustifyContent::FlexStart
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// TODO: add support for overflow settings
|
|
|
|
// #[derive(Copy, Clone, PartialEq, Debug)]
|
|
|
|
// pub enum Overflow {
|
|
|
|
// Visible,
|
|
|
|
// Hidden,
|
|
|
|
// Scroll,
|
|
|
|
// }
|
|
|
|
|
|
|
|
// impl Default for Overflow {
|
|
|
|
// fn default() -> Overflow {
|
|
|
|
// Overflow::Visible
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
2020-11-28 00:39:59 +00:00
|
|
|
#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize, Reflect)]
|
|
|
|
#[reflect_value(PartialEq, Serialize, Deserialize)]
|
2020-07-26 19:27:09 +00:00
|
|
|
pub enum PositionType {
|
|
|
|
Relative,
|
|
|
|
Absolute,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for PositionType {
|
|
|
|
fn default() -> PositionType {
|
|
|
|
PositionType::Relative
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-11-28 00:39:59 +00:00
|
|
|
#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize, Reflect)]
|
|
|
|
#[reflect_value(PartialEq, Serialize, Deserialize)]
|
2020-07-26 19:27:09 +00:00
|
|
|
pub enum FlexWrap {
|
|
|
|
NoWrap,
|
|
|
|
Wrap,
|
|
|
|
WrapReverse,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for FlexWrap {
|
|
|
|
fn default() -> FlexWrap {
|
|
|
|
FlexWrap::NoWrap
|
|
|
|
}
|
2020-07-28 21:24:03 +00:00
|
|
|
}
|