From aebf98700d982800cc84c49d8edb2d4e87513326 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 | 9 +- .../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 -> 400548 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 +-- .../res/raw/raw_resource_test_hello_world_doc | Bin 3735 -> 3759 bytes ...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 -> 3838 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 -> 57487 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 -> 3759 bytes .../TutorialDoc_3z4xExq0INrL9vxPhj9tl7.dcf | Bin 55496 -> 55727 bytes 79 files changed, 551 insertions(+), 679 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..c5b98f0e1 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..2c2bc33b8 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}; @@ -141,13 +140,13 @@ impl Default for NodeStyle { grid_columns_rows: 0, grid_adaptive_min_size: 1, grid_span_content: vec![], - overflow: Overflow::default(), + overflow: Overflow::Visible, max_children: None, overflow_node_id: None, overflow_node_name: None, cross_axis_item_spacing: 0.0, - horizontal_sizing: LayoutSizing::default(), - vertical_sizing: LayoutSizing::default(), + horizontal_sizing: LayoutSizing::Fixed, + vertical_sizing: LayoutSizing::Fixed, aspect_ratio: Number::default(), pointer_events: PointerEvents::Inherit, meter_data: None, 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..6e108adc1d6a438ae9379ce1ea5ff2c2a67d6256 100644 GIT binary patch delta 3501 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 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..35ba5068bb6efbe72027aa7e975094d00670329b 100644 GIT binary patch delta 48797 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 bbm)@P0e|h9)1^~R$FA)=bb))KtUdo9%)2EY delta 45671 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 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..2b6a1d606 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 alignItemsFromInt(value: Int) = + when (value) { + 1 -> AlignItems.FlexStart() + 2 -> AlignItems.FlexEnd() + 3 -> AlignItems.Center() + 4 -> AlignItems.Baseline() + 5 -> AlignItems.Stretch() + else -> AlignItems.Unspecified() + } + +internal fun AlignItems.toInt() = + when (this) { + is AlignItems.FlexStart -> 1 + is AlignItems.FlexEnd -> 2 + is AlignItems.Center -> 3 + is AlignItems.Baseline -> 4 + is AlignItems.Stretch -> 5 + else -> 0 + } + +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 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 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 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 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 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 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/designcompose/src/testDebug/res/raw/raw_resource_test_hello_world_doc b/designcompose/src/testDebug/res/raw/raw_resource_test_hello_world_doc index d9f32c6624d9405c13c9b0298809e894e4864f4e..39e89bc8aec63c9b500226b51376309d796ec493 100644 GIT binary patch delta 422 zcmbO(yIyvJ9HaR}`LM|jta1}4Ycer1PL5+$nt0C$$Pi!@6J%syV1Qv(5PNbJv(DsX z#*ILES$65k222$|)=DNnkk0Q+F%WH{FfGhT+L<=jF{?7d^;u2+$)X3cc5)pn+hlK6 z;fWX6CMU7F=m7QdIx{eoI05y70VBvXuq#-AG}skTKI7(#tlo?QV0n-l1_mY&o~*-O zh{NQ0#F{+$BCGZ0CJq5CrZ3_wLJ2O7$<16EK!2^~lENNdo0+&9QOp4c%VZTMmC4(A hW=jc!UCzK@WN2amM8<|@=4OT_h9)K^o0EA>7y%HWK6C&8 delta 359 zcmZ24J6(2y9HZGp`7lO?$%!g@Iw7GXoGzuICnGWSQK+A~M;F z@$BR`jJ%USFtSZ<;AEM6fW>}tE|VQl?;0k*$$yw))R8rUG&3@SNEl#(F(z9v>P%k4 z{1?r%T(Bz?Ci}690bSxTc|EI`AV>={5VOGb&SzBF{EJnaaq=HF{>eL7cqcour=n_9 zhq%4O38n|(3=E?t|6-Ni+{Yn+Fm4xT8ay;KCQszjn7oTiYVr$49(X9IZkFP%U<5jz jn-%P($vat8CLiOOEyxA6(9Fol#MHvT)Od3>uL&anEelbg 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..6955217ee70d2d4c120a823912f6bd0083c6f1e3 100644 GIT binary patch literal 445672 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

HJB&kpoMH#M%AnA7Cbrv%Cc!}%bPU5kq$OecX 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 b@grCll$yF-jC2V=~c+#1OwSUr8`AiiSwme|_wa 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

I3;@*b(V`v92%_}E(d+(% zEC8tqk#uV*32*|Yl%u#*5JViDDV~rgO!vl*j|FNmzQiVqh+vL77E_| z;BvJPb6jsQSg)qXcfRTss^{E4^Z$zjYz5*(Q*kb>{H#PZ$tbOPN5g4!pJS4dy58~2_qHZH}BsGUmc$j6NgG?qisdOSIF}vFm zv=IX0b5<~fM7AqbmRiZQh(QPaKzN8O0KSMJPLew4y00$>Ao5?Mvpd#icdy*q3(EwZ zJHMUM?ItifTHkRXE_aA=E^HrxQO2DH;^6G(PbntLu2$#r^j30~16jtl43uIX6;rFH z;WR44aAvvp!Hn|I5647SNN%2*m!QibKrrkXW>BqtTDXa!&u3`JI+&sv+7>ZY`M1le z2~*6x5eP~{fYb@Mt};XO4GRpUf4scx42^%h-1o=C?D@yb+yc2pCf%Wbyxeu~Draca zKl87b#cHb)!qCx^&(K6|p#O`WKdg=Qh-)xIBRz6$hGua}hh7}XI+D`y7Tl#ccXKNyDj}R^BapLJ*g)o+3iO<^2KUCBSKmXkc%^6>I3a)SydZ&Zw;+p%;v%v{8(Op5MpH`)(-?84wz{0F`^LYL57ImTm8oLn+vps z>6>G+Rd@zNRzHkq5q#UZZ^t1bHHu?#x&IKa0G@d9H4qh@nDI=X@?;o^kQ~< zMPaQJ%Azn0cufL9NESeb2t3PPd4qB4gulUH&Goept%-fjP($QC?=rN*5RhUB7W^=c zmjMaSA2GyK^q4rVloND3G~V`aOj$cMcyNNA4g&zSd$ec=GlD4naP(YtA)~(QIF@wl zEED4+Sv0wSsUV1$I8!_!o4>(;K3FH1NlAZ9v_!h{VP?tVzWT}nP@49lqFBq(tbxH^ zQX2ET5l939w%q}Z4JvOio>*WY{TtI|-(alP7lT&)f{>cQRSttt#b}z0{E7?_mX^k1 z;tAwnD`#^t12)ePl3MZ#Q|x@>lAg}*U9_z-&J>KlxODVX7_ zyuo;?n4>v!$2l7R##B+XPBS!d3Usouk+rYN42^$ds>-p>Hn&sa17+h@;_ve=LmMHW ziJ=K*X!gnh$QfTBH}+#SctluncUNN>P8)$BpP}h|&*+wOIs#KErboRsYl3ofw_ArT ziN3!&L-Xzh2GYMVU3P}XzcH2J5w%Y_!VHanW2&QV(o52J`ZuOs_nvZwM*TDY#+0z) zGc;ksMNLY1fvvHr+Kwl5&HAjv3=Q|l)ft+FDIHSk-f`z9RYf=hTU_cYTwMLzY)7v@~6)qcW4R75^;@t(i78 zB$E|7bUpw{lSrKsM ze8e&wQE6@okD3vBPvS)NjuY$S?`MW?>jeG_f`gX`p`}35{&Rcl zWSK0?fK(X&-JY3Q5+q)pTb%9+&hi{(nDq@Hhg{Ah=Q8JFSy85iAlqQfa_GcG5r)N3 zmh?sEDTZ|qQPo|ZONmz4<~4vI$N(5xA=7yZhX|1r7?83ypK44nb<{x2v3{x%YqS%4 z#73z@KXh9F{hOIRI(cZDrNasd)*cKY095fuAvOm6b1ZU%UOSWm6S)`5jIu3sR90$& zJ`)z|_DmjZg{{;8U?@iJ%39SRlL7_z5DNy487|F3ljfmaHm8FtJ*;bEnK5B_wQs$1JcAWjK0}%XdjP-ANy5Dg`wSb4T-I>gBU7 z>CDSVWi3wm5#)Iur`ax__ir`iypq!k}67d|rp!R-=#YU3n_qmWb~e zPh1SEEQzFNtG>{CQCTZAD{Vs%v4}q=`5(lrv=k#bgW8{<)Iauxstb3sz#&v26{1#A z!)ap#%;}~KecT*suwQ420HIzoPN*SAvS@O=0QV-|FrxspCh^)FLZ@D;xxenlvp2<1 zM8rzcLJxakf)%J=_eSADazv3b`|N-eDXDo-4^m3U=1{6BA`^EhdqdDfEJEoKr>;n{ zf$j0@`+GN~O!PNFeq+KV`=yV+>7%t8Vf~u!XF)tshGQt?3V~5GTgZJd6B&XlE*uC^ zWr#)R6S3^DCy6y4C>b9&N+jXOxI&m2Z0YaliDuM3lhMNV{yhir?P1&WEzuSkwION;>O3bY&_Tj5XO$fF!Kj@sHe zzb#~NN%ef^XZ^(MKkFxc{=!Rt`3o;Voj>>kKk#}jjbedVr4c9@IXPH6_xr|Kuu4e? zGI7*I2wlo4=ae&2Ox;MuA+jVaXYdAP#f0H-OKz6dCz0=M-0^dh!f=haV-13Y}v@{_?xagv3D&k3WT&Qq@0_trifRi5vw(7kY)Qaa~hM5+}k{3^~)0>rWAcT%AY)E3)BKaV(vQt35^Q?ks`Qq2B`*e~U zSv*bungSaIlno7;?|98&!(#evg~+5j^jW#@NnbhA2@Fak8vr1w4#^ka37pqS0dfoD{`35 zI5$pmEJnI<*cB?U29#7Uk&~D)FF`vD0RbnhGAM#8tXc{!qA=i@tjr-`gm~q~Nzn+y zm_{L13qZJeaf9nDRK@(2_GvD8zFQ~Hp0sLs+l}|%DsIj94}}O+D@l=aC@}KJgyFbi-CE9BkU*3rarNNe{Hc(e@-8hv+K`DT%$q3T zFmZ)PwqJoOd+o4Wpl93o2t85R5F#-Sam;E`BI&u==>|X{2OkYVly2bR=a6zF=dSym zi}VhBuA&rP7AvouQHaCAgG^Gy3@$`o5yz%PZwWl`U^6Yz`ph;Vs4y5^>lRH%wyD`;u8w|mGAcs|o zz=OD8lTk@dQOK^WMWU%augbs%$vzFa&Vr>cgN#k)F78 zwNhyDm0Li{x znsthpsfD;qdM_YO3NLzt*O?!N@>Fa#Vw!1zH;kC$E< zH!x>U>C|i4B=ICPINzz}EvSb8C{+ucwnKcA9B4rd1?t~dT1!Y%A;^FqaRpgcggc|D zv{E7yA|NL{bSjTXmlw>fykf29R?=td&8?)3@A8~yUBGW`?#cI^IJ;qyTenVZ^|TcT z{Xlx-7zQ6#a>#(Rjg1#?Z0-_ihA9#@vnX0KK6X@q5khkZ!L&oc;kZI3(`!<3L{4Im&c|@t2mvbqFn&nW z;~UE^c4s}h*yYjWT`VfT*Ttrd@AC0?v4+DfYM>v$%LeUZseZ#O!QzxJEBe^5b;3#w zXQB7f>MgQ`;EjhFt$V7E{XXhO?eIQUHDUNL#aM@BI047tz{mjka z`xtRe``8r#7;DgM+hb)POG~?8W^L7nvCE^$`&d-`s`jxbxsQEeVINyhdA#Uj!_v3j z$BLb-jTa(!h=Dm_9bi zKdO)Yl8aG-k7HFAHWH1h$@^8%jdHK|u~7%)0FFTD3IL2B0qqdSo60_xHj(i@R&;Y; zypFv?AIooGZ6b-^&6;lPYDhA(9_+g@lviZnS7QiR?o-^yzI9*HAZe5^cb{@|!Sb_D>&&t|smEoC2j&imN=>XWBC^sz_%$&=x5hx*uuyMqON z?4p#f%=_4L;lGYPS1cB+X17w?M(VGz45y6{@IBtgdLMg~ee4PVEbC+6TJ*8!PIw>d zeQf-!__)Tgr@4>)@WMW}p7K>iAG_t_*wr7$e#HA&?_-a$k6i(PWqs`1%070>`&jQ| zV;_553!_#_pv|aeXRGfN7=`&0Kl?7_8ny(OKY(E`&gS! z^KYJxYaDx)`&j;7hyNc--;F2#-FaAgj$X=F7k%uu_pz(r$9~-VSnp$xvX5N>fMtE` z*OYziw)e3*14y@@fkIn@E!Fw;1$b6-Z4+rb(Q7N?cv`Dqe)4dNR4Cvc@!i7HQJ@DRScSs` zk=+bHiXcJ^$Gx#cC;HeDQxdn{SFCNzN~PE`?T~`j(@JsO%4s5i@y$(--%$E)YqGXU zX|e8%rqW7518l=g6`^MC?fDTrE?S^Iwiq>e_RG_)A2z4DP&e$I;(<~5)F>=Yc~{ZL zhP6%JdhN<{dp9@vv-LPXLi-$_KJ^-{=XX5!%-*AKc<(d&&pm=oSoSwBUA?*YBsPqA z^ewbK%OjiF4tw@;BNI%k#e@h(THs4&Tpr5sXoAg4yo1WKW5k{5U`Do)emEvFQ*v{v4FuweV*`L7$UtSbLg6NczJ