Skip to content

Commit

Permalink
update convert
Browse files Browse the repository at this point in the history
  • Loading branch information
ickshonpe committed Mar 1, 2023
1 parent 1471f3b commit 02679cd
Showing 1 changed file with 108 additions and 32 deletions.
140 changes: 108 additions & 32 deletions crates/bevy_ui/src/flex/convert.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
use taffy::prelude::Rect;
use taffy::prelude::LengthPercentage;
use taffy::prelude::LengthPercentageAuto;
use taffy::style::Dimension;
use crate::JustifySelf;
use crate::{
AlignContent, AlignItems, AlignSelf, Display, FlexDirection, FlexWrap, JustifyContent,
PositionType, Size, Style, UiRect, Val,
Expand All @@ -15,6 +20,30 @@ pub fn from_rect(
}
}

pub fn lpa_from_rect(
scale_factor: f64,
rect: UiRect,
) -> taffy::geometry::Rect<taffy::style::LengthPercentageAuto> {
taffy::geometry::Rect {
left: lpa_from_val(scale_factor, rect.left),
right: lpa_from_val(scale_factor, rect.right),
top: lpa_from_val(scale_factor, rect.top),
bottom: lpa_from_val(scale_factor, rect.bottom),
}
}

pub fn lp_from_rect(
scale_factor: f64,
rect: UiRect,
) -> taffy::geometry::Rect<taffy::style::LengthPercentage> {
taffy::geometry::Rect {
left: lp_from_val(scale_factor, rect.left),
right: lp_from_val(scale_factor, rect.right),
top: lp_from_val(scale_factor, rect.top),
bottom: lp_from_val(scale_factor, rect.bottom),
}
}

pub fn from_val_size(
scale_factor: f64,
size: Size,
Expand All @@ -25,54 +54,80 @@ pub fn from_val_size(
}
}

pub fn lp_from_val_size(
scale_factor: f64,
size: Size,
) -> taffy::geometry::Size<taffy::style::LengthPercentage> {
taffy::geometry::Size {
width: lp_from_val(scale_factor, size.width),
height: lp_from_val(scale_factor, size.height),
}
}



pub fn from_style(scale_factor: f64, value: &Style) -> taffy::style::Style {
taffy::style::Style {
display: value.display.into(),
position_type: value.position_type.into(),
position: value.position_type.into(),
inset: Rect {
left: lpa_from_val(scale_factor, value.left),
right: lpa_from_val(scale_factor, value.right),
top: lpa_from_val(scale_factor, value.top),
bottom: lpa_from_val(scale_factor, value.bottom),
},
flex_direction: value.flex_direction.into(),
flex_wrap: value.flex_wrap.into(),
align_items: value.align_items.into(),
align_items: Some(value.align_items.into()),
align_self: value.align_self.into(),
align_content: value.align_content.into(),
justify_content: value.justify_content.into(),
position: from_rect(
scale_factor,
UiRect::new(value.left, value.right, value.top, value.bottom),
),
margin: from_rect(scale_factor, value.margin),
padding: from_rect(scale_factor, value.padding),
border: from_rect(scale_factor, value.border),
align_content: Some(value.align_content.into()),
justify_content: Some(value.justify_content.into()),
margin: lpa_from_rect(scale_factor, value.margin),
padding: lp_from_rect(scale_factor, value.padding),
border: lp_from_rect(scale_factor, value.border),
flex_grow: value.flex_grow,
flex_shrink: value.flex_shrink,
flex_basis: from_val(scale_factor, value.flex_basis),
size: from_val_size(scale_factor, value.size),
min_size: from_val_size(scale_factor, value.min_size),
max_size: from_val_size(scale_factor, value.max_size),
aspect_ratio: value.aspect_ratio,
gap: from_val_size(scale_factor, value.gap),
gap: lp_from_val_size(scale_factor, value.gap),
justify_self: value.justify_self.into(),
}
}

fn lpa_from_val(scale_factor: f64, val: Val) -> LengthPercentageAuto {
match val {
Val::Auto => LengthPercentageAuto::Auto,
Val::Percent(value) => LengthPercentageAuto::Percent(value / 100.0),
Val::Px(value) => LengthPercentageAuto::Points((scale_factor * value as f64) as f32),
}
}

