From b7e459765714c65d4990090448774a99e86fe100 Mon Sep 17 00:00:00 2001 From: Tim Froehlich Date: Thu, 26 Dec 2024 22:51:27 +0000 Subject: [PATCH] Resolve various runtime errors. (#1948) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Based on PR #1947 ## Chain of upstream PRs as of 2024-12-26 * PR #1886: `main` ← `feature/protoconv` * PR #1941: `feature/protoconv` ← `wb/froeht/protolize-dcf` * PR #1943: `wb/froeht/protolize-dcf` ← `wb/froeht/delete-proto-utils` * PR #1946: `wb/froeht/delete-proto-utils` ← `wb/froeht/temp-disable-variant-animation-test` * PR #1947: `wb/froeht/temp-disable-variant-animation-test` ← `wb/froeht/remove-serde-from-kotlin` * **PR #1948 (THIS ONE)**: `wb/froeht/remove-serde-from-kotlin` ← `wb/froeht/resolve-runtime-exceptions` Protobuf maps are immutable and need to be modified by copying them. --- .../figma_import/tests/layout-unit-tests.dcf | Bin 22657 -> 22657 bytes ...signSwitcherDoc_Ljph4e3sC0lHcynfXpoh9f.dcf | Bin 247603 -> 247603 bytes .../android/designcompose/VariableManager.kt | 30 ++++----- .../designcompose/squoosh/SquooshLayout.kt | 20 +++--- .../squoosh/SquooshTreeBuilder.kt | 57 +++++++++--------- .../TutorialDoc_3z4xExq0INrL9vxPhj9tl7.dcf | Bin 57475 -> 34364 bytes 6 files changed, 56 insertions(+), 51 deletions(-) diff --git a/crates/figma_import/tests/layout-unit-tests.dcf b/crates/figma_import/tests/layout-unit-tests.dcf index 6d823201039afc018840570aece9c432328303c4..ece51f9f1843e649cd92fabb14fd6540f59c92bf 100644 GIT binary patch delta 573 zcmXw#&r6eW0LFXvZu#!jnZBF4A1&A1)TyQKHf>JYFUsnWu38fZLZ)Mk<_2R3sYFJn zPMcqX`Ue6PiuE8Efe;0q@{$)XksS?dA-38b`X{n%-#@`ctKs%imH=ui?hDElTZ7!nUmXq4DcZU= zAgXa2RBpx1fSG%VMgj|aFU5ck<}Rm!PVP-cC3Nx6wHXOkrmxrF+_os4$2rs4awWeo zU%0hUE)@#-Vot4E_+GOE;1~ZapkpYw3Zrx!AsE)gks%}6#&^a3*j?zUU1&5g@MWkm zCpj42L~YKEbM=Ql;5@hR6k^+Ig~kuoZotp)wrL>1pu?s^kW)^t4x_AeH$-FHcioqC H?h}6j)c>R| delta 528 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 updateLayoutTree(manager, root, layoutCache, layoutNodes, layoutParentChildren) val layoutNodeList = layoutNodeList { - layoutNodes - layoutParentChildren + this.layoutNodes.addAll(layoutNodes) + this.parentChildren.addAll(layoutParentChildren) } // Now we can give the new layoutNodeList to the Rust JNI layout implementation 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 3974d6aaf..d8da21ef6 100644 --- a/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshTreeBuilder.kt +++ b/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshTreeBuilder.kt @@ -54,6 +54,7 @@ import com.android.designcompose.definition.view.View import com.android.designcompose.definition.view.ViewDataKt.container import com.android.designcompose.definition.view.ViewStyle import com.android.designcompose.definition.view.containerOrNull +import com.android.designcompose.definition.view.copy import com.android.designcompose.definition.view.frameExtrasOrNull import com.android.designcompose.definition.view.overridesOrNull import com.android.designcompose.definition.view.styleOrNull @@ -566,59 +567,61 @@ private fun generateOverlayNode( } } - val nodeStyleBuilder = node.style.nodeStyle.toBuilder() - nodeStyleBuilder.overflow = Overflow.OVERFLOW_VISIBLE - nodeStyleBuilder.backgroundsList.clear() - - overlay.overlayBackgroundOrNull?.colorOrNull?.let { - val bgColor = - com.android.designcompose.definition.element.color { - r = (it.r * 255.0).toInt() - g = (it.g * 255.0).toInt() - b = (it.b * 255.0).toInt() - a = (it.a * 255.0).toInt() - } - nodeStyleBuilder.backgroundsList.add(background { solid = colorOrVar { color = bgColor } }) + val newNodeStyle = node.style.nodeStyle.copy { + this.overflow = Overflow.OVERFLOW_VISIBLE + this.backgrounds.clear() + + overlay.overlayBackgroundOrNull?.colorOrNull?.let { + val bgColor = + com.android.designcompose.definition.element.color { + r = (it.r * 255.0).toInt() + g = (it.g * 255.0).toInt() + b = (it.b * 255.0).toInt() + a = (it.a * 255.0).toInt() + } + this.backgrounds.add(background { solid = colorOrVar { color = bgColor } }) + } } + val overlayStyle = viewStyle { - layoutStyle = layoutStyleBuilder.build() - nodeStyle = nodeStyleBuilder.build() + this.layoutStyle = layoutStyleBuilder.build() + this.nodeStyle = newNodeStyle } // Now synthesize a view. val overlayViewData = container { - shape = viewShape { rect = box { isMask = false } } - children.add(node.view) + this.shape = viewShape { rect = box { isMask = false } } + this.children.add(node.view) } val overlayScrollInfo = scrollInfo { - pagedScrolling = false - overflow = OverflowDirection.OVERFLOW_DIRECTION_NONE + this.pagedScrolling = false + this.overflow = OverflowDirection.OVERFLOW_DIRECTION_NONE } if (node.view.uniqueId !in 0..0xFFFF) { throw RuntimeException("View's unique ID must be in the range 0..0xFFFF") } val overlayView = view { - uniqueId = (node.view.uniqueId + 0x2000) - id = "overlay-${node.view.id}" - name = "Overlay ${node.view.name}" + this.uniqueId = (node.view.uniqueId + 0x2000) + this.id = "overlay-${node.view.id}" + this.name = "Overlay ${node.view.name}" if ( overlay.overlayBackgroundInteraction == OverlayBackgroundInteraction.OVERLAY_BACKGROUND_INTERACTION_CLOSE_ON_CLICK_OUTSIDE ) { - reactions.add( + this.reactions.add( reaction { trigger = trigger { click = empty {} } action = action { close = empty {} } } ) } - scrollInfo = overlayScrollInfo - style = overlayStyle - data = viewData { container = overlayViewData } - renderMethod = View.RenderMethod.RENDER_METHOD_NONE + this.scrollInfo = overlayScrollInfo + this.style = overlayStyle + this.data = viewData { container = overlayViewData } + this.renderMethod = View.RenderMethod.RENDER_METHOD_NONE } val overlayLayoutId = layoutIdAllocator.listLayoutId(node.layoutId) val layoutId = 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 d58bedc38e330f16d791aed4c64971357e030f9f..75f61d5cb520c482c676239b6b5e0afd3e2bdf5c 100644 GIT binary patch literal 34364 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 Ib;kGq2kS*vz5oCK