From 136bba89af63272f5bc6d2fbe35ce235ca3e569d Mon Sep 17 00:00:00 2001 From: Tim Froehlich Date: Tue, 5 Nov 2024 15:03:30 -0600 Subject: [PATCH] Convert the positioning enums and LayoutView to Proto Fixes #1725 Fixes #1723 --- crates/dc_bundle/src/definition/layout.rs | 58 ++++ crates/dc_bundle/src/legacy_definition.rs | 2 - .../legacy_definition/layout/layout_style.rs | 122 -------- .../legacy_definition/layout/positioning.rs | 260 ------------------ .../src/legacy_definition/view/node_style.rs | 3 +- .../src/legacy_definition/view/view.rs | 2 +- .../src/legacy_definition/view/view_style.rs | 10 +- crates/figma_import/src/figma_schema.rs | 20 +- crates/figma_import/src/reflection.rs | 25 +- crates/figma_import/src/tools/fetch_layout.rs | 10 +- crates/figma_import/src/transform_flexbox.rs | 87 +++--- .../figma_import/tests/layout-unit-tests.dcf | Bin 27564 -> 27687 bytes crates/figma_import/tests/layout_tests.rs | 6 +- crates/layout/src/layout_manager.rs | 2 +- crates/layout/src/layout_node.rs | 2 +- crates/layout/src/layout_style.rs | 24 +- crates/layout/src/proto/layout_node.rs | 3 +- crates/layout/src/styles.rs | 137 +++++---- ...signSwitcherDoc_Ljph4e3sC0lHcynfXpoh9f.dcf | Bin 398772 -> 400539 bytes .../com/android/designcompose/DesignFrame.kt | 57 ++-- .../com/android/designcompose/DesignView.kt | 8 +- .../java/com/android/designcompose/Layout.kt | 34 ++- .../java/com/android/designcompose/Utils.kt | 74 +++-- .../android/designcompose/proto/IntoProto.kt | 29 +- .../android/designcompose/proto/IntoSerde.kt | 48 +--- .../android/designcompose/proto/ProtoEnums.kt | 143 ++++++++++ .../android/designcompose/proto/ProtoUtils.kt | 3 + .../designcompose/squoosh/SquooshRoot.kt | 16 +- .../squoosh/SquooshTreeBuilder.kt | 37 +-- ...lignmentTestDoc_JIjE9oKQbq8ipi66ab5UaK.dcf | Bin 443689 -> 445672 bytes .../BattleshipDoc_RfGl9SWnBEvdg8T1Ex6ZAR.dcf | Bin 1018401 -> 1023147 bytes ...lendModeTestDoc_ZqX5i5g6inv9tANIwMMXUV.dcf | Bin 67748 -> 68066 bytes ...olorTintTestDoc_MCtUD3yjONxK6rQm65yqM5.dcf | Bin 1491 -> 1506 bytes ...onentReplaceDoc_bQVVy2GSZJ8veYaJUrG6Ni.dcf | Bin 19663 -> 19744 bytes ...laceRelayoutDoc_qIh0IOQTCtgeAWZFF5gYSk.dcf | Bin 3805 -> 3823 bytes .../ConstraintsDoc_KuHLbsKA23DjZPhhgHqt71.dcf | Bin 27396 -> 27522 bytes ...AxisFillTestDoc_GPr1cx4n3zBPwLhqlSL1ba.dcf | Bin 10058 -> 10103 bytes ...tomBrushTestDoc_oetCBVw8gCAxmCNllXx7zO.dcf | Bin 7031 -> 7058 bytes ...lsGaugesTestDoc_lZj6E9GtIQQE4HNLpzgETw.dcf | Bin 251508 -> 251958 bytes ...ancyFillTestDoc_xQ9cunHt8VUm6xqJJ2Pjb2.dcf | Bin 79201 -> 79318 bytes .../FillTestDoc_dB3q96FkxkTO4czn5NqnxV.dcf | Bin 3311 -> 3326 bytes .../GridLayoutDoc_MBNjjSbzzKeN7nBjVoewsl.dcf | Bin 33136 -> 32246 bytes ...idLayoutTestDoc_JOSOEvsrjvMqanyQa5OpNR.dcf | Bin 166882 -> 163343 bytes ...idWidgetTestDoc_OBhNItd9i9J2LwVYuLxEIx.dcf | Bin 331692 -> 318586 bytes .../HelloByeDoc_MCHaMYcIEnRpbvU9Ms7a0o.dcf | Bin 3492 -> 3507 bytes ...nDoc_v62Vwlxa4Bb6nopJiAxQAQ_5668177823.dcf | Bin 29364 -> 29379 bytes .../HelloWorldDoc_pxVlixodJqZL95zo2RzTHl.dcf | Bin 3814 -> 3829 bytes ...nkValidationDoc_uBExbEg4lcRa0xN2yaLTX8.dcf | Bin 3495 -> 3504 bytes ...toLayoutTestDoc_vPNR6N02HfdcpC8wR5yBYP.dcf | Bin 3424 -> 3448 bytes ...geUpdateTestDoc_oQw7kiy94fvdVouCYBC9T0.dcf | Bin 24035 -> 23050 bytes ...eractionTestDoc_8Zg9viyjYTnyN29pbkR1CE.dcf | Bin 313977 -> 315462 bytes ...mSpacingTestDoc_YXrHBp6C6OaW5ShcCYeGJc.dcf | Bin 36957 -> 37134 bytes ...lacementTestDoc_dwk2GF7RiNvlbbAKPjqldx.dcf | Bin 14247 -> 14313 bytes .../LayoutTestsDoc_Gv63fYTzpeH2ZtxP4go31E.dcf | Bin 192222 -> 192960 bytes ...stWidgetTestDoc_9ev0MBNHFrgTqJOrAGcEpV.dcf | Bin 259304 -> 257615 bytes .../MaskTestDoc_mEmdUVEIjvBBbV0kELPy37.dcf | Bin 34495 -> 34618 bytes ...oduleExampleDoc_hPEGkrF0LUqNYEZObXqjXZ.dcf | Bin 34476 -> 34638 bytes ...ePxSeparatorDoc_EXjTHxfMNBtXDrz8hr6MFB.dcf | Bin 16965 -> 17034 bytes ...OpenLinkTestDoc_r7m4tqyKv6y9DWcg7QBEDf.dcf | Bin 25880 -> 25994 bytes ...stomizationsDoc_o0GWzcqdOWEgzj4kIeIlAu.dcf | Bin 6959 -> 6992 bytes .../ShadowsTestDoc_OqK58Y46IqP4wIgKCWys48.dcf | Bin 201488 -> 202364 bytes ...tAnimateTestDoc_RW3lFurXCoVDeqY2Y7bf4v.dcf | Bin 1892932 -> 1894645 bytes ...stomizationsDoc_POWyniB6moGRmhZTJyejwa.dcf | Bin 21891 -> 21981 bytes ...yledTextRunsDoc_mIYV4YsYYaMTsBMCVskA4N.dcf | Bin 6381 -> 6414 bytes ...TelltaleTestDoc_TZgHrKWx8wvQM7UPTyEpmz.dcf | Bin 52215 -> 52404 bytes ...extElideTestDoc_oQ7nK49Ya5PJ3GpjI5iy8d.dcf | Bin 6895 -> 6922 bytes ...ResizingTestDoc_kAoYvgHkPzA4J4pALZ3Xhg.dcf | Bin 8588 -> 8627 bytes ...leBorderTestDoc_MWnVAfW3FupV4VMLNR1m67.dcf | Bin 27996 -> 27589 bytes ...ariablesTestDoc_HhGxvL4aHhP8ALsLNz56TP.dcf | Bin 58254 -> 57478 bytes ...nimationTestDoc_pghyUUhlzJNoxxSK86ngiw.dcf | Bin 1347399 -> 1347648 bytes ...TimelineTestDoc_vJRf4zxY4QX4zzSSUd1nJ5.dcf | Bin 1731678 -> 1732182 bytes ...AsteriskTestDoc_gQeYHGCSaBE4zYSFpBrhre.dcf | Bin 27165 -> 27294 bytes ...ractionsTestDoc_WcsgoLR4aDRSkZHY29Qdhq.dcf | Bin 54589 -> 54835 bytes ...opertiesTestDoc_4P7zDdrQxj7FZsKJoIQcx1.dcf | Bin 132954 -> 133566 bytes ...enderingTestDoc_Z3ucY0wMAbIwZIa6mLEWIK.dcf | Bin 92128 -> 92419 bytes proto/definition/layout/positioning.proto | 2 +- .../HelloWorldDoc_pxVlixodJqZL95zo2RzTHl.dcf | Bin 3735 -> 3750 bytes .../TutorialDoc_3z4xExq0INrL9vxPhj9tl7.dcf | Bin 55496 -> 55727 bytes 78 files changed, 548 insertions(+), 676 deletions(-) delete mode 100644 crates/dc_bundle/src/legacy_definition/layout/layout_style.rs delete mode 100644 crates/dc_bundle/src/legacy_definition/layout/positioning.rs diff --git a/crates/dc_bundle/src/definition/layout.rs b/crates/dc_bundle/src/definition/layout.rs index 458ce920c..c75b88f21 100644 --- a/crates/dc_bundle/src/definition/layout.rs +++ b/crates/dc_bundle/src/definition/layout.rs @@ -13,5 +13,63 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +use crate::definition::element::{DimensionProto, DimensionRect, Size}; +use crate::definition::layout::item_spacing::ItemSpacingType; +use crate::Error; +use crate::Error::MissingFieldError; include!(concat!(env!("OUT_DIR"), "/designcompose.definition.layout.rs")); + +impl ItemSpacing { + pub fn new_default() -> Option { + Some(Self { item_spacing_type: Some(ItemSpacingType::Fixed(0)) }) + } +} + +impl LayoutStyle { + pub fn bounding_box(&self) -> Result<&Size, Error> { + self.bounding_box.as_ref().ok_or(MissingFieldError { field: "bounding_box".to_string() }) + } + + pub(crate) fn new_default() -> LayoutStyle { + LayoutStyle { + margin: (DimensionRect::new()), + padding: (DimensionRect::new()), + item_spacing: ItemSpacing::new_default(), + top: DimensionProto::new_undefined(), + left: DimensionProto::new_undefined(), + bottom: DimensionProto::new_undefined(), + right: DimensionProto::new_undefined(), + width: DimensionProto::new_undefined(), + height: DimensionProto::new_undefined(), + min_width: DimensionProto::new_undefined(), + max_width: DimensionProto::new_undefined(), + min_height: DimensionProto::new_undefined(), + max_height: DimensionProto::new_undefined(), + bounding_box: Some(Size::default()), + flex_grow: 0.0, + flex_shrink: 0.0, + flex_basis: DimensionProto::new_undefined(), + align_self: AlignSelf::Auto.into(), + align_content: AlignContent::Stretch.into(), + align_items: AlignItems::Stretch.into(), + flex_direction: FlexDirection::Row.into(), + justify_content: JustifyContent::FlexStart.into(), + position_type: PositionType::Relative.into(), + } + } +} + +impl ItemSpacing { + pub fn fixed(value: i32) -> Self { + Self { item_spacing_type: Some(item_spacing::ItemSpacingType::Fixed(value)) } + } + pub fn auto(width: i32, height: i32) -> Self { + Self { + item_spacing_type: Some(item_spacing::ItemSpacingType::Auto(item_spacing::Auto { + width, + height, + })), + } + } +} diff --git a/crates/dc_bundle/src/legacy_definition.rs b/crates/dc_bundle/src/legacy_definition.rs index 2c34b37c5..d7832432e 100644 --- a/crates/dc_bundle/src/legacy_definition.rs +++ b/crates/dc_bundle/src/legacy_definition.rs @@ -23,13 +23,11 @@ use std::sync::Arc; // To help keep the legacy definition files clear we alias `crate::definition`, which is the base // module for the generated protobuf files to `proto`, so that all of the protobuf-generated types // inside `legacy_definition` must be prepended with `proto::` -pub(crate) use crate::definition as proto; use crate::definition::element::ImageKey; use crate::definition::element::VariableMap; use crate::legacy_definition::element::node::NodeQuery; pub mod element; -pub mod layout; pub mod plugin; pub mod view; diff --git a/crates/dc_bundle/src/legacy_definition/layout/layout_style.rs b/crates/dc_bundle/src/legacy_definition/layout/layout_style.rs deleted file mode 100644 index 00843c522..000000000 --- a/crates/dc_bundle/src/legacy_definition/layout/layout_style.rs +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -use crate::definition::element::{DimensionProto, DimensionRect, Size}; -use crate::legacy_definition::layout::positioning::{ - AlignContent, AlignItems, AlignSelf, FlexDirection, ItemSpacing, JustifyContent, PositionType, -}; -use crate::legacy_definition::proto; -use crate::Error; -use crate::Error::MissingFieldError; -use serde::{Deserialize, Serialize}; - -#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] -pub struct LayoutStyle { - pub margin: Option, - pub padding: Option, - pub item_spacing: ItemSpacing, - pub top: Option, - pub left: Option, - pub bottom: Option, - pub right: Option, - pub width: Option, - pub height: Option, - pub min_width: Option, - pub max_width: Option, - pub min_height: Option, - pub max_height: Option, - pub bounding_box: Size, - pub flex_grow: f32, - pub flex_shrink: f32, - pub flex_basis: Option, - pub align_self: AlignSelf, - pub align_content: AlignContent, - pub align_items: AlignItems, - pub flex_direction: FlexDirection, - pub justify_content: JustifyContent, - pub position_type: PositionType, -} - -impl Default for LayoutStyle { - fn default() -> LayoutStyle { - LayoutStyle { - margin: (DimensionRect::new()), - padding: (DimensionRect::new()), - item_spacing: ItemSpacing::default(), - top: DimensionProto::new_undefined(), - left: DimensionProto::new_undefined(), - bottom: DimensionProto::new_undefined(), - right: DimensionProto::new_undefined(), - width: DimensionProto::new_undefined(), - height: DimensionProto::new_undefined(), - min_width: DimensionProto::new_undefined(), - max_width: DimensionProto::new_undefined(), - min_height: DimensionProto::new_undefined(), - max_height: DimensionProto::new_undefined(), - bounding_box: Size::default(), - flex_grow: 0.0, - flex_shrink: 0.0, - flex_basis: DimensionProto::new_undefined(), - align_self: AlignSelf::Auto, - align_content: AlignContent::Stretch, - align_items: AlignItems::Stretch, - flex_direction: FlexDirection::Row, - justify_content: JustifyContent::FlexStart, - position_type: PositionType::Relative, - } - } -} - -impl TryFrom for LayoutStyle { - type Error = Error; - - fn try_from(proto: proto::layout::LayoutStyle) -> Result { - let layout_style = LayoutStyle { - margin: proto.margin.clone(), - padding: proto.padding.clone(), - item_spacing: proto - .item_spacing - .clone() - .ok_or(MissingFieldError { field: "item_spacing".to_string() })? - .try_into()?, - top: proto.top, - left: proto.left, - right: proto.right, - bottom: proto.bottom, - width: proto.width, - height: proto.height, - min_width: proto.min_width, - min_height: proto.min_height, - max_width: proto.max_width, - max_height: proto.max_height, - bounding_box: proto - .bounding_box - .clone() - .ok_or(MissingFieldError { field: "bounding_box".to_string() })? - .into(), - flex_grow: proto.flex_grow, - flex_shrink: proto.flex_shrink, - flex_basis: proto.flex_basis, - align_self: proto.align_self().try_into()?, - align_content: proto.align_content().try_into()?, - align_items: proto.align_items().try_into()?, - flex_direction: proto.flex_direction().try_into()?, - justify_content: proto.justify_content().try_into()?, - position_type: proto.position_type().try_into()?, - }; - Ok(layout_style) - } -} diff --git a/crates/dc_bundle/src/legacy_definition/layout/positioning.rs b/crates/dc_bundle/src/legacy_definition/layout/positioning.rs deleted file mode 100644 index 2712d53d1..000000000 --- a/crates/dc_bundle/src/legacy_definition/layout/positioning.rs +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -use serde::{Deserialize, Serialize}; - -use crate::legacy_definition::proto; -use crate::Error; - -#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize)] -pub enum AlignItems { - FlexStart, - FlexEnd, - Center, - Baseline, - Stretch, -} - -impl Default for AlignItems { - fn default() -> Self { - Self::Stretch - } -} - -impl TryFrom for AlignItems { - type Error = Error; - fn try_from(proto: proto::layout::AlignItems) -> Result { - match proto { - proto::layout::AlignItems::FlexStart => Ok(AlignItems::FlexStart), - proto::layout::AlignItems::FlexEnd => Ok(AlignItems::FlexEnd), - proto::layout::AlignItems::Center => Ok(AlignItems::Center), - proto::layout::AlignItems::Baseline => Ok(AlignItems::Baseline), - proto::layout::AlignItems::Stretch => Ok(AlignItems::Stretch), - _ => Err(Error::UnknownEnumVariant { enum_name: "AlignItems".to_string() }), - } - } -} - -#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize)] -pub enum AlignSelf { - Auto, - FlexStart, - FlexEnd, - Center, - Baseline, - Stretch, -} - -impl Default for AlignSelf { - fn default() -> Self { - Self::Auto - } -} - -impl TryFrom for AlignSelf { - type Error = Error; - - fn try_from(proto: proto::layout::AlignSelf) -> Result { - match proto { - proto::layout::AlignSelf::Auto => Ok(AlignSelf::Auto), - proto::layout::AlignSelf::FlexStart => Ok(AlignSelf::FlexStart), - proto::layout::AlignSelf::FlexEnd => Ok(AlignSelf::FlexEnd), - proto::layout::AlignSelf::Center => Ok(AlignSelf::Center), - proto::layout::AlignSelf::Baseline => Ok(AlignSelf::Baseline), - proto::layout::AlignSelf::Stretch => Ok(AlignSelf::Stretch), - _ => Err(Error::UnknownEnumVariant { enum_name: "AlignSelf".to_string() }), - } - } -} - -#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize)] -pub enum AlignContent { - FlexStart, - FlexEnd, - Center, - Stretch, - SpaceBetween, - SpaceAround, -} - -impl Default for AlignContent { - fn default() -> Self { - Self::Stretch - } -} - -impl TryFrom for AlignContent { - type Error = Error; - - fn try_from(proto: proto::layout::AlignContent) -> Result { - match proto { - proto::layout::AlignContent::Center => Ok(AlignContent::Center), - proto::layout::AlignContent::FlexStart => Ok(AlignContent::FlexStart), - proto::layout::AlignContent::FlexEnd => Ok(AlignContent::FlexEnd), - proto::layout::AlignContent::Stretch => Ok(AlignContent::Stretch), - proto::layout::AlignContent::SpaceBetween => Ok(AlignContent::SpaceBetween), - proto::layout::AlignContent::SpaceAround => Ok(AlignContent::SpaceAround), - _ => Err(Error::UnknownEnumVariant { enum_name: "AlignContent".to_string() }), - } - } -} - -#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize)] -pub enum FlexDirection { - Row, - Column, - RowReverse, - ColumnReverse, - None, -} - -impl Default for FlexDirection { - fn default() -> Self { - Self::Row - } -} - -impl TryFrom for FlexDirection { - type Error = Error; - - fn try_from(proto: proto::layout::FlexDirection) -> Result { - match proto { - proto::layout::FlexDirection::Row => Ok(FlexDirection::Row), - proto::layout::FlexDirection::Column => Ok(FlexDirection::Column), - proto::layout::FlexDirection::RowReverse => Ok(FlexDirection::RowReverse), - proto::layout::FlexDirection::ColumnReverse => Ok(FlexDirection::ColumnReverse), - proto::layout::FlexDirection::None => Ok(FlexDirection::None), - _ => Err(Error::UnknownEnumVariant { enum_name: "FlexDirection".to_string() }), - } - } -} - -#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize)] -pub enum JustifyContent { - FlexStart, - FlexEnd, - Center, - SpaceBetween, - SpaceAround, - SpaceEvenly, -} - -impl Default for JustifyContent { - fn default() -> Self { - Self::FlexStart - } -} - -impl TryFrom for JustifyContent { - type Error = Error; - - fn try_from(proto: proto::layout::JustifyContent) -> Result { - match proto { - proto::layout::JustifyContent::FlexStart => Ok(JustifyContent::FlexStart), - proto::layout::JustifyContent::FlexEnd => Ok(JustifyContent::FlexEnd), - proto::layout::JustifyContent::Center => Ok(JustifyContent::Center), - proto::layout::JustifyContent::SpaceBetween => Ok(JustifyContent::SpaceBetween), - proto::layout::JustifyContent::SpaceAround => Ok(JustifyContent::SpaceAround), - proto::layout::JustifyContent::SpaceEvenly => Ok(JustifyContent::SpaceEvenly), - _ => Err(Error::UnknownEnumVariant { enum_name: "JustifyContent".to_string() }), - } - } -} - -#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize)] -pub enum PositionType { - Relative, - Absolute, -} - -impl Default for PositionType { - fn default() -> Self { - Self::Relative - } -} - -impl TryFrom for PositionType { - type Error = Error; - - fn try_from(proto: proto::layout::PositionType) -> Result { - match proto { - proto::layout::PositionType::Relative => Ok(PositionType::Relative), - proto::layout::PositionType::Absolute => Ok(PositionType::Absolute), - _ => Err(Error::UnknownEnumVariant { enum_name: "PositionType".to_string() }), - } - } -} - -#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] -pub enum ItemSpacing { - Fixed(i32), - // Fixed space between columns/rows - Auto(i32, i32), // Min space between columns/rows, item width/height -} - -impl Default for ItemSpacing { - fn default() -> Self { - ItemSpacing::Fixed(0) - } -} - -impl TryFrom for ItemSpacing { - type Error = Error; - - fn try_from(proto: proto::layout::ItemSpacing) -> Result { - match proto - .r#type - .as_ref() - .ok_or(Error::MissingFieldError { field: "ItemSpacing".to_string() })? - { - proto::layout::item_spacing::Type::Fixed(s) => Ok(ItemSpacing::Fixed(*s)), - proto::layout::item_spacing::Type::Auto(s) => Ok(ItemSpacing::Auto(s.width, s.height)), - } - } -} - -#[derive(Deserialize, Serialize, Debug, Clone, Copy, PartialEq, Eq)] -#[serde(rename_all = "SCREAMING_SNAKE_CASE")] -#[derive(Default)] -pub enum OverflowDirection { - #[default] - None, - HorizontalScrolling, - VerticalScrolling, - HorizontalAndVerticalScrolling, -} - -#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize)] -pub enum Overflow { - Visible, - Hidden, - Scroll, -} - -impl Default for Overflow { - fn default() -> Self { - Self::Visible - } -} - -#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Default, Copy)] -#[serde(rename_all = "SCREAMING_SNAKE_CASE")] -pub enum LayoutSizing { - #[default] - Fixed, - Hug, - Fill, -} diff --git a/crates/dc_bundle/src/legacy_definition/view/node_style.rs b/crates/dc_bundle/src/legacy_definition/view/node_style.rs index b6138b7b2..63fd6bfaa 100644 --- a/crates/dc_bundle/src/legacy_definition/view/node_style.rs +++ b/crates/dc_bundle/src/legacy_definition/view/node_style.rs @@ -22,12 +22,11 @@ use crate::definition::element::{ }; use crate::definition::element::{Background, FontStretch, FontWeight}; use crate::definition::interaction::PointerEvents; -use crate::definition::layout::{FlexWrap, GridLayoutType, GridSpan}; +use crate::definition::layout::{FlexWrap, GridLayoutType, GridSpan, LayoutSizing, Overflow}; use crate::definition::modifier::{ BlendMode, FilterOp, TextAlign, TextAlignVertical, TextOverflow, }; use crate::definition::modifier::{BoxShadow, LayoutTransform, TextShadow}; -use crate::legacy_definition::layout::positioning::{LayoutSizing, Overflow}; use crate::legacy_definition::plugin::meter_data::MeterData; use serde::{Deserialize, Serialize}; diff --git a/crates/dc_bundle/src/legacy_definition/view/view.rs b/crates/dc_bundle/src/legacy_definition/view/view.rs index 491b95981..60b15305c 100644 --- a/crates/dc_bundle/src/legacy_definition/view/view.rs +++ b/crates/dc_bundle/src/legacy_definition/view/view.rs @@ -16,8 +16,8 @@ use crate::definition::element::{Rectangle, ViewShape}; use crate::definition::interaction::Reaction; +use crate::definition::layout::OverflowDirection; use crate::definition::plugin::FrameExtras; -use crate::legacy_definition::layout::positioning::OverflowDirection; use crate::legacy_definition::view::component::ComponentInfo; use crate::legacy_definition::view::text_style::StyledTextRun; use crate::legacy_definition::view::view_style::ViewStyle; diff --git a/crates/dc_bundle/src/legacy_definition/view/view_style.rs b/crates/dc_bundle/src/legacy_definition/view/view_style.rs index e27fba822..2fdbd2794 100644 --- a/crates/dc_bundle/src/legacy_definition/view/view_style.rs +++ b/crates/dc_bundle/src/legacy_definition/view/view_style.rs @@ -14,16 +14,22 @@ * limitations under the License. */ -use crate::legacy_definition::layout::layout_style::LayoutStyle; +use crate::definition::layout::LayoutStyle; use crate::legacy_definition::view::node_style::NodeStyle; use serde::{Deserialize, Serialize}; -#[derive(Clone, Debug, PartialEq, Deserialize, Serialize, Default)] +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] pub struct ViewStyle { pub layout_style: LayoutStyle, pub node_style: NodeStyle, } +impl Default for ViewStyle { + fn default() -> Self { + Self { layout_style: LayoutStyle::new_default(), node_style: NodeStyle::default() } + } +} + impl ViewStyle { /// Compute the difference between this style and the given style, returning a style /// that can be applied to this style to make it equal the given style using apply_non_default. diff --git a/crates/figma_import/src/figma_schema.rs b/crates/figma_import/src/figma_schema.rs index bd8d18cdd..bed1fa832 100644 --- a/crates/figma_import/src/figma_schema.rs +++ b/crates/figma_import/src/figma_schema.rs @@ -716,15 +716,19 @@ impl OverflowDirection { } } -impl Into - for OverflowDirection -{ - fn into(self) -> dc_bundle::legacy_definition::layout::positioning::OverflowDirection { +impl Into for OverflowDirection { + fn into(self) -> dc_bundle::definition::layout::OverflowDirection { match self { - OverflowDirection::None => dc_bundle::legacy_definition::layout::positioning::OverflowDirection::None, - OverflowDirection::HorizontalScrolling => dc_bundle::legacy_definition::layout::positioning::OverflowDirection::HorizontalScrolling, - OverflowDirection::VerticalScrolling => dc_bundle::legacy_definition::layout::positioning::OverflowDirection::VerticalScrolling, - OverflowDirection::HorizontalAndVerticalScrolling => dc_bundle::legacy_definition::layout::positioning::OverflowDirection::HorizontalAndVerticalScrolling, + OverflowDirection::None => dc_bundle::definition::layout::OverflowDirection::None, + OverflowDirection::HorizontalScrolling => { + dc_bundle::definition::layout::OverflowDirection::HorizontalScrolling + } + OverflowDirection::VerticalScrolling => { + dc_bundle::definition::layout::OverflowDirection::VerticalScrolling + } + OverflowDirection::HorizontalAndVerticalScrolling => { + dc_bundle::definition::layout::OverflowDirection::HorizontalAndVerticalScrolling + } } } } diff --git a/crates/figma_import/src/reflection.rs b/crates/figma_import/src/reflection.rs index 52b2efee1..887b6f517 100644 --- a/crates/figma_import/src/reflection.rs +++ b/crates/figma_import/src/reflection.rs @@ -22,13 +22,13 @@ pub fn registry() -> serde_reflection::Result { let samples = Samples::new(); tracer - .trace_type::(&samples) + .trace_type::(&samples) .expect("couldn't trace AlignContent"); tracer - .trace_type::(&samples) + .trace_type::(&samples) .expect("couldn't trace AlignItems"); tracer - .trace_type::(&samples) + .trace_type::(&samples) .expect("couldn't trace AlignSelf"); tracer .trace_type::(&samples) @@ -62,7 +62,7 @@ pub fn registry() -> serde_reflection::Result { .trace_type::(&samples) .expect("couldn't trace FilterOpType"); tracer - .trace_type::(&samples) + .trace_type::(&samples) .expect("couldn't trace FlexDirection"); tracer .trace_type::(&samples) @@ -74,7 +74,7 @@ pub fn registry() -> serde_reflection::Result { .trace_type::(&samples) .expect("couldn't trace TextDecoration"); tracer - .trace_type::(&samples) + .trace_type::(&samples) .expect("couldn't trace JustifyContent"); tracer .trace_type::(&samples) @@ -83,13 +83,13 @@ pub fn registry() -> serde_reflection::Result { .trace_type::(&samples) .expect("couldn't trace Number"); tracer - .trace_type::(&samples) + .trace_type::(&samples) .expect("couldn't trace Overflow"); tracer .trace_type::(&samples) .expect("couldn't trace PointerEvents"); tracer - .trace_type::(&samples) + .trace_type::(&samples) .expect("couldn't trace ItemSpacing"); tracer .trace_type::(&samples) @@ -114,7 +114,7 @@ pub fn registry() -> serde_reflection::Result { .trace_type::(&samples) .expect("couldn't trace MeterData"); tracer - .trace_type::(&samples) + .trace_type::(&samples) .expect("couldn't trace PositionType"); tracer .trace_type::(&samples) @@ -138,7 +138,7 @@ pub fn registry() -> serde_reflection::Result { .trace_type::(&samples) .expect("couldn't trace TextOverflow"); tracer - .trace_type::(&samples) + .trace_type::(&samples) .expect("couldn't trace LayoutSizing"); tracer .trace_type::(&samples) @@ -184,9 +184,7 @@ pub fn registry() -> serde_reflection::Result { .trace_type::(&samples) .expect("couldn't trace ComponentInfo"); tracer - .trace_type::( - &samples, - ) + .trace_type::(&samples) .expect("couldn't trace OverflowDirection"); tracer .trace_type::(&samples) @@ -259,6 +257,9 @@ pub fn registry() -> serde_reflection::Result { .expect("couldn't trace SerializedDesignDoc"); tracer.trace_type::(&samples).expect("couldn't trace ServerFigmaDoc"); tracer.trace_type::(&samples).expect("couldn't trace ConvertResponse"); + tracer + .trace_type::(&samples) + .expect("couldn't trace ItemSpacingType"); tracer.registry() } diff --git a/crates/figma_import/src/tools/fetch_layout.rs b/crates/figma_import/src/tools/fetch_layout.rs index 412612e92..47a54dcf7 100644 --- a/crates/figma_import/src/tools/fetch_layout.rs +++ b/crates/figma_import/src/tools/fetch_layout.rs @@ -17,8 +17,8 @@ use crate::{Document, ProxyConfig}; use clap::Parser; use dc_bundle::definition::element::dimension_proto::Dimension; use dc_bundle::definition::element::DimensionProto; +use dc_bundle::definition::layout::LayoutSizing; use dc_bundle::legacy_definition::element::node::NodeQuery; -use dc_bundle::legacy_definition::layout::positioning::LayoutSizing; use dc_bundle::legacy_definition::view::view::{View, ViewData}; use dc_bundle::legacy_definition::DesignComposeDefinition; use layout::LayoutManager; @@ -154,9 +154,9 @@ fn test_layout( } else { let mut fixed_view = view.clone(); fixed_view.style.layout_style.width = - DimensionProto::new_points(view.style.layout_style.bounding_box.width); + DimensionProto::new_points(view.style.layout_style.bounding_box().unwrap().width); fixed_view.style.layout_style.height = - DimensionProto::new_points(view.style.layout_style.bounding_box.height); + DimensionProto::new_points(view.style.layout_style.bounding_box().unwrap().height); layout_manager .add_style( my_id, @@ -165,8 +165,8 @@ fn test_layout( fixed_view.style.layout_style.clone(), fixed_view.name.clone(), None, - Some(view.style.layout_style.bounding_box.width as i32), - Some(view.style.layout_style.bounding_box.height as i32), + Some(view.style.layout_style.bounding_box().unwrap().width as i32), + Some(view.style.layout_style.bounding_box().unwrap().height as i32), ) .expect("Failed to add style"); } diff --git a/crates/figma_import/src/transform_flexbox.rs b/crates/figma_import/src/transform_flexbox.rs index b4489a56c..11e997740 100644 --- a/crates/figma_import/src/transform_flexbox.rs +++ b/crates/figma_import/src/transform_flexbox.rs @@ -29,7 +29,7 @@ use crate::{ use crate::{figma_schema, Error}; use dc_bundle::definition::element::{ view_shape, DimensionProto, DimensionRect, DimensionRectExt, FontFeature, FontStyle, - FontWeight, ViewShape, + FontWeight, Size, ViewShape, }; use crate::figma_schema::LayoutPositioning; @@ -44,16 +44,16 @@ use dc_bundle::definition::element::{ background, stroke_weight, Background, StrokeAlign, StrokeWeight, }; use dc_bundle::definition::interaction::Reaction; -use dc_bundle::definition::layout::{FlexWrap, GridLayoutType, GridSpan}; +use dc_bundle::definition::layout::{ + AlignContent, AlignItems, AlignSelf, FlexDirection, FlexWrap, GridLayoutType, GridSpan, + ItemSpacing, JustifyContent, LayoutSizing, Overflow, OverflowDirection, PositionType, +}; use dc_bundle::definition::modifier::{ filter_op, BoxShadow, FilterOp, TextAlign, TextAlignVertical, TextOverflow, TextShadow, }; use dc_bundle::definition::modifier::{BlendMode, LayoutTransform}; use dc_bundle::definition::plugin::FrameExtras; -use dc_bundle::legacy_definition::layout::positioning::{ - AlignContent, AlignItems, AlignSelf, FlexDirection, ItemSpacing, JustifyContent, LayoutSizing, - Overflow, OverflowDirection, PositionType, -}; + use dc_bundle::legacy_definition::view::component::ComponentInfo; use dc_bundle::legacy_definition::view::text_style::{StyledTextRun, TextStyle}; use dc_bundle::legacy_definition::view::view::{RenderMethod, ScrollInfo, View}; @@ -115,15 +115,15 @@ fn compute_layout( let mut hug_height = false; if let Some(bounds) = node.absolute_bounding_box { - style.layout_style.bounding_box.width = bounds.width(); - style.layout_style.bounding_box.height = bounds.height(); + style.layout_style.bounding_box = + Some(Size { width: bounds.width(), height: bounds.height() }) } // Frames can implement Auto Layout on their children. if let Some(frame) = node.frame() { style.layout_style.position_type = match frame.layout_positioning { - LayoutPositioning::Absolute => PositionType::Absolute, - LayoutPositioning::Auto => PositionType::Relative, + LayoutPositioning::Absolute => PositionType::Absolute.into(), + LayoutPositioning::Auto => PositionType::Relative.into(), }; style.layout_style.width = DimensionProto::new_auto(); style.layout_style.height = DimensionProto::new_auto(); @@ -144,15 +144,15 @@ fn compute_layout( let flex_direction_override = check_child_size_override(node); if let Some(dir) = flex_direction_override { style.layout_style.flex_direction = match dir { - LayoutType::Horizontal => FlexDirection::Row, - LayoutType::Vertical => FlexDirection::Column, - _ => FlexDirection::None, + LayoutType::Horizontal => FlexDirection::Row.into(), + LayoutType::Vertical => FlexDirection::Column.into(), + _ => FlexDirection::None.into(), }; } else { style.layout_style.flex_direction = match frame.layout_mode { - figma_schema::LayoutMode::Horizontal => FlexDirection::Row, - figma_schema::LayoutMode::Vertical => FlexDirection::Column, - figma_schema::LayoutMode::None => FlexDirection::None, + figma_schema::LayoutMode::Horizontal => FlexDirection::Row.into(), + figma_schema::LayoutMode::Vertical => FlexDirection::Column.into(), + figma_schema::LayoutMode::None => FlexDirection::None.into(), }; } style.layout_style.padding = Some(DimensionRect { @@ -162,34 +162,33 @@ fn compute_layout( bottom: DimensionProto::new_points(frame.padding_bottom), }); - style.layout_style.item_spacing = ItemSpacing::Fixed(frame.item_spacing as i32); - + style.layout_style.item_spacing = Some(ItemSpacing::fixed(frame.item_spacing as i32)); match frame.layout_align { // Counter axis stretch Some(figma_schema::LayoutAlign::Stretch) => { - style.layout_style.align_self = AlignSelf::Stretch; + style.layout_style.align_self = AlignSelf::Stretch.into(); } _ => (), }; style.layout_style.align_items = match frame.counter_axis_align_items { - figma_schema::LayoutAlignItems::Center => AlignItems::Center, - figma_schema::LayoutAlignItems::Max => AlignItems::FlexEnd, - figma_schema::LayoutAlignItems::Min => AlignItems::FlexStart, - figma_schema::LayoutAlignItems::SpaceBetween => AlignItems::FlexStart, // XXX - figma_schema::LayoutAlignItems::Baseline => AlignItems::FlexStart, + figma_schema::LayoutAlignItems::Center => AlignItems::Center.into(), + figma_schema::LayoutAlignItems::Max => AlignItems::FlexEnd.into(), + figma_schema::LayoutAlignItems::Min => AlignItems::FlexStart.into(), + figma_schema::LayoutAlignItems::SpaceBetween => AlignItems::FlexStart.into(), // XXX + figma_schema::LayoutAlignItems::Baseline => AlignItems::FlexStart.into(), }; style.layout_style.justify_content = match frame.primary_axis_align_items { - figma_schema::LayoutAlignItems::Center => JustifyContent::Center, - figma_schema::LayoutAlignItems::Max => JustifyContent::FlexEnd, - figma_schema::LayoutAlignItems::Min => JustifyContent::FlexStart, - figma_schema::LayoutAlignItems::SpaceBetween => JustifyContent::SpaceBetween, - figma_schema::LayoutAlignItems::Baseline => JustifyContent::FlexStart, + figma_schema::LayoutAlignItems::Center => JustifyContent::Center.into(), + figma_schema::LayoutAlignItems::Max => JustifyContent::FlexEnd.into(), + figma_schema::LayoutAlignItems::Min => JustifyContent::FlexStart.into(), + figma_schema::LayoutAlignItems::SpaceBetween => JustifyContent::SpaceBetween.into(), + figma_schema::LayoutAlignItems::Baseline => JustifyContent::FlexStart.into(), }; // The toolkit picks "Stretch" as a sensible default, but we don't // want that for Figma elements. - style.layout_style.align_content = AlignContent::FlexStart; + style.layout_style.align_content = AlignContent::FlexStart.into(); - let align_self_stretch = style.layout_style.align_self == AlignSelf::Stretch; + let align_self_stretch = style.layout_style.align_self() == AlignSelf::Stretch; if let Some(bounds) = node.absolute_bounding_box { // If align_self is set to stretch, we want width/height to be Auto, even if the // frame's primary or counter axis sizing mode is set to Fixed. @@ -294,7 +293,7 @@ fn compute_layout( } } if is_widget_or_parent_widget { - style.layout_style.position_type = PositionType::Absolute; + style.layout_style.position_type = PositionType::Absolute.into(); style.layout_style.width = DimensionProto::new_auto(); style.layout_style.height = DimensionProto::new_auto(); style.layout_style.left = DimensionProto::new_points(0.0); @@ -308,13 +307,13 @@ fn compute_layout( match vector.layout_align { // Counter axis stretch Some(figma_schema::LayoutAlign::Stretch) => { - style.layout_style.align_self = AlignSelf::Stretch; + style.layout_style.align_self = AlignSelf::Stretch.into(); } _ => (), }; style.layout_style.position_type = match vector.layout_positioning { - LayoutPositioning::Absolute => PositionType::Absolute, - LayoutPositioning::Auto => PositionType::Relative, + LayoutPositioning::Absolute => PositionType::Absolute.into(), + LayoutPositioning::Auto => PositionType::Relative.into(), }; style.layout_style.width = DimensionProto::new_auto(); style.layout_style.height = DimensionProto::new_auto(); @@ -386,10 +385,10 @@ fn compute_layout( } } - if !parent_is_flexbox || style.layout_style.position_type == PositionType::Absolute { + if !parent_is_flexbox || style.layout_style.position_type() == PositionType::Absolute { match (node.absolute_bounding_box, parent_bounding_box) { (Some(bounds), Some(parent_bounds)) => { - style.layout_style.position_type = PositionType::Absolute; + style.layout_style.position_type = PositionType::Absolute.into(); // Figure out all the values we might need when calculating the layout constraints. let (width, height) = if let Some(size) = &node.size { @@ -990,14 +989,14 @@ fn visit_node( style.layout_style.item_spacing = if gld.auto_spacing { if horizontal { - ItemSpacing::Auto(gld.horizontal_spacing, gld.auto_spacing_item_size) + Some(ItemSpacing::auto(gld.horizontal_spacing, gld.auto_spacing_item_size)) } else { - ItemSpacing::Auto(gld.vertical_spacing, gld.auto_spacing_item_size) + Some(ItemSpacing::auto(gld.vertical_spacing, gld.auto_spacing_item_size)) } } else if horizontal { - ItemSpacing::Fixed(gld.horizontal_spacing) + Some(ItemSpacing::fixed(gld.horizontal_spacing)) } else { - ItemSpacing::Fixed(gld.vertical_spacing) + Some(ItemSpacing::fixed(gld.vertical_spacing)) }; style.node_style.cross_axis_item_spacing = if horizontal { gld.vertical_spacing as f32 @@ -1048,7 +1047,7 @@ fn visit_node( }; } if extended_auto_layout.auto_layout_data.space_between { - style.layout_style.justify_content = JustifyContent::SpaceBetween; + style.layout_style.justify_content = JustifyContent::SpaceBetween.into(); } is_widget_list = true; size_policy = extended_auto_layout.auto_layout_data.size_policy; @@ -1083,11 +1082,11 @@ fn visit_node( // we need to set our size depending on whether the size policy is hug or fixed. if is_widget_list { if size_policy == SizePolicy::Hug { - style.layout_style.position_type = PositionType::Relative; + style.layout_style.position_type = PositionType::Relative.into(); style.layout_style.width = DimensionProto::new_auto(); style.layout_style.height = DimensionProto::new_auto(); } else { - style.layout_style.position_type = PositionType::Absolute; + style.layout_style.position_type = PositionType::Absolute.into(); } } diff --git a/crates/figma_import/tests/layout-unit-tests.dcf b/crates/figma_import/tests/layout-unit-tests.dcf index b006dd75b262054ae6b5b9dbdbb04280ec91393f..88b04229059423aa99d7358c45811054a6f1f026 100644 GIT binary patch delta 3393 zcmb_eT})eL7(U-=fsVGUbZ3X3_Rzm|W1~5; zUwh8^p6~sh_kG^?{qP5NZh@T);i4=vE54LBG6rvBT%>6>+J;4YX)O~3ahD*-bZLXp z6G7lN{Sx_a9I-r(j==~Vl}VfkTbYQNRzF_xlsOtrd{23^N&E+J62~@MY0exe| zc-JLy+ZT5V!rOFdL$ke@BO5Q(c8B|}YPX5o&B_o`3fRz4zfvUH>b6o{V5$n1CEzUj z*C;6UblNyA*`Z;s#k9vq%g=aPaKlrIH`{yY-}pXR1vAsP>X~WgY=$xywoRIFJ5a$K z_$%PQ|An})?RsWD__@f+F;iPZ3yp-kH-|VeoRp=+7)dFlzkf@L9O{b)RpRe#d5%@0 zzpj1>^krv=o?MyG4y2oK!8mUHCwNein&q`rw(+S5rjF1}Cr@v+^Es|Vb; zC7Cg`$3bt2sP#G~pLMdtOsruCGnn^jI4W7Q%qP zD~J+0qeytIIB)T0=8D#eib>!f@X^}b7S(l^8b3-;@`0zrdo8sgV)9H(U6H-z^}Xy~ zne&!CA~WOnQk{gTwUC4vEBEC!>%9ob*mMG1;89S74!et1>hf4fRO6z(Da0x+ecfub zauo|RaJWiA05<+Rl#z=O<~*UHhpU(G;T zZeyF!7vDfzp@X$sXR&tzD-q?>`Fg>EPZqh z-2LGKi~M+4QI_JLz0HKxJkYBp>w%Dq@usB`Ji4D%WM`INl z>#giDoK9{cJbOBbQK>$s!1tx?t66AF6H}w*cwG+T=di@8@pqUzAXoSr^Z?;Sj~72} zXQ_Zu0Yx?4qp9OV&y|E)6Ch-fPb1 zQeG70sLb4`k187BT1o8EGyYO+V=3hIN(*;~`z_1|72MgXo~DSuF~Mh-(br;O3Wi$> zN~3?Srx#^lMBIPVC@EpsdU%8b-?U8+8n7<#Ky#r$hfT`*ChRUyYH)mJ$_C z5C$l*>-~hDG45SZUp6rh>e@X-&V4STV)_kEyQ?y%+K!8utd(#sCNnQC#~w*xJ!vxI zwOwO|>a}inFR7-=G_-RA4tGBy-LN3K6Fe5SyjzOt?;Ot?~CH2p=wr)`Jv55 zt>l`-d2;;H=vv9?ybCZiiL3TE_t1nvs6QV1;$MAUw_pGO delta 3238 zcmb`JZA@EL7{`11a{EGo7Rv3qz5=D|pis&R!qCBBC39?DVU7$2wS^VfbdF3Cb#H7Y zi!p9G_ga9U=w=cGj!#kE0kbnk%T(l+%h!W*@zZ8of|kJk=7(d{>s3gplkz zb}h%1-tswFJ1#0t!EFr}+JeY&)mkOk>Of)(kBC|hgDq6`V0jsnrXPINYnYSO#}{p0 zsZ}BT#CC1nu+h&RVQVycn0?VeWQ*70NTmz!R`Oc*XPz7uZ4OL5dm4=@JsexK@f%gI z5yBzptQ5i!#23!tYU8K3TP2eFo0$Mx4{^TKwcPm~{VJlw1(!L``M+GDDp7vEfPAjC zR?G)#^DNfHUv>W?#h#E!x4mDC6tmF(#KtC^3Yj?eqY#qEV1wCCU}$Tiw$H?B@O)c6 zy^0#EalNe-SJe5OQ4Zpv20y_Gt_Vv#DnxoqC}es>1{FBp?wt+sL^a#(5<=mcJ?DT$ z*)W^n%OnzMw?x9zkGSZrdV>jX@g+%a^|(L+0$4h^2G?7Rj9a3HPHGXv(oVi3Wys#8 z$ZkzzTjT2iq=m5fn;Y;1aaY+y&)wfFqPSIBY(NfLw7m@pQ5}_`59WmkLA%kGLDfl+%qt! z9;=2iPRp^ti<}NXXWN9%s0Q|N!)hoEnEY65HxLuD=j8bu}OsExabZpM6s(Sp}!Q0L0 za@geC=vO4w`u9&vrm*M{Q%no*CeD7hE42}$FMoT5&?gc^i$j*H_;~YZI^TX)*@*?+ zT^W#ttu%_1iqC-x-WV9axg(!)V7G(l_}aQ(nrxfDkC;n zo?g{!6xus9IZg5VnwO;2@h4uM z@VM!HbP?*}(b3Um?$tH|XlgaMjUxu7$Y}BCsfOa;ah0dc9hV5;=T3npu z3eLiRPR@~PoZg>o#8hx0v@R)9%OI!y&VZ9O3VhzH6eoQ(K5HpK;=uN0g(3XhSN{P@ Cm`O1J diff --git a/crates/figma_import/tests/layout_tests.rs b/crates/figma_import/tests/layout_tests.rs index 2ada07928..7f839c30b 100644 --- a/crates/figma_import/tests/layout_tests.rs +++ b/crates/figma_import/tests/layout_tests.rs @@ -25,8 +25,8 @@ use dc_bundle::definition::element::dimension_proto::Dimension; use dc_bundle::definition::element::DimensionProto; +use dc_bundle::definition::layout::LayoutSizing; use dc_bundle::legacy_definition::element::node::NodeQuery; -use dc_bundle::legacy_definition::layout::positioning::LayoutSizing; use dc_bundle::legacy_definition::view::view::{View, ViewData}; use dc_bundle::legacy_definition::{DesignComposeDefinition, DesignComposeDefinitionHeader}; use layout::LayoutManager; @@ -95,9 +95,9 @@ fn add_view_to_layout( } else { let mut fixed_view = view.clone(); fixed_view.style.layout_style.width = - DimensionProto::new_points(view.style.layout_style.bounding_box.width); + DimensionProto::new_points(view.style.layout_style.bounding_box().unwrap().width); fixed_view.style.layout_style.height = - DimensionProto::new_points(view.style.layout_style.bounding_box.height); + DimensionProto::new_points(view.style.layout_style.bounding_box().unwrap().height); manager .add_style( my_id, diff --git a/crates/layout/src/layout_manager.rs b/crates/layout/src/layout_manager.rs index eed0337c5..cd0f7047e 100644 --- a/crates/layout/src/layout_manager.rs +++ b/crates/layout/src/layout_manager.rs @@ -14,7 +14,7 @@ use crate::into_taffy::TryIntoTaffy; use crate::types::Layout; -use dc_bundle::legacy_definition::layout::layout_style::LayoutStyle; +use dc_bundle::definition::layout::LayoutStyle; use dc_bundle::Error; use log::{error, trace}; use serde::{Deserialize, Serialize}; diff --git a/crates/layout/src/layout_node.rs b/crates/layout/src/layout_node.rs index 480f8334d..24f6ea83f 100644 --- a/crates/layout/src/layout_node.rs +++ b/crates/layout/src/layout_node.rs @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use dc_bundle::legacy_definition::layout::layout_style::LayoutStyle; +use dc_bundle::definition::layout::LayoutStyle; use serde::{Deserialize, Serialize}; // A representation of a Figma node to register for layout. diff --git a/crates/layout/src/layout_style.rs b/crates/layout/src/layout_style.rs index 3da2b9500..12c5e5f21 100644 --- a/crates/layout/src/layout_style.rs +++ b/crates/layout/src/layout_style.rs @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -use crate::into_taffy::{IntoTaffy, TryIntoTaffy}; +use crate::into_taffy::TryIntoTaffy; use dc_bundle::definition::element::DimensionExt; -use dc_bundle::legacy_definition::layout::layout_style::LayoutStyle; +use dc_bundle::definition::layout::LayoutStyle; impl TryIntoTaffy for &LayoutStyle { type Error = dc_bundle::Error; @@ -26,14 +26,14 @@ impl TryIntoTaffy for &LayoutStyle { tstyle.flex_grow = self.flex_grow; tstyle.flex_shrink = self.flex_shrink; tstyle.flex_basis = (&self.flex_basis).try_into_taffy()?; - tstyle.gap.width = (&self.item_spacing).into_taffy(); - tstyle.gap.height = (&self.item_spacing).into_taffy(); + tstyle.gap.width = (&self.item_spacing).try_into_taffy()?; + tstyle.gap.height = (&self.item_spacing).try_into_taffy()?; - tstyle.align_content = Some((&self.align_content).into_taffy()); - tstyle.justify_content = Some((&self.justify_content).into_taffy()); - tstyle.align_items = Some((&self.align_items).into_taffy()); - tstyle.flex_direction = (&self.flex_direction).into_taffy(); - tstyle.align_self = (&self.align_self).into_taffy(); + tstyle.align_content = Some(self.align_content().try_into_taffy()?); + tstyle.justify_content = Some(self.justify_content().try_into_taffy()?); + tstyle.align_items = Some(self.align_items().try_into_taffy()?); + tstyle.flex_direction = self.flex_direction().try_into_taffy()?; + tstyle.align_self = self.align_self().try_into_taffy()?; tstyle.size.width = (&self.width).try_into_taffy()?; tstyle.size.height = (&self.height).try_into_taffy()?; @@ -46,17 +46,17 @@ impl TryIntoTaffy for &LayoutStyle { // account scale and rotation, and disregard min/max sizes. // TODO support this with non-fixed sizes also! if self.width.is_points()? { - tstyle.size.width = taffy::prelude::Dimension::Points(self.bounding_box.width); + tstyle.size.width = taffy::prelude::Dimension::Points(self.bounding_box()?.width); tstyle.min_size.width = taffy::prelude::Dimension::Auto; tstyle.max_size.width = taffy::prelude::Dimension::Auto; } if self.height.is_points()? { - tstyle.size.height = taffy::prelude::Dimension::Points(self.bounding_box.height); + tstyle.size.height = taffy::prelude::Dimension::Points(self.bounding_box()?.height); tstyle.min_size.height = taffy::prelude::Dimension::Auto; tstyle.max_size.height = taffy::prelude::Dimension::Auto; } - tstyle.position = (&self.position_type).into_taffy(); + tstyle.position = self.position_type().try_into_taffy()?; tstyle.inset.left = (&self.left).try_into_taffy()?; tstyle.inset.right = (&self.right).try_into_taffy()?; tstyle.inset.top = (&self.top).try_into_taffy()?; diff --git a/crates/layout/src/proto/layout_node.rs b/crates/layout/src/proto/layout_node.rs index 674b7980c..d8981518c 100644 --- a/crates/layout/src/proto/layout_node.rs +++ b/crates/layout/src/proto/layout_node.rs @@ -29,8 +29,7 @@ impl TryFrom for layout_node::LayoutNode { child_index: proto.child_index, style: proto .style - .ok_or(dc_bundle::Error::MissingFieldError { field: "style".to_string() })? - .try_into()?, + .ok_or(dc_bundle::Error::MissingFieldError { field: "style".to_string() })?, name: proto.name, use_measure_func: proto.use_measure_func, fixed_width: proto.fixed_width, diff --git a/crates/layout/src/styles.rs b/crates/layout/src/styles.rs index 93ce5ec9f..ea5758f8a 100644 --- a/crates/layout/src/styles.rs +++ b/crates/layout/src/styles.rs @@ -12,90 +12,125 @@ // See the License for the specific language governing permissions and // limitations under the License. -use crate::into_taffy::IntoTaffy; -use dc_bundle::legacy_definition::layout::positioning::ItemSpacing; -use dc_bundle::legacy_definition::layout::positioning::{ - AlignContent, AlignItems, AlignSelf, FlexDirection, JustifyContent, PositionType, +use crate::into_taffy::TryIntoTaffy; +use dc_bundle::definition::layout::{ + item_spacing, AlignContent, AlignItems, AlignSelf, FlexDirection, ItemSpacing, JustifyContent, + PositionType, }; +use dc_bundle::Error; use taffy::prelude as taffy; -impl IntoTaffy for &AlignItems { - fn into_taffy(self) -> taffy::AlignItems { +impl TryIntoTaffy for AlignItems { + type Error = dc_bundle::Error; + fn try_into_taffy(self) -> Result { match self { - AlignItems::Center => taffy::AlignItems::Center, - AlignItems::FlexStart => taffy::AlignItems::FlexStart, - AlignItems::FlexEnd => taffy::AlignItems::FlexEnd, - AlignItems::Baseline => taffy::AlignItems::Baseline, - AlignItems::Stretch => taffy::AlignItems::Stretch, + AlignItems::Center => Ok(taffy::AlignItems::Center), + AlignItems::FlexStart => Ok(taffy::AlignItems::FlexStart), + AlignItems::FlexEnd => Ok(taffy::AlignItems::FlexEnd), + AlignItems::Baseline => Ok(taffy::AlignItems::Baseline), + AlignItems::Stretch => Ok(taffy::AlignItems::Stretch), + AlignItems::Unspecified => { + Err(Error::UnknownEnumVariant { enum_name: "AlignItems".to_string() }) + } } } } -impl IntoTaffy> for &AlignSelf { - fn into_taffy(self) -> Option { +impl TryIntoTaffy> for AlignSelf { + type Error = dc_bundle::Error; + fn try_into_taffy(self) -> Result, Self::Error> { match self { - AlignSelf::Auto => None, - AlignSelf::FlexStart => Some(taffy::AlignItems::FlexStart), - AlignSelf::FlexEnd => Some(taffy::AlignItems::FlexEnd), - AlignSelf::Center => Some(taffy::AlignItems::Center), - AlignSelf::Baseline => Some(taffy::AlignItems::Baseline), - AlignSelf::Stretch => Some(taffy::AlignItems::Stretch), + AlignSelf::Auto => Ok(None), + AlignSelf::FlexStart => Ok(Some(taffy::AlignItems::FlexStart)), + AlignSelf::FlexEnd => Ok(Some(taffy::AlignItems::FlexEnd)), + AlignSelf::Center => Ok(Some(taffy::AlignItems::Center)), + AlignSelf::Baseline => Ok(Some(taffy::AlignItems::Baseline)), + AlignSelf::Stretch => Ok(Some(taffy::AlignItems::Stretch)), + AlignSelf::Unspecified => { + Err(Error::UnknownEnumVariant { enum_name: "AlignSelf".to_string() }) + } } } } -impl IntoTaffy for &AlignContent { - fn into_taffy(self) -> taffy::AlignContent { +impl TryIntoTaffy for AlignContent { + type Error = dc_bundle::Error; + fn try_into_taffy(self) -> Result { match self { - AlignContent::Center => taffy::AlignContent::Center, - AlignContent::FlexStart => taffy::AlignContent::FlexStart, - AlignContent::FlexEnd => taffy::AlignContent::FlexEnd, - AlignContent::SpaceAround => taffy::AlignContent::SpaceAround, - AlignContent::SpaceBetween => taffy::AlignContent::SpaceBetween, - AlignContent::Stretch => taffy::AlignContent::Stretch, + AlignContent::Center => Ok(taffy::AlignContent::Center), + AlignContent::FlexStart => Ok(taffy::AlignContent::FlexStart), + AlignContent::FlexEnd => Ok(taffy::AlignContent::FlexEnd), + AlignContent::SpaceAround => Ok(taffy::AlignContent::SpaceAround), + AlignContent::SpaceBetween => Ok(taffy::AlignContent::SpaceBetween), + AlignContent::Stretch => Ok(taffy::AlignContent::Stretch), + AlignContent::Unspecified => { + Err(Error::UnknownEnumVariant { enum_name: "AlignContent".to_string() }) + } } } } -impl IntoTaffy for &FlexDirection { - fn into_taffy(self) -> taffy::FlexDirection { +impl TryIntoTaffy for FlexDirection { + type Error = dc_bundle::Error; + fn try_into_taffy(self) -> Result { match self { - FlexDirection::Row => taffy::FlexDirection::Row, - FlexDirection::Column => taffy::FlexDirection::Column, - FlexDirection::RowReverse => taffy::FlexDirection::RowReverse, - FlexDirection::ColumnReverse => taffy::FlexDirection::ColumnReverse, - FlexDirection::None => taffy::FlexDirection::Row, + FlexDirection::Row => Ok(taffy::FlexDirection::Row), + FlexDirection::Column => Ok(taffy::FlexDirection::Column), + FlexDirection::RowReverse => Ok(taffy::FlexDirection::ColumnReverse), + FlexDirection::ColumnReverse => Ok(taffy::FlexDirection::ColumnReverse), + FlexDirection::None => Ok(taffy::FlexDirection::Row), + FlexDirection::Unspecified => { + Err(Error::UnknownEnumVariant { enum_name: "FlexDirection".to_string() }) + } } } } -impl IntoTaffy for &JustifyContent { - fn into_taffy(self) -> taffy::JustifyContent { +impl TryIntoTaffy for JustifyContent { + type Error = dc_bundle::Error; + fn try_into_taffy(self) -> Result { match self { - JustifyContent::Center => taffy::JustifyContent::Center, - JustifyContent::FlexStart => taffy::JustifyContent::FlexStart, - JustifyContent::FlexEnd => taffy::JustifyContent::FlexEnd, - JustifyContent::SpaceAround => taffy::JustifyContent::SpaceAround, - JustifyContent::SpaceBetween => taffy::JustifyContent::SpaceBetween, - JustifyContent::SpaceEvenly => taffy::JustifyContent::SpaceEvenly, + JustifyContent::Center => Ok(taffy::JustifyContent::Center), + JustifyContent::FlexStart => Ok(taffy::JustifyContent::FlexStart), + JustifyContent::FlexEnd => Ok(taffy::JustifyContent::FlexEnd), + JustifyContent::SpaceAround => Ok(taffy::JustifyContent::SpaceAround), + JustifyContent::SpaceBetween => Ok(taffy::JustifyContent::SpaceBetween), + JustifyContent::SpaceEvenly => Ok(taffy::JustifyContent::SpaceEvenly), + JustifyContent::Unspecified => { + Err(Error::UnknownEnumVariant { enum_name: "JustifyContent".to_string() }) + } } } } -impl IntoTaffy for &PositionType { - fn into_taffy(self) -> taffy::Position { +impl TryIntoTaffy for PositionType { + type Error = dc_bundle::Error; + fn try_into_taffy(self) -> Result { match self { - PositionType::Absolute => taffy::Position::Absolute, - PositionType::Relative => taffy::Position::Relative, + PositionType::Absolute => Ok(taffy::Position::Absolute), + PositionType::Relative => Ok(taffy::Position::Relative), + PositionType::Unspecified => { + Err(Error::UnknownEnumVariant { enum_name: "PositionType".to_string() }) + } } } } - -impl IntoTaffy for &ItemSpacing { - fn into_taffy(self) -> taffy::LengthPercentage { +impl TryIntoTaffy for &Option { + type Error = dc_bundle::Error; + fn try_into_taffy(self) -> Result { match self { - ItemSpacing::Fixed(s) => taffy::LengthPercentage::Points(*s as f32), - ItemSpacing::Auto(..) => taffy::LengthPercentage::Points(0.0), + Some(spacing) => match spacing.item_spacing_type { + Some(item_spacing::ItemSpacingType::Fixed(s)) => { + Ok(taffy::LengthPercentage::Points(s as f32)) + } + Some(item_spacing::ItemSpacingType::Auto(..)) => { + Ok(taffy::LengthPercentage::Points(0.0)) + } + None => Err(dc_bundle::Error::UnknownEnumVariant { + enum_name: "ItemSpacing".to_string(), + }), + }, + None => Err(Error::MissingFieldError { field: "ItemSpacing".to_string() }), } } } diff --git a/designcompose/src/main/assets/figma/DesignSwitcherDoc_Ljph4e3sC0lHcynfXpoh9f.dcf b/designcompose/src/main/assets/figma/DesignSwitcherDoc_Ljph4e3sC0lHcynfXpoh9f.dcf index e0eae7a2df7779fb07f493303327f286851d87e5..dff4715da54d95c1c7aaf34a45c64495fe4b2558 100644 GIT binary patch delta 46713 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∈+SqfeN(xb*@4Z_8`bT6@OZzT75{)V}@cZhuUG! zyI`ugo)U7iRhma=L?6_c{TZqVR~ zYi`eVK_l?4Z^MS$pO=E5<1@@~{e!nn*m-0HRFtX4Q%B;w?$z(A_ZsUEBO!Jp z>mAMYSuZl{ThL?H%$Wt#*T7BjYzzzuvfRblqX$;KEFo$FV-8}8UTq~rYhg&TQvn@r zidWg93G$|dh&LCY*-CE_OV`&4bjAi>b81T2*+!GIYR}bGR&A5{S+(bHWLE8kI?bx7 z#cKuetR-D6K;=Qi&!{+v6WHrsk(NNl;cEhD)RLyMA|$bMhlGNf@z4=$oCyuLWDJlL zzd{hQJ7=}ccKnAdUM9vr*_}JJcldid``_C-{yiJ6L|77GTeu|v`iEPB;oWdcV?GhW zA3l$;gf`F4Z0|t6eH%NOb{*}1Z`+Aeh=rCBmIiPj(o!Gd@o&Lx9DlbB_K;cP;EQle z6Sy_X5`yRomKM+?5`W`-q$LP;@W1^YX=&cPgTp2|WIB9(b_d6QXbWQ^EDd2$q$MD@ zU8Z3%7dNv=3qPFfwvZKt-?}^;H`xFe7SblmfkvB5n9CQ1O9_Gr;g&F%5M{~xe|90Q Ac>n+a delta 42760 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 NId)8kyhi5y{|BFbeT@JB diff --git a/designcompose/src/main/java/com/android/designcompose/DesignFrame.kt b/designcompose/src/main/java/com/android/designcompose/DesignFrame.kt index 13bf42f17..f560d3d4f 100644 --- a/designcompose/src/main/java/com/android/designcompose/DesignFrame.kt +++ b/designcompose/src/main/java/com/android/designcompose/DesignFrame.kt @@ -32,7 +32,6 @@ import androidx.compose.foundation.lazy.grid.LazyHorizontalGrid import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect -import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -54,10 +53,11 @@ import androidx.tracing.trace import com.android.designcompose.proto.getDim import com.android.designcompose.proto.start import com.android.designcompose.proto.top +import com.android.designcompose.proto.type import com.android.designcompose.serdegen.Dimension import com.android.designcompose.serdegen.GridLayoutType import com.android.designcompose.serdegen.GridSpan -import com.android.designcompose.serdegen.ItemSpacing +import com.android.designcompose.serdegen.ItemSpacingType import com.android.designcompose.serdegen.NodeQuery import com.android.designcompose.serdegen.View import com.android.designcompose.serdegen.ViewData @@ -454,7 +454,8 @@ internal fun DesignFrame( // for the first frame and then in another on the second frame after the main axis // size has been set. val showInitContent = - (gridMainAxisSize <= 0 && layoutInfo.mainAxisSpacing is ItemSpacing.Auto) + (gridMainAxisSize <= 0 && + layoutInfo.mainAxisSpacing.type() is ItemSpacingType.Auto) if (showInitContent) items( count = 1, @@ -563,9 +564,7 @@ internal fun DesignFrame( ) { val columnCount = calculateColumnRowCount(layoutInfo, gridMainAxisSize) val horizontalSpacing = - if (layoutInfo.mainAxisSpacing is ItemSpacing.Fixed) - layoutInfo.mainAxisSpacing.value - else 0 + (layoutInfo.mainAxisSpacing.type() as? ItemSpacingType.Fixed)?.value ?: 0 val verticalSpacing = layoutInfo.crossAxisSpacing DesignParentLayout(rootParentLayoutInfo) { @@ -588,15 +587,17 @@ internal fun DesignFrame( }, horizontalArrangement = Arrangement.spacedBy( - (if (layoutInfo.mainAxisSpacing is ItemSpacing.Fixed) { - layoutInfo.mainAxisSpacing.value - } else if (layoutInfo.mainAxisSpacing is ItemSpacing.Auto) { - if (columnCount > 1) - (gridMainAxisSize - - (layoutInfo.mainAxisSpacing.field1 * columnCount)) / - (columnCount - 1) - else layoutInfo.mainAxisSpacing.field0 - } else horizontalSpacing) + (when (val spacing = layoutInfo.mainAxisSpacing.type()) { + is ItemSpacingType.Fixed -> spacing.value + is ItemSpacingType.Auto -> { + if (columnCount > 1) + (gridMainAxisSize - + (spacing.value.height * columnCount)) / + (columnCount - 1) + else spacing.value.width + } + else -> horizontalSpacing + }) .dp ), verticalArrangement = Arrangement.spacedBy(verticalSpacing.dp), @@ -616,9 +617,8 @@ internal fun DesignFrame( val rowCount = calculateColumnRowCount(layoutInfo, gridMainAxisSize) val horizontalSpacing = layoutInfo.crossAxisSpacing val verticalSpacing = - if (layoutInfo.mainAxisSpacing is ItemSpacing.Fixed) - layoutInfo.mainAxisSpacing.value - else 0 + (layoutInfo.mainAxisSpacing.type() as? ItemSpacingType.Fixed)?.value ?: 0 + DesignParentLayout(rootParentLayoutInfo) { LazyHorizontalGrid( modifier = layoutInfo.selfModifier.then(gridSizeModifier).then(m), @@ -640,16 +640,17 @@ internal fun DesignFrame( horizontalArrangement = Arrangement.spacedBy(horizontalSpacing.dp), verticalArrangement = Arrangement.spacedBy( - (if (layoutInfo.mainAxisSpacing is ItemSpacing.Fixed) { - layoutInfo.mainAxisSpacing.value - } else if (layoutInfo.mainAxisSpacing is ItemSpacing.Auto) { - - if (rowCount > 1) - (gridMainAxisSize - - (layoutInfo.mainAxisSpacing.field1 * rowCount)) / - (rowCount - 1) - else layoutInfo.mainAxisSpacing.field0 - } else verticalSpacing) + (when (val spacing = layoutInfo.mainAxisSpacing.type()) { + is ItemSpacingType.Fixed -> spacing.value + is ItemSpacingType.Auto -> { + if (rowCount > 1) + (gridMainAxisSize - + (spacing.value.height * rowCount)) / + (rowCount - 1) + else spacing.value.width + } + else -> verticalSpacing + }) .dp ), userScrollEnabled = layoutInfo.scrollingEnabled, diff --git a/designcompose/src/main/java/com/android/designcompose/DesignView.kt b/designcompose/src/main/java/com/android/designcompose/DesignView.kt index b1da5874f..629845428 100644 --- a/designcompose/src/main/java/com/android/designcompose/DesignView.kt +++ b/designcompose/src/main/java/com/android/designcompose/DesignView.kt @@ -496,19 +496,19 @@ internal fun DesignView( // Only add scroll modifiers if not a grid layout because grid layout adds its own scrolling if (viewLayoutInfo !is LayoutInfoGrid && viewLayoutInfo !is LayoutInfoAbsolute) { when (view.scroll_info.overflow) { - is OverflowDirection.VERTICAL_SCROLLING -> { + is OverflowDirection.VerticalScrolling -> { m = Modifier.verticalScroll(rememberScrollState()).then(m) } - is OverflowDirection.HORIZONTAL_SCROLLING -> { + is OverflowDirection.HorizontalScrolling -> { m = Modifier.horizontalScroll(rememberScrollState()).then(m) } - is OverflowDirection.HORIZONTAL_AND_VERTICAL_SCROLLING -> { + is OverflowDirection.HorizontalAndVerticalScrolling -> { m = Modifier.horizontalScroll(rememberScrollState()) .verticalScroll(rememberScrollState()) .then(m) } - is OverflowDirection.NONE -> {} + is OverflowDirection.None -> {} } } diff --git a/designcompose/src/main/java/com/android/designcompose/Layout.kt b/designcompose/src/main/java/com/android/designcompose/Layout.kt index 8d745f411..5c6875709 100644 --- a/designcompose/src/main/java/com/android/designcompose/Layout.kt +++ b/designcompose/src/main/java/com/android/designcompose/Layout.kt @@ -38,10 +38,13 @@ import androidx.compose.ui.text.ParagraphIntrinsics import androidx.compose.ui.unit.Constraints import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.dp +import com.android.designcompose.proto.alignItemsFromInt import com.android.designcompose.proto.bottom import com.android.designcompose.proto.end +import com.android.designcompose.proto.justifyContentFromInt import com.android.designcompose.proto.start import com.android.designcompose.proto.top +import com.android.designcompose.proto.type import com.android.designcompose.serdegen.AlignItems import com.android.designcompose.serdegen.AlignSelf import com.android.designcompose.serdegen.Dimension @@ -49,6 +52,7 @@ import com.android.designcompose.serdegen.DimensionRect import com.android.designcompose.serdegen.GridLayoutType import com.android.designcompose.serdegen.GridSpan import com.android.designcompose.serdegen.ItemSpacing +import com.android.designcompose.serdegen.ItemSpacingType import com.android.designcompose.serdegen.JustifyContent import com.android.designcompose.serdegen.Layout import com.android.designcompose.serdegen.LayoutTransform @@ -220,9 +224,9 @@ internal class LayoutInfoGrid( ) : SimplifiedLayoutInfo(selfModifier) internal fun itemSpacingAbs(itemSpacing: ItemSpacing): Int { - return when (itemSpacing) { - is ItemSpacing.Fixed -> itemSpacing.value - is ItemSpacing.Auto -> itemSpacing.field0 + return when (val type = itemSpacing.type()) { + is ItemSpacingType.Fixed -> type.value + is ItemSpacingType.Auto -> type.value.width else -> 0 } } @@ -243,7 +247,7 @@ internal fun calcLayoutInfo( val gridLayout = style.node_style.grid_layout.get() val isHorizontalLayout = gridLayout is GridLayoutType.Horizontal val isVerticalLayout = gridLayout is GridLayoutType.Vertical - val itemSpacing = itemSpacingAbs(style.layout_style.item_spacing) + val itemSpacing = itemSpacingAbs(style.layout_style.item_spacing.get()) val marginModifier = Modifier.padding( if (style.layout_style.padding.start is Dimension.Points) @@ -262,7 +266,7 @@ internal fun calcLayoutInfo( if (isHorizontalLayout) { return LayoutInfoRow( arrangement = - when (style.layout_style.justify_content) { + when (justifyContentFromInt(style.layout_style.justify_content)) { is JustifyContent.FlexStart -> if (itemSpacing != 0) Arrangement.spacedBy(itemSpacing.dp) else Arrangement.Start @@ -280,7 +284,7 @@ internal fun calcLayoutInfo( else -> Arrangement.Start }, alignment = - when (style.layout_style.align_items) { + when (alignItemsFromInt(style.layout_style.align_items)) { is AlignItems.FlexStart -> Alignment.Top is AlignItems.Center -> Alignment.CenterVertically is AlignItems.FlexEnd -> Alignment.Bottom @@ -293,7 +297,7 @@ internal fun calcLayoutInfo( } else if (isVerticalLayout) { return LayoutInfoColumn( arrangement = - when (style.layout_style.justify_content) { + when (justifyContentFromInt(style.layout_style.justify_content)) { is JustifyContent.FlexStart -> if (itemSpacing != 0) Arrangement.spacedBy(itemSpacing.dp) else Arrangement.Top @@ -311,7 +315,7 @@ internal fun calcLayoutInfo( else -> Arrangement.Top }, alignment = - when (style.layout_style.align_items) { + when (alignItemsFromInt(style.layout_style.align_items)) { is AlignItems.FlexStart -> Alignment.Start is AlignItems.Center -> Alignment.CenterHorizontally is AlignItems.FlexEnd -> Alignment.End @@ -327,15 +331,15 @@ internal fun calcLayoutInfo( gridLayout is GridLayoutType.AutoColumns val scrollingEnabled = when (view.scroll_info.overflow) { - is OverflowDirection.VERTICAL_SCROLLING -> isColumnLayout - is OverflowDirection.HORIZONTAL_SCROLLING -> !isColumnLayout - is OverflowDirection.HORIZONTAL_AND_VERTICAL_SCROLLING -> true + is OverflowDirection.VerticalScrolling -> isColumnLayout + is OverflowDirection.HorizontalScrolling -> !isColumnLayout + is OverflowDirection.HorizontalAndVerticalScrolling -> true else -> false } return LayoutInfoGrid( layout = style.node_style.grid_layout.get(), minColumnRowSize = style.node_style.grid_adaptive_min_size, - mainAxisSpacing = style.layout_style.item_spacing, + mainAxisSpacing = style.layout_style.item_spacing.get(), crossAxisSpacing = style.node_style.cross_axis_item_spacing.toInt(), // TODO support these other alignments? /* @@ -368,13 +372,13 @@ internal fun calcLayoutInfo( var horizontalScroll = false var verticalScroll = false when (view.scroll_info.overflow) { - is OverflowDirection.VERTICAL_SCROLLING -> { + is OverflowDirection.VerticalScrolling -> { verticalScroll = true } - is OverflowDirection.HORIZONTAL_SCROLLING -> { + is OverflowDirection.HorizontalScrolling -> { horizontalScroll = true } - is OverflowDirection.HORIZONTAL_AND_VERTICAL_SCROLLING -> { + is OverflowDirection.HorizontalAndVerticalScrolling -> { // Currently we don't support both horizontal and vertical scrolling so disable both verticalScroll = false horizontalScroll = false diff --git a/designcompose/src/main/java/com/android/designcompose/Utils.kt b/designcompose/src/main/java/com/android/designcompose/Utils.kt index 7a4fd452c..96eaa4d47 100644 --- a/designcompose/src/main/java/com/android/designcompose/Utils.kt +++ b/designcompose/src/main/java/com/android/designcompose/Utils.kt @@ -51,25 +51,34 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import com.android.designcompose.proto.StrokeAlignType import com.android.designcompose.proto.WindingRuleType +import com.android.designcompose.proto.alignContentFromInt +import com.android.designcompose.proto.alignItemsFromInt +import com.android.designcompose.proto.alignSelfFromInt import com.android.designcompose.proto.end +import com.android.designcompose.proto.flexDirectionFromInt import com.android.designcompose.proto.get import com.android.designcompose.proto.getDim import com.android.designcompose.proto.getType import com.android.designcompose.proto.isDefault import com.android.designcompose.proto.isType +import com.android.designcompose.proto.justifyContentFromInt import com.android.designcompose.proto.newDimensionProtoUndefined import com.android.designcompose.proto.newDimensionRectPointsZero import com.android.designcompose.proto.newFontWeight +import com.android.designcompose.proto.positionTypeFromInt import com.android.designcompose.proto.scaleModeFromInt import com.android.designcompose.proto.start import com.android.designcompose.proto.strokeAlignTypeToInt +import com.android.designcompose.proto.toInt import com.android.designcompose.proto.toOptDimProto import com.android.designcompose.proto.top +import com.android.designcompose.proto.type import com.android.designcompose.proto.windingRuleFromInt import com.android.designcompose.serdegen.AffineTransform import com.android.designcompose.serdegen.AlignContent import com.android.designcompose.serdegen.AlignItems import com.android.designcompose.serdegen.AlignSelf +import com.android.designcompose.serdegen.Auto import com.android.designcompose.serdegen.Background import com.android.designcompose.serdegen.BackgroundType import com.android.designcompose.serdegen.BlendMode @@ -81,6 +90,7 @@ import com.android.designcompose.serdegen.FlexWrap import com.android.designcompose.serdegen.FontStretch import com.android.designcompose.serdegen.FontStyle import com.android.designcompose.serdegen.ItemSpacing +import com.android.designcompose.serdegen.ItemSpacingType import com.android.designcompose.serdegen.JustifyContent import com.android.designcompose.serdegen.Layout import com.android.designcompose.serdegen.LayoutSizing @@ -423,13 +433,13 @@ internal fun mergeStyles(base: ViewStyle, override: ViewStyle): ViewStyle { base.node_style.display_type } layoutStyle.position_type = - if (override.layout_style.position_type !is PositionType.Relative) { + if (positionTypeFromInt(override.layout_style.position_type) !is PositionType.Relative) { override.layout_style.position_type } else { base.layout_style.position_type } layoutStyle.flex_direction = - if (override.layout_style.flex_direction !is FlexDirection.Row) { + if (flexDirectionFromInt(override.layout_style.flex_direction) !is FlexDirection.Row) { override.layout_style.flex_direction } else { base.layout_style.flex_direction @@ -485,25 +495,28 @@ internal fun mergeStyles(base: ViewStyle, override: ViewStyle): ViewStyle { base.node_style.overflow_node_name } layoutStyle.align_items = - if (override.layout_style.align_items !is AlignItems.Stretch) { + if (alignItemsFromInt(override.layout_style.align_items) !is AlignItems.Stretch) { override.layout_style.align_items } else { base.layout_style.align_items } layoutStyle.align_self = - if (override.layout_style.align_self !is AlignSelf.Auto) { + if (alignSelfFromInt(override.layout_style.align_self) !is AlignSelf.Auto) { override.layout_style.align_self } else { base.layout_style.align_self } layoutStyle.align_content = - if (override.layout_style.align_content !is AlignContent.Stretch) { + if (alignContentFromInt(override.layout_style.align_content) !is AlignContent.Stretch) { override.layout_style.align_content } else { base.layout_style.align_content } layoutStyle.justify_content = - if (override.layout_style.justify_content !is JustifyContent.FlexStart) { + if ( + justifyContentFromInt(override.layout_style.justify_content) + !is JustifyContent.FlexStart + ) { override.layout_style.justify_content } else { base.layout_style.justify_content @@ -546,10 +559,10 @@ internal fun mergeStyles(base: ViewStyle, override: ViewStyle): ViewStyle { base.layout_style.padding } fun ItemSpacing.isDefault(): Boolean { - return this is ItemSpacing.Fixed && this.value == 0 + return (type() as? ItemSpacingType.Fixed)?.value == 0 } layoutStyle.item_spacing = - if (!override.layout_style.item_spacing.isDefault()) { + if (!override.layout_style.item_spacing.get().isDefault()) { override.layout_style.item_spacing } else { base.layout_style.item_spacing @@ -580,21 +593,21 @@ internal fun mergeStyles(base: ViewStyle, override: ViewStyle): ViewStyle { } layoutStyle.bounding_box = if ( - override.layout_style.bounding_box.width != 0.0f || - override.layout_style.bounding_box.height != 0.0f + override.layout_style.bounding_box.get().width != 0.0f || + override.layout_style.bounding_box.get().height != 0.0f ) { override.layout_style.bounding_box } else { base.layout_style.bounding_box } nodeStyle.horizontal_sizing = - if (override.node_style.horizontal_sizing !is LayoutSizing.FIXED) { + if (override.node_style.horizontal_sizing !is LayoutSizing.Fixed) { override.node_style.horizontal_sizing } else { base.node_style.horizontal_sizing } nodeStyle.vertical_sizing = - if (override.node_style.vertical_sizing !is LayoutSizing.FIXED) { + if (override.node_style.vertical_sizing !is LayoutSizing.Fixed) { override.node_style.vertical_sizing } else { base.node_style.vertical_sizing @@ -690,23 +703,23 @@ internal fun LayoutStyle.asBuilder(): LayoutStyle.Builder { internal fun defaultLayoutStyle(): LayoutStyle.Builder { val builder = LayoutStyle.Builder() - builder.position_type = PositionType.Relative() - builder.flex_direction = FlexDirection.Row() - builder.align_items = AlignItems.FlexStart() - builder.align_self = AlignSelf.Auto() - builder.align_content = AlignContent.FlexStart() - builder.justify_content = JustifyContent.FlexStart() + builder.position_type = PositionType.Relative().toInt() + builder.flex_direction = FlexDirection.Row().toInt() + builder.align_items = AlignItems.FlexStart().toInt() + builder.align_self = AlignSelf.Auto().toInt() + builder.align_content = AlignContent.FlexStart().toInt() + builder.justify_content = JustifyContent.FlexStart().toInt() builder.top = newDimensionProtoUndefined() builder.left = newDimensionProtoUndefined() builder.bottom = newDimensionProtoUndefined() builder.right = newDimensionProtoUndefined() builder.margin = newDimensionRectPointsZero() builder.padding = newDimensionRectPointsZero() - builder.item_spacing = ItemSpacing.Auto(0, 0) + builder.item_spacing = Optional.of(ItemSpacing(Optional.of(ItemSpacingType.Auto(Auto(0, 0))))) builder.flex_grow = 0.0f builder.flex_shrink = 0.0f builder.flex_basis = newDimensionProtoUndefined() - builder.bounding_box = com.android.designcompose.serdegen.Size(0f, 0f) + builder.bounding_box = Optional.of(com.android.designcompose.serdegen.Size(0f, 0f)) builder.width = newDimensionProtoUndefined() builder.height = newDimensionProtoUndefined() builder.min_width = newDimensionProtoUndefined() @@ -806,8 +819,8 @@ internal fun defaultNodeStyle(): NodeStyle.Builder { builder.overflow_node_id = Optional.empty() builder.overflow_node_name = Optional.empty() builder.cross_axis_item_spacing = 0f - builder.horizontal_sizing = LayoutSizing.HUG() - builder.vertical_sizing = LayoutSizing.HUG() + builder.horizontal_sizing = LayoutSizing.Hug() + builder.vertical_sizing = LayoutSizing.Hug() builder.aspect_ratio = com.android.designcompose.serdegen.Number.Undefined() builder.pointer_events = PointerEvents.Auto() builder.meter_data = Optional.empty() @@ -839,11 +852,11 @@ internal fun ViewStyle.externalLayoutData(): ExternalLayoutData { layout_style.max_width.getDim(), layout_style.max_height.getDim(), node_style.node_size, - layout_style.bounding_box, + layout_style.bounding_box.get(), layout_style.flex_grow, layout_style.flex_basis.getDim(), - layout_style.align_self, - layout_style.position_type, + alignSelfFromInt(layout_style.align_self), + positionTypeFromInt(layout_style.position_type), node_style.transform, node_style.relative_transform, ) @@ -860,7 +873,7 @@ internal fun ViewStyle.withExternalLayoutData(data: ExternalLayoutData): ViewSty layoutStyle.bottom = data.bottom.toOptDimProto() layoutStyle.right = data.right.toOptDimProto() nodeStyle.node_size = data.nodeSize - layoutStyle.bounding_box = data.boundingBox + layoutStyle.bounding_box = Optional.of(data.boundingBox) layoutStyle.width = data.width.toOptDimProto() layoutStyle.height = data.height.toOptDimProto() @@ -870,8 +883,8 @@ internal fun ViewStyle.withExternalLayoutData(data: ExternalLayoutData): ViewSty layoutStyle.max_height = data.maxHeight.toOptDimProto() layoutStyle.flex_grow = data.flexGrow layoutStyle.flex_basis = data.flexBasis.toOptDimProto() - layoutStyle.align_self = data.alignSelf - layoutStyle.position_type = data.positionType + layoutStyle.align_self = data.alignSelf.toInt() + layoutStyle.position_type = data.positionType.toInt() nodeStyle.transform = data.transform nodeStyle.relative_transform = data.relativeTransform @@ -953,7 +966,8 @@ internal fun View.isMask(): Boolean { // Second, the position_type is relative, which is only set if the widget layout parameters are set // to hug contents. internal fun View.useInfiniteConstraints(): Boolean { - if (style.layout_style.position_type !is PositionType.Relative) return false + if (positionTypeFromInt(style.layout_style.position_type) !is PositionType.Relative) + return false if (data !is ViewData.Container) return false @@ -1610,7 +1624,7 @@ internal fun com.android.designcompose.serdegen.Path.log() { // passed into it. internal fun ViewStyle.isAutoWidthText() = layout_style.width.getDim() is Dimension.Auto && - node_style.horizontal_sizing !is LayoutSizing.FILL + node_style.horizontal_sizing !is LayoutSizing.Fill // Return the size of a node used to render the node. internal fun getNodeRenderSize( diff --git a/designcompose/src/main/java/com/android/designcompose/proto/IntoProto.kt b/designcompose/src/main/java/com/android/designcompose/proto/IntoProto.kt index fa78ce4ee..f5d5406f3 100644 --- a/designcompose/src/main/java/com/android/designcompose/proto/IntoProto.kt +++ b/designcompose/src/main/java/com/android/designcompose/proto/IntoProto.kt @@ -34,8 +34,7 @@ import com.android.designcompose.serdegen.AlignItems import com.android.designcompose.serdegen.AlignSelf import com.android.designcompose.serdegen.FlexDirection import com.android.designcompose.serdegen.ItemSpacing -import com.android.designcompose.serdegen.ItemSpacing.Auto -import com.android.designcompose.serdegen.ItemSpacing.Fixed +import com.android.designcompose.serdegen.ItemSpacingType import com.android.designcompose.serdegen.JustifyContent import com.android.designcompose.serdegen.LayoutNode import com.android.designcompose.serdegen.LayoutNodeList @@ -68,11 +67,11 @@ internal fun LayoutNodeList.intoProto() = layoutNodeList { } internal fun ItemSpacing.intoProto() = itemSpacing { - when (val s = this@intoProto) { - is Fixed -> fixed = s.value - is Auto -> auto = auto { - width = s.field0 - height = s.field1 + when (val s = this@intoProto.type()) { + is ItemSpacingType.Fixed -> fixed = s.value + is ItemSpacingType.Auto -> auto = auto { + width = s.value.width + height = s.value.height } else -> throw IllegalArgumentException("Unknown ItemSpacing: $this") // Should never happen. } @@ -155,7 +154,7 @@ internal fun LayoutStyle.intoProto() = layoutStyle { s.margin.orElseThrow { NoSuchFieldException("Malformed data: margin unset") }.intoProto() padding = s.padding.orElseThrow { NoSuchFieldException("Malformed data: padding unset") }.intoProto() - itemSpacing = s.item_spacing.intoProto() + itemSpacing = s.item_spacing.get().intoProto() top = s.top.getDim().intoProto() left = s.left.getDim().intoProto() bottom = s.bottom.getDim().intoProto() @@ -166,14 +165,14 @@ internal fun LayoutStyle.intoProto() = layoutStyle { maxWidth = s.max_width.getDim().intoProto() minHeight = s.min_height.getDim().intoProto() maxHeight = s.max_height.getDim().intoProto() - boundingBox = s.bounding_box.intoProto() + boundingBox = s.bounding_box.get().intoProto() flexGrow = s.flex_grow flexShrink = s.flex_shrink flexBasis = s.flex_basis.getDim().intoProto() - alignSelf = s.align_self.intoProto() - alignContent = s.align_content.intoProto() - alignItems = s.align_items.intoProto() - flexDirection = s.flex_direction.intoProto() - justifyContent = s.justify_content.intoProto() - positionType = s.position_type.intoProto() + alignSelf = alignSelfFromInt(s.align_self).intoProto() + alignContent = alignContentFromInt(s.align_content).intoProto() + alignItems = alignItemsFromInt(s.align_items).intoProto() + flexDirection = flexDirectionFromInt(s.flex_direction).intoProto() + justifyContent = justifyContentFromInt(s.justify_content).intoProto() + positionType = positionTypeFromInt(s.position_type).intoProto() } diff --git a/designcompose/src/main/java/com/android/designcompose/proto/IntoSerde.kt b/designcompose/src/main/java/com/android/designcompose/proto/IntoSerde.kt index efeb9f1e7..0a6c917b2 100644 --- a/designcompose/src/main/java/com/android/designcompose/proto/IntoSerde.kt +++ b/designcompose/src/main/java/com/android/designcompose/proto/IntoSerde.kt @@ -23,19 +23,27 @@ import com.android.designcompose.definition.layout.AlignSelf import com.android.designcompose.definition.layout.FlexDirection import com.android.designcompose.definition.layout.ItemSpacing import com.android.designcompose.definition.layout.JustifyContent -import com.android.designcompose.definition.layout.LayoutStyle import com.android.designcompose.definition.layout.PositionType import com.android.designcompose.serdegen.Size -import java.util.* +import java.util.Optional internal fun LayoutChangedResponse.Layout.intoSerde() = com.android.designcompose.serdegen.Layout(order, width, height, left, top) internal fun ItemSpacing.intoSerde() = - when (typeCase) { - ItemSpacing.TypeCase.FIXED -> com.android.designcompose.serdegen.ItemSpacing.Fixed(fixed) - ItemSpacing.TypeCase.AUTO -> - com.android.designcompose.serdegen.ItemSpacing.Auto(auto.width, auto.height) + when (itemSpacingTypeCase) { + ItemSpacing.ItemSpacingTypeCase.FIXED -> + com.android.designcompose.serdegen.ItemSpacing( + Optional.of(com.android.designcompose.serdegen.ItemSpacingType.Fixed(fixed)) + ) + ItemSpacing.ItemSpacingTypeCase.AUTO -> + com.android.designcompose.serdegen.ItemSpacing( + Optional.of( + com.android.designcompose.serdegen.ItemSpacingType.Auto( + com.android.designcompose.serdegen.Auto(auto.width, auto.height) + ) + ) + ) else -> throw IllegalArgumentException("Unknown ItemSpacing: $this") // Should never happen. } @@ -119,31 +127,3 @@ internal fun PositionType.intoSerde() = com.android.designcompose.serdegen.PositionType.Absolute() else -> throw IllegalArgumentException("Unknown PositionType: $this") // Should never happen } - -/** Temporary (I hope) conversion from the Proto layout style to the Serde layout style. */ -internal fun LayoutStyle.intoSerde() = - com.android.designcompose.serdegen.LayoutStyle( - Optional.of(margin.intoSerde()), - Optional.of(padding.intoSerde()), - itemSpacing.intoSerde(), - Optional.of(top.into()), - Optional.of(left.into()), - Optional.of(bottom.into()), - Optional.of(right.into()), - Optional.of(width.into()), - Optional.of(height.into()), - Optional.of(minWidth.into()), - Optional.of(maxWidth.into()), - Optional.of(minHeight.into()), - Optional.of(maxHeight.into()), - boundingBox.intoSerde(), - flexGrow, - flexShrink, - Optional.of(flexBasis.into()), - alignSelf.intoSerde(), - alignContent.intoSerde(), - alignItems.intoSerde(), - flexDirection.intoSerde(), - justifyContent.intoSerde(), - positionType.intoSerde(), - ) diff --git a/designcompose/src/main/java/com/android/designcompose/proto/ProtoEnums.kt b/designcompose/src/main/java/com/android/designcompose/proto/ProtoEnums.kt index 5415bb5bc..fec4943f8 100644 --- a/designcompose/src/main/java/com/android/designcompose/proto/ProtoEnums.kt +++ b/designcompose/src/main/java/com/android/designcompose/proto/ProtoEnums.kt @@ -16,6 +16,12 @@ package com.android.designcompose.proto +import com.android.designcompose.serdegen.AlignContent +import com.android.designcompose.serdegen.AlignItems +import com.android.designcompose.serdegen.AlignSelf +import com.android.designcompose.serdegen.FlexDirection +import com.android.designcompose.serdegen.JustifyContent +import com.android.designcompose.serdegen.PositionType import com.android.designcompose.serdegen.ScaleMode import com.android.designcompose.serdegen.StrokeCap import com.android.designcompose.serdegen.Trigger @@ -164,3 +170,140 @@ internal fun strokeCapFromInt(value: Int): StrokeCap { else -> StrokeCap.Unspecified() } } + +internal fun alignSelfFromInt(value: Int) = + when (value) { + 1 -> AlignSelf.Auto() + 2 -> AlignSelf.FlexStart() + 3 -> AlignSelf.FlexEnd() + 4 -> AlignSelf.Center() + 5 -> AlignSelf.Baseline() + 6 -> AlignSelf.Stretch() + else -> AlignSelf.Unspecified() + } + +internal fun AlignSelf.toInt() = + when (this) { + is AlignSelf.Auto -> 1 + is AlignSelf.FlexStart -> 2 + is AlignSelf.FlexEnd -> 3 + is AlignSelf.Center -> 4 + is AlignSelf.Baseline -> 5 + is AlignSelf.Stretch -> 6 + else -> 0 + } + +internal fun alignItemsFromInt(value: Int) = + when (value) { + 1 -> AlignItems.FlexStart() + 2 -> AlignItems.Center() + 3 -> AlignItems.FlexEnd() + 4 -> AlignItems.Baseline() + 5 -> AlignItems.Stretch() + else -> AlignItems.Unspecified() + } + +internal fun AlignItems.toInt() = + when (this) { + is AlignItems.FlexStart -> 1 + is AlignItems.Center -> 2 + is AlignItems.FlexEnd -> 3 + is AlignItems.Baseline -> 4 + is AlignItems.Stretch -> 5 + else -> 0 + } + +internal fun alignContentFromInt(value: Int) = + when (value) { + 1 -> AlignContent.FlexStart() + 2 -> AlignContent.FlexEnd() + 3 -> AlignContent.Center() + 4 -> AlignContent.Stretch() + 5 -> AlignContent.SpaceBetween() + 6 -> AlignContent.SpaceAround() + else -> AlignContent.Unspecified() + } + +internal fun AlignContent.toInt() = + when (this) { + is AlignContent.FlexStart -> 1 + is AlignContent.FlexEnd -> 2 + is AlignContent.Center -> 3 + is AlignContent.Stretch -> 4 + is AlignContent.SpaceBetween -> 5 + is AlignContent.SpaceAround -> 6 + else -> 0 + } + +internal fun justifyContentFromInt(value: Int) = + when (value) { + 1 -> JustifyContent.FlexStart() + 2 -> JustifyContent.FlexEnd() + 3 -> JustifyContent.Center() + 4 -> JustifyContent.SpaceBetween() + 5 -> JustifyContent.SpaceAround() + 6 -> JustifyContent.SpaceEvenly() + else -> JustifyContent.Unspecified() + } + +internal fun JustifyContent.toInt() = + when (this) { + is JustifyContent.FlexStart -> 1 + is JustifyContent.FlexEnd -> 2 + is JustifyContent.Center -> 3 + is JustifyContent.SpaceBetween -> 4 + is JustifyContent.SpaceAround -> 5 + is JustifyContent.SpaceEvenly -> 6 + else -> 0 + } + +internal fun overflowDirectionFromInt(value: Int) = + when (value) { + 1 -> com.android.designcompose.serdegen.OverflowDirection.None() + 2 -> com.android.designcompose.serdegen.OverflowDirection.HorizontalScrolling() + 3 -> com.android.designcompose.serdegen.OverflowDirection.VerticalScrolling() + 4 -> com.android.designcompose.serdegen.OverflowDirection.HorizontalAndVerticalScrolling() + else -> com.android.designcompose.serdegen.OverflowDirection.Unspecified() + } + +internal fun positionTypeFromInt(value: Int) = + when (value) { + 1 -> PositionType.Relative() + 2 -> PositionType.Absolute() + else -> PositionType.Unspecified() + } + +internal fun PositionType.toInt() = + when (this) { + is PositionType.Relative -> 1 + is PositionType.Absolute -> 2 + else -> 0 + } + +internal fun flexDirectionFromInt(value: Int) = + when (value) { + 1 -> FlexDirection.Row() + 2 -> FlexDirection.Column() + 3 -> FlexDirection.RowReverse() + 4 -> FlexDirection.ColumnReverse() + 5 -> FlexDirection.None() + else -> FlexDirection.Unspecified() + } + +internal fun FlexDirection.toInt() = + when (this) { + is FlexDirection.Row -> 1 + is FlexDirection.Column -> 2 + is FlexDirection.RowReverse -> 3 + is FlexDirection.ColumnReverse -> 4 + is FlexDirection.None -> 5 + else -> 0 + } + +internal fun layoutSizingFromInt(value: Int) = + when (value) { + 1 -> com.android.designcompose.serdegen.LayoutSizing.Fixed() + 2 -> com.android.designcompose.serdegen.LayoutSizing.Hug() + 3 -> com.android.designcompose.serdegen.LayoutSizing.Fill() + else -> com.android.designcompose.serdegen.LayoutSizing.Unspecified() + } diff --git a/designcompose/src/main/java/com/android/designcompose/proto/ProtoUtils.kt b/designcompose/src/main/java/com/android/designcompose/proto/ProtoUtils.kt index d0e66796a..f93473bf1 100644 --- a/designcompose/src/main/java/com/android/designcompose/proto/ProtoUtils.kt +++ b/designcompose/src/main/java/com/android/designcompose/proto/ProtoUtils.kt @@ -20,6 +20,7 @@ import com.android.designcompose.serdegen.Background import com.android.designcompose.serdegen.BackgroundType import com.android.designcompose.serdegen.Box import com.android.designcompose.serdegen.FontWeight +import com.android.designcompose.serdegen.ItemSpacing import com.android.designcompose.serdegen.NumOrVar import com.android.designcompose.serdegen.NumOrVarType import com.android.designcompose.serdegen.Shape @@ -148,3 +149,5 @@ internal fun newViewShapeRect(isMask: Boolean) = ViewShape(Optional.of(Shape.Rec internal fun newFontWeight(weight: Float) = FontWeight(Optional.of(NumOrVar(Optional.of(NumOrVarType.Num(weight))))) + +internal fun ItemSpacing.type() = item_spacing_type.getOrNull() diff --git a/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshRoot.kt b/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshRoot.kt index 4e08aef99..2b7da18fd 100644 --- a/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshRoot.kt +++ b/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshRoot.kt @@ -29,7 +29,6 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState import androidx.compose.runtime.compositionLocalOf -import androidx.compose.runtime.getValue import androidx.compose.runtime.key import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -93,6 +92,7 @@ import com.android.designcompose.squooshCompleteAnimatedAction import com.android.designcompose.squooshFailedAnimatedAction import com.android.designcompose.squooshVariantMemory import com.android.designcompose.stateForDoc +import java.util.Optional import kotlin.collections.component1 import kotlin.collections.component2 import kotlin.collections.set @@ -146,7 +146,12 @@ private fun SquooshResolvedNode.applyLayoutConstraints(constraints: Constraints, layoutStyleBuilder.width = newDimensionProtoPoints(constraints.minWidth.toFloat() / density) // Layout implementation looks for width/height being set and then uses bounding box. layoutStyleBuilder.bounding_box = - Size(constraints.minWidth.toFloat() / density, layoutStyleBuilder.bounding_box.height) + Optional.of( + Size( + constraints.minWidth.toFloat() / density, + layoutStyleBuilder.bounding_box.get().height, + ) + ) } if (constraints.minHeight != 0) @@ -162,7 +167,12 @@ private fun SquooshResolvedNode.applyLayoutConstraints(constraints: Constraints, newDimensionProtoPoints(constraints.minHeight.toFloat() / density) // Layout implementation looks for width/height being set and then uses bounding box. layoutStyleBuilder.bounding_box = - Size(layoutStyleBuilder.bounding_box.width, constraints.minHeight.toFloat() / density) + Optional.of( + Size( + layoutStyleBuilder.bounding_box.get().width, + constraints.minHeight.toFloat() / density, + ) + ) } rootStyleBuilder.layout_style = layoutStyleBuilder.build() diff --git a/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshTreeBuilder.kt b/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshTreeBuilder.kt index 6e7482841..b88444410 100644 --- a/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshTreeBuilder.kt +++ b/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshTreeBuilder.kt @@ -45,6 +45,7 @@ import com.android.designcompose.proto.newDimensionProtoPercent import com.android.designcompose.proto.newViewShapeRect import com.android.designcompose.proto.overlayBackgroundInteractionFromInt import com.android.designcompose.proto.overlayPositionEnumFromInt +import com.android.designcompose.proto.toInt import com.android.designcompose.proto.type import com.android.designcompose.serdegen.Action import com.android.designcompose.serdegen.ActionType @@ -461,7 +462,7 @@ private fun generateReplacementListChildNode( val listChildScrollInfo = ScrollInfo.Builder() listChildScrollInfo.paged_scrolling = false - listChildScrollInfo.overflow = OverflowDirection.NONE() + listChildScrollInfo.overflow = OverflowDirection.None() val listChildView = View.Builder() listChildView.unique_id = 0 // This is unused. @@ -510,44 +511,44 @@ private fun generateOverlayNode( val layoutStyle = node.style.layout_style.asBuilder() val nodeStyle = node.style.node_style.asBuilder() nodeStyle.overflow = Overflow.Visible() - layoutStyle.position_type = PositionType.Absolute() + layoutStyle.position_type = PositionType.Absolute().toInt() layoutStyle.top = newDimensionProtoPercent(0.0f) layoutStyle.left = newDimensionProtoPercent(0.0f) layoutStyle.right = newDimensionProtoPercent(0.0f) layoutStyle.bottom = newDimensionProtoPercent(0.0f) layoutStyle.width = newDimensionProtoPercent(1.0f) layoutStyle.height = newDimensionProtoPercent(1.0f) - layoutStyle.flex_direction = FlexDirection.Column() + layoutStyle.flex_direction = FlexDirection.Column().toInt() when (overlayPositionEnumFromInt(overlay.overlay_position_type)) { OverlayPositionEnum.TOP_LEFT -> { - layoutStyle.justify_content = JustifyContent.FlexStart() // Y - layoutStyle.align_items = AlignItems.FlexStart() // X + layoutStyle.justify_content = JustifyContent.FlexStart().toInt() // Y + layoutStyle.align_items = AlignItems.FlexStart().toInt() // X } OverlayPositionEnum.TOP_CENTER -> { - layoutStyle.justify_content = JustifyContent.FlexStart() // Y - layoutStyle.align_items = AlignItems.Center() // X + layoutStyle.justify_content = JustifyContent.FlexStart().toInt() // Y + layoutStyle.align_items = AlignItems.Center().toInt() // X } OverlayPositionEnum.TOP_RIGHT -> { - layoutStyle.justify_content = JustifyContent.FlexStart() // Y - layoutStyle.align_items = AlignItems.FlexEnd() // X + layoutStyle.justify_content = JustifyContent.FlexStart().toInt() // Y + layoutStyle.align_items = AlignItems.FlexEnd().toInt() // X } OverlayPositionEnum.BOTTOM_LEFT -> { - layoutStyle.justify_content = JustifyContent.FlexEnd() // Y - layoutStyle.align_items = AlignItems.FlexStart() // X + layoutStyle.justify_content = JustifyContent.FlexEnd().toInt() // Y + layoutStyle.align_items = AlignItems.FlexStart().toInt() // X } OverlayPositionEnum.BOTTOM_CENTER -> { - layoutStyle.justify_content = JustifyContent.FlexEnd() // Y - layoutStyle.align_items = AlignItems.Center() // X + layoutStyle.justify_content = JustifyContent.FlexEnd().toInt() // Y + layoutStyle.align_items = AlignItems.Center().toInt() // X } OverlayPositionEnum.BOTTOM_RIGHT -> { - layoutStyle.justify_content = JustifyContent.FlexEnd() // Y - layoutStyle.align_items = AlignItems.FlexEnd() // X + layoutStyle.justify_content = JustifyContent.FlexEnd().toInt() // Y + layoutStyle.align_items = AlignItems.FlexEnd().toInt() // X } // Center and Manual both are centered; not clear how to implement manual positioning // without making a layout-dependent query. else -> { - layoutStyle.justify_content = JustifyContent.Center() - layoutStyle.align_items = AlignItems.Center() + layoutStyle.justify_content = JustifyContent.Center().toInt() + layoutStyle.align_items = AlignItems.Center().toInt() } } nodeStyle.background = listOf() @@ -580,7 +581,7 @@ private fun generateOverlayNode( val overlayScrollInfo = ScrollInfo.Builder() overlayScrollInfo.paged_scrolling = false - overlayScrollInfo.overflow = OverflowDirection.NONE() + overlayScrollInfo.overflow = OverflowDirection.None() val overlayView = View.Builder() overlayView.unique_id = (node.view.unique_id + 0x2000).toShort() diff --git a/integration-tests/validation/src/main/assets/figma/AlignmentTestDoc_JIjE9oKQbq8ipi66ab5UaK.dcf b/integration-tests/validation/src/main/assets/figma/AlignmentTestDoc_JIjE9oKQbq8ipi66ab5UaK.dcf index 0ae2af74c59042f63f4b00b0733a6a0aafc02a43..c86591cc9ece8f2d32fc13e53003d6e8b5bd9b0a 100644 GIT binary patch literal 445672 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 $GR+rdmon$3AnBgU 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

I3;@*b(V`v92%_}E(d+(% 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