From 8eceaaf48ed0071cef0744fa7985605bfff7898c Mon Sep 17 00:00:00 2001 From: yiqunw700 Date: Fri, 20 Sep 2024 12:29:01 -0700 Subject: [PATCH] Read min/max from figma It used to be ignored --- crates/figma_import/src/figma_schema.rs | 4 +++ crates/figma_import/src/transform_flexbox.rs | 28 +++++++++++++--- .../figma_import/tests/layout-unit-tests.dcf | Bin 27211 -> 27211 bytes crates/layout/src/layout_style.rs | 15 ++++++++- ...signSwitcherDoc_Ljph4e3sC0lHcynfXpoh9f.dcf | Bin 395522 -> 395522 bytes ...toLayoutTestDoc_ArHVZAQIsKf2B9mATnVvLX.dcf | Bin 0 -> 14028 bytes .../validation/examples/AllExamples.kt | 1 + .../validation/examples/AutoLayoutTest.kt | 31 ++++++++++++++++++ .../RenderAllExamples/AutoLayout.png | Bin 0 -> 6235 bytes .../RenderAllExamples/AutoLayout_SQUOOSH.png | Bin 0 -> 6235 bytes .../gradle/internal/InternalGradlePlugin.kt | 1 - .../TutorialDoc_3z4xExq0INrL9vxPhj9tl7.dcf | Bin 54645 -> 54645 bytes 12 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 integration-tests/validation/src/main/assets/figma/AutoLayoutTestDoc_ArHVZAQIsKf2B9mATnVvLX.dcf create mode 100644 integration-tests/validation/src/main/java/com/android/designcompose/testapp/validation/examples/AutoLayoutTest.kt create mode 100644 integration-tests/validation/src/testDebug/roborazzi/RenderAllExamples/AutoLayout.png create mode 100644 integration-tests/validation/src/testDebug/roborazzi/RenderAllExamples/AutoLayout_SQUOOSH.png diff --git a/crates/figma_import/src/figma_schema.rs b/crates/figma_import/src/figma_schema.rs index 15f1e52aa..4322cd950 100644 --- a/crates/figma_import/src/figma_schema.rs +++ b/crates/figma_import/src/figma_schema.rs @@ -1013,6 +1013,10 @@ pub struct Node { pub stroke_cap: StrokeCap, pub bound_variables: Option, pub explicit_variable_modes: Option>, + pub min_width: Option, + pub min_height: Option, + pub max_width: Option, + pub max_height: Option, } impl Node { diff --git a/crates/figma_import/src/transform_flexbox.rs b/crates/figma_import/src/transform_flexbox.rs index 0001f5fc9..f1481dfbc 100644 --- a/crates/figma_import/src/transform_flexbox.rs +++ b/crates/figma_import/src/transform_flexbox.rs @@ -56,6 +56,7 @@ use dc_bundle::legacy_definition::view::text_style::{StyledTextRun, TextStyle}; use dc_bundle::legacy_definition::view::view::{RenderMethod, ScrollInfo, View}; use dc_bundle::legacy_definition::view::view_style::ViewStyle; use log::error; + use unicode_segmentation::UnicodeSegmentation; // If an Auto content preview widget specifies a "Hug contents" sizing policy, this @@ -116,6 +117,13 @@ fn compute_layout( style.layout_style.bounding_box.height = bounds.height(); } + if let Some(max_width) = node.max_width { + style.layout_style.max_width = DimensionProto::new_points(max_width); + } + if let Some(max_height) = node.max_height { + style.layout_style.max_height = DimensionProto::new_points(max_height); + } + // Frames can implement Auto Layout on their children. if let Some(frame) = node.frame() { style.layout_style.position_type = PositionType::Relative; @@ -311,20 +319,32 @@ fn compute_layout( style.layout_style.height = DimensionProto::new_auto(); } if let Some(bounds) = node.absolute_bounding_box { - if !hug_width { + if let Some(min_width) = node.min_width { + error!("2. Node has min_width {:?}", min_width); + style.layout_style.min_width = DimensionProto::new_points(min_width) + } else if !hug_width { style.layout_style.min_width = DimensionProto::new_points(bounds.width().ceil()); } - if !hug_height { + if let Some(min_height) = node.min_height { + error!("2. Node has min_height {:?}", min_height); + style.layout_style.min_height = DimensionProto::new_points(min_height) + } else if !hug_height { style.layout_style.min_height = DimensionProto::new_points(bounds.height().ceil()); } } if let Some(size) = &node.size { if size.is_valid() { - if !hug_width { + if let Some(min_width) = node.min_width { + error!("3. Node has min_width {:?}", min_width); + style.layout_style.min_width = DimensionProto::new_points(min_width) + } else if !hug_width { style.layout_style.min_width = DimensionProto::new_points(size.x()); } - if !hug_height { + if let Some(min_height) = node.min_height { + error!("3. Node has min_height {:?}", min_height); + style.layout_style.min_height = DimensionProto::new_points(min_height) + } else if !hug_height { style.layout_style.min_height = DimensionProto::new_points(size.y()); } // Set fixed vector size diff --git a/crates/figma_import/tests/layout-unit-tests.dcf b/crates/figma_import/tests/layout-unit-tests.dcf index 540d2747705a9e8c69a690f1cc4ffad5f82da4f2..09613502bbb8374374ad6ba067eef4b8e8f52136 100644 GIT binary patch delta 397 zcmX|-Pe_w-9LD#2-`BNrueP;6ZZ$V`n<6V1McFb$mPT`kCR+#==o~Q^1#7U1V1!5= zqn|LagI5s}^brChL=ZX*I@GANOBatGItiV6Md>*{51;3Or`|xlfj2SrHty5XcOCSn zz5`DF8F??NI~jnVL&?v;c^X3n!39=szYGDH4Q@g0+6)?!5xAMt!vYUqTgL@n z?%8H^wDG3#LWhr=j(4JdB!UR=F!2j$=ePcfAjpw{4?u|8VE8Eaxs&-v<$TGo=qHO; z`V!Z@>ZPlVPp@tOExg#bA}Zqwpp{QtKY_DMd)7oP_4;v!o4q?gGpn)Z0z3a+qM)0r zar2%Y&R;g~S;=@{;dW*l0O#&a3xxZVQGrJL)E$A&?1NbyP5d}h)nVn0hc!`)qn$X# WPoukljkPhe`!t;s3!=Ujp8W&*sdTvj delta 363 zcmXAl%PT~29L48+@AVwxHC}VMu3-#GBuPUig)nMDq1bo~Vy#3PuAbmeR^;G@6k0x0HJ^Q^$nu~rJ=XoMbtcz$>6iaH5cDB)Y+1t{fl{mvip z#Pv-?#z&_dT&{Wrz{%=qf$+WN2++7u>l1aYo5quec;JT>0iJ4zB;%=k> diff --git a/crates/layout/src/layout_style.rs b/crates/layout/src/layout_style.rs index 3da2b9500..802b931c0 100644 --- a/crates/layout/src/layout_style.rs +++ b/crates/layout/src/layout_style.rs @@ -15,6 +15,7 @@ use crate::into_taffy::{IntoTaffy, TryIntoTaffy}; use dc_bundle::definition::element::DimensionExt; use dc_bundle::legacy_definition::layout::layout_style::LayoutStyle; +use log::error; impl TryIntoTaffy for &LayoutStyle { type Error = dc_bundle::Error; @@ -22,7 +23,6 @@ impl TryIntoTaffy for &LayoutStyle { let mut tstyle = taffy::prelude::Style::default(); tstyle.padding = (&self.padding).try_into_taffy()?; - tstyle.flex_grow = self.flex_grow; tstyle.flex_shrink = self.flex_shrink; tstyle.flex_basis = (&self.flex_basis).try_into_taffy()?; @@ -30,17 +30,28 @@ impl TryIntoTaffy for &LayoutStyle { tstyle.gap.height = (&self.item_spacing).into_taffy(); tstyle.align_content = Some((&self.align_content).into_taffy()); + error!("Into taffy align_content {:?}", &self.align_content); tstyle.justify_content = Some((&self.justify_content).into_taffy()); + error!("Into taffy justify_content {:?}", &self.justify_content); tstyle.align_items = Some((&self.align_items).into_taffy()); + error!("Into taffy align_items {:?}", &self.align_items); tstyle.flex_direction = (&self.flex_direction).into_taffy(); + error!("Into taffy flex_direction {:?}", &self.flex_direction); tstyle.align_self = (&self.align_self).into_taffy(); + error!("Into taffy align_self {:?}", &self.align_self); tstyle.size.width = (&self.width).try_into_taffy()?; + error!("Into taffy width {:?}", &self.width); tstyle.size.height = (&self.height).try_into_taffy()?; + error!("Into taffy height {:?}", &self.height); tstyle.min_size.width = (&self.min_width).try_into_taffy()?; + error!("Into taffy min_width {:?}", &self.min_width); tstyle.min_size.height = (&self.min_height).try_into_taffy()?; + error!("Into taffy min_height {:?}", &self.min_height); tstyle.max_size.width = (&self.max_width).try_into_taffy()?; + error!("Into taffy max_width {:?}", &self.max_width); tstyle.max_size.height = (&self.max_height).try_into_taffy()?; + error!("Into taffy max_height {:?}", &self.max_height); // If we have a fixed size, use the bounding box since that takes into // account scale and rotation, and disregard min/max sizes. @@ -49,11 +60,13 @@ impl TryIntoTaffy for &LayoutStyle { 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; + error!("Into taffy override max/min width to auto"); } if self.height.is_points()? { 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; + error!("Into taffy override max/min height to auto"); } tstyle.position = (&self.position_type).into_taffy(); diff --git a/designcompose/src/main/assets/figma/DesignSwitcherDoc_Ljph4e3sC0lHcynfXpoh9f.dcf b/designcompose/src/main/assets/figma/DesignSwitcherDoc_Ljph4e3sC0lHcynfXpoh9f.dcf index 66e2127916efb471f7d4c79d74e1500d7b107b9b..b784108c274ad260eddc135438458804a98e8a0c 100644 GIT binary patch delta 4351 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 literal 0 HcmV?d00001 diff --git a/integration-tests/validation/src/main/java/com/android/designcompose/testapp/validation/examples/AllExamples.kt b/integration-tests/validation/src/main/java/com/android/designcompose/testapp/validation/examples/AllExamples.kt index 42327bf66..35c2c018b 100644 --- a/integration-tests/validation/src/main/java/com/android/designcompose/testapp/validation/examples/AllExamples.kt +++ b/integration-tests/validation/src/main/java/com/android/designcompose/testapp/validation/examples/AllExamples.kt @@ -29,6 +29,7 @@ val EXAMPLES: ArrayList Unit, String?>> = Triple("HelloVersion", { HelloVersion() }, HelloVersionDoc.javaClass.name), // Alphabetically ordered and trying to put similar tests together... Triple("Alignment", { AlignmentTest() }, AlignmentTestDoc.javaClass.name), + Triple("AutoLayout", { AutoLayoutTest() }, AutoLayoutTestDoc.javaClass.name), Triple("Battleship", { BattleshipTest() }, BattleshipDoc.javaClass.name), Triple("Blend Modes", { BlendModeTest() }, BlendModeTestDoc.javaClass.name), Triple("Component Replace", { ComponentReplaceTest() }, ComponentReplaceDoc.javaClass.name), diff --git a/integration-tests/validation/src/main/java/com/android/designcompose/testapp/validation/examples/AutoLayoutTest.kt b/integration-tests/validation/src/main/java/com/android/designcompose/testapp/validation/examples/AutoLayoutTest.kt new file mode 100644 index 000000000..b106e8485 --- /dev/null +++ b/integration-tests/validation/src/main/java/com/android/designcompose/testapp/validation/examples/AutoLayoutTest.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2023 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. + */ + +package com.android.designcompose.testapp.validation.examples + +import androidx.compose.runtime.Composable +import com.android.designcompose.annotation.DesignComponent +import com.android.designcompose.annotation.DesignDoc + +@DesignDoc(id = "ArHVZAQIsKf2B9mATnVvLX") +interface AutoLayoutTest { + @DesignComponent(node = "#root") fun main() +} + +@Composable +fun AutoLayoutTest() { + AutoLayoutTestDoc.main() +} diff --git a/integration-tests/validation/src/testDebug/roborazzi/RenderAllExamples/AutoLayout.png b/integration-tests/validation/src/testDebug/roborazzi/RenderAllExamples/AutoLayout.png new file mode 100644 index 0000000000000000000000000000000000000000..bdded5a819665b5ba9710e319a7b652396660c2c GIT binary patch literal 6235 zcmeAS@N?(olHy`uVBq!ia0y~yU|Isi2^?%dkr?|zZXgv^;u=v>l%JGelvq`j8K06` zoLrPyP?DLS7oVJySX|7IoS&u*Q2NkWU zG50=iG5Yye1zaq@Jp6QT&uLKUyMMk)?8>>0TD3d&OfRfFfBDpt?~}o`)KdQG-;MM@ zMe?7zNhM3m*j9dd_$lt#Q(J%S$@l#s1-M|Djcbm07 zb@q@_{Z~Py{$p^d|6biQJS%;Im%QGnV?g!YXvh$mX2R`(O(y$kpj2gd0g@D#go9JF zgEu(UO^O32TxMNJ0;>Y2QT{EEg#B{rs77F}9u1t)lmjk)M{~z$(E+T&DJvfD?ysBR zb?HA+=k0zdq9ZpP*}LnX=rh!XLMtH60=H4tz=r_?!)hMj$WWLhaA;_akq09~M5w*T z|Bw3rPS$^#x=)7T4-=@F#qfcfC+Ov2#sm5W9!vSz8TKDgm})oTB^T69U}E@i8!h}& zfr1-ODX=mmOm*a9IH1)m!q5=PrimHQqY6iZ2P5~5CW_HSF_;p?SNr+9__9)O9#jO* P7BG0a`njxgN@xNAlY_Um literal 0 HcmV?d00001 diff --git a/integration-tests/validation/src/testDebug/roborazzi/RenderAllExamples/AutoLayout_SQUOOSH.png b/integration-tests/validation/src/testDebug/roborazzi/RenderAllExamples/AutoLayout_SQUOOSH.png new file mode 100644 index 0000000000000000000000000000000000000000..bdded5a819665b5ba9710e319a7b652396660c2c GIT binary patch literal 6235 zcmeAS@N?(olHy`uVBq!ia0y~yU|Isi2^?%dkr?|zZXgv^;u=v>l%JGelvq`j8K06` zoLrPyP?DLS7oVJySX|7IoS&u*Q2NkWU zG50=iG5Yye1zaq@Jp6QT&uLKUyMMk)?8>>0TD3d&OfRfFfBDpt?~}o`)KdQG-;MM@ zMe?7zNhM3m*j9dd_$lt#Q(J%S$@l#s1-M|Djcbm07 zb@q@_{Z~Py{$p^d|6biQJS%;Im%QGnV?g!YXvh$mX2R`(O(y$kpj2gd0g@D#go9JF zgEu(UO^O32TxMNJ0;>Y2QT{EEg#B{rs77F}9u1t)lmjk)M{~z$(E+T&DJvfD?ysBR zb?HA+=k0zdq9ZpP*}LnX=rh!XLMtH60=H4tz=r_?!)hMj$WWLhaA;_akq09~M5w*T z|Bw3rPS$^#x=)7T4-=@F#qfcfC+Ov2#sm5W9!vSz8TKDgm})oTB^T69U}E@i8!h}& zfr1-ODX=mmOm*a9IH1)m!q5=PrimHQqY6iZ2P5~5CW_HSF_;p?SNr+9__9)O9#jO* P7BG0a`njxgN@xNAlY_Um literal 0 HcmV?d00001 diff --git a/plugins/gradle-plugin-internal/src/main/java/com/android/designcompose/gradle/internal/InternalGradlePlugin.kt b/plugins/gradle-plugin-internal/src/main/java/com/android/designcompose/gradle/internal/InternalGradlePlugin.kt index 054dc157e..6f7a1ef02 100644 --- a/plugins/gradle-plugin-internal/src/main/java/com/android/designcompose/gradle/internal/InternalGradlePlugin.kt +++ b/plugins/gradle-plugin-internal/src/main/java/com/android/designcompose/gradle/internal/InternalGradlePlugin.kt @@ -89,7 +89,6 @@ class InternalGradlePlugin : Plugin { test.inputs.properties(mapOf("isFetch" to isFetch)) test.outputs.doNotCacheIf("Always fetch DCF files") { isFetch.get() } - test.doFirst { if (isFetch.get()) { test.useJUnit { diff --git a/reference-apps/tutorial/app/src/main/assets/figma/TutorialDoc_3z4xExq0INrL9vxPhj9tl7.dcf b/reference-apps/tutorial/app/src/main/assets/figma/TutorialDoc_3z4xExq0INrL9vxPhj9tl7.dcf index 7d5947281bf22d28d5852aaaff2558927ed12aab..4c8fffa2b4ee3fe1ae81543845269f7089f4c06d 100644 GIT binary patch delta 729 zcmYMxT}YE*6bEq6dEPlcYI}7#m$nb5w$#lvHEU>^Gl|5HB`zYZ)HH3@g{FuV8j%-j zL~t(D$P4MBG_uvX2nwR;q9UopX>}1{5K+)Ym|Z3GwioHSId{+hcg}xxMy$?=t4>2) zl={;5b)RhA-_v$FPtWDUzX4)zYR6O4q&6Oa5-}Y4_B(mjf9fE*Avh5G`F|e?-j)& zq;mzq1u)m$Di(~Y1Dv^*b7MTk+&v8p*vFP8Y#xp4Z!C-4G75Z@(&;g&MK@HAaS49C_uwkiiLn^e*EmRfUV><_49{-7WmZ* z6M%y&&4Wla{$z;f6aI394LnoVhel9N8oPeh^&&m|D|-bnFCt;t6_lvNF7t?|3TY`r z&tLMD4|b^Wg=+jxHGY>8ue9ssW#4^?zB+YWWgkH(id>$S^7Z`2Aqy(-oBx+t-`#w? z)5#-;R{&f*&{!lOmmeOhMR0Rm%TEn#=RfT?QS*;#psqj)n0ZXM24JD4KtJmerX;XN z8U!1=O(_~kQ??yPdbvG@TJBp&QGkv|mwX7jX|3PO_uh}o zA%*iljv;+0%)$a0{hTn-#zYC*i&g*%*-|`;^!mPvjniKd4)HUqUeFtV5|r|1|0d9l zNhN<79*~2T&r=IR8ISZfA(XRntX@C`=XsL_RB~OP5O9P~+-wk76%OHz3BMew!vRpk z3De&ZY!Y5KW1!938mQ%{J2gmUUGdy2MFs4qz6CEWx+dw-qM1fCN?O;O>EB{c z;G!Z>^%&B^>rugs8dO|6vk4H-r7x@k64*1_h@j@TuYM^Yk!RdfTO zS-I6d3lPWJvx5k`c>LTC1SR`h4T4f_xv+$ix=1Dd4Lp6C*Gr_Ol_K&64b&2v?G*