/// Converts a [`Val`] to a [`f32`] while respecting the scale factor.
pub fn val_to_f32(scale_factor: f64, val: Val) -> f32 {
fn lp_from_val(scale_factor: f64, val: Val) -> LengthPercentage {
match val {
Val::Auto => 0.0,
Val::Px(value) => (scale_factor * value as f64) as f32,
Val::Percent(value) => value / 100.0,
Val::Auto => LengthPercentage::Points(0.),
Val::Percent(value) => LengthPercentage::Percent(value / 100.0),
Val::Px(value) => LengthPercentage::Points((scale_factor * value as f64) as f32),
}
}

pub fn from_val(scale_factor: f64, val: Val) -> taffy::style::Dimension {
fn from_val(scale_factor: f64, val: Val) -> Dimension {
match val {
Val::Auto => taffy::style::Dimension::Auto,
Val::Percent(value) => taffy::style::Dimension::Percent(value / 100.0),
Val::Px(value) => taffy::style::Dimension::Points((scale_factor * value as f64) as f32),
Val::Auto => Dimension::Auto,
Val::Percent(value) => Dimension::Percent(value / 100.0),
Val::Px(value) => Dimension::Points((scale_factor * value as f64) as f32),
}
}



impl From<AlignItems> for taffy::style::AlignItems {
fn from(value: AlignItems) -> Self {
match value {
AlignItems::Start => taffy::style::AlignSelf::Start,
AlignItems::End => taffy::style::AlignSelf::End,
AlignItems::FlexStart => taffy::style::AlignItems::FlexStart,
AlignItems::FlexEnd => taffy::style::AlignItems::FlexEnd,
AlignItems::Center => taffy::style::AlignItems::Center,
Expand All @@ -82,22 +137,26 @@ impl From<AlignItems> for taffy::style::AlignItems {
}
}

impl From<AlignSelf> for taffy::style::AlignSelf {
impl From<AlignSelf> for Option<taffy::style::AlignSelf> {
fn from(value: AlignSelf) -> Self {
match value {
AlignSelf::Auto => taffy::style::AlignSelf::Auto,
AlignSelf::FlexStart => taffy::style::AlignSelf::FlexStart,
AlignSelf::FlexEnd => taffy::style::AlignSelf::FlexEnd,
AlignSelf::Center => taffy::style::AlignSelf::Center,
AlignSelf::Baseline => taffy::style::AlignSelf::Baseline,
AlignSelf::Stretch => taffy::style::AlignSelf::Stretch,
AlignSelf::Auto => None,
AlignSelf::Start => Some(taffy::style::AlignSelf::Start),
AlignSelf::End => Some(taffy::style::AlignSelf::End),
AlignSelf::FlexStart => Some(taffy::style::AlignSelf::FlexStart),
AlignSelf::FlexEnd => Some(taffy::style::AlignSelf::FlexEnd),
AlignSelf::Center => Some(taffy::style::AlignSelf::Center),
AlignSelf::Baseline => Some(taffy::style::AlignSelf::Baseline),
AlignSelf::Stretch => Some(taffy::style::AlignSelf::Stretch),
}
}
}

impl From<AlignContent> for taffy::style::AlignContent {
fn from(value: AlignContent) -> Self {
match value {
AlignContent::Start => taffy::style::AlignContent::Start,
AlignContent::End => taffy::style::AlignContent::End,
AlignContent::FlexStart => taffy::style::AlignContent::FlexStart,
AlignContent::FlexEnd => taffy::style::AlignContent::FlexEnd,
AlignContent::Center => taffy::style::AlignContent::Center,
Expand Down Expand Up @@ -131,6 +190,8 @@ impl From<FlexDirection> for taffy::style::FlexDirection {
impl From<JustifyContent> for taffy::style::JustifyContent {
fn from(value: JustifyContent) -> Self {
match value {
JustifyContent::Start => taffy::style::JustifyContent::Start,
JustifyContent::End => taffy::style::JustifyContent::End,
JustifyContent::FlexStart => taffy::style::JustifyContent::FlexStart,
JustifyContent::FlexEnd => taffy::style::JustifyContent::FlexEnd,
JustifyContent::Center => taffy::style::JustifyContent::Center,
Expand All @@ -141,11 +202,26 @@ impl From<JustifyContent> for taffy::style::JustifyContent {
}
}

impl From<PositionType> for taffy::style::PositionType {
impl From<JustifySelf> for Option<taffy::style::AlignItems> {
fn from(value: JustifySelf) -> Self {
match value {
JustifySelf::Auto => None,
JustifySelf::Start => taffy::style::AlignItems::Start.into(),
JustifySelf::End => taffy::style::AlignItems::End.into(),
JustifySelf::FlexStart => taffy::style::AlignItems::FlexStart.into(),
JustifySelf::FlexEnd => taffy::style::AlignItems::FlexEnd.into(),
JustifySelf::Center => taffy::style::AlignItems::Center.into(),
JustifySelf::Baseline => taffy::style::AlignItems::Baseline.into(),
JustifySelf::Stretch => taffy::style::AlignItems::Stretch.into(),
}
}
}

impl From<PositionType> for taffy::style::Position {
fn from(value: PositionType) -> Self {
match value {
PositionType::Relative => taffy::style::PositionType::Relative,
PositionType::Absolute => taffy::style::PositionType::Absolute,
PositionType::Relative => taffy::style::Position::Relative,
PositionType::Absolute => taffy::style::Position::Absolute,
}
}
}
Expand All @@ -158,4 +234,4 @@ impl From<FlexWrap> for taffy::style::FlexWrap {
FlexWrap::WrapReverse => taffy::style::FlexWrap::WrapReverse,
}
}
}
}

0 comments on commit 02679cd

Please sign in to comment.