From 5fa4bc6b708db476d23e3abdfd01a96c2057d285 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Fri, 5 Nov 2021 10:10:12 +0100 Subject: [PATCH] Generate an init function for sub-components This allows something like this: ``` SubCompo := Rectangle { background: green; } App := Window { SubCompo {} } ``` --- sixtyfps_compiler/generator/rust.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/sixtyfps_compiler/generator/rust.rs b/sixtyfps_compiler/generator/rust.rs index 4daf540c2..63d7a7ad3 100644 --- a/sixtyfps_compiler/generator/rust.rs +++ b/sixtyfps_compiler/generator/rust.rs @@ -543,6 +543,9 @@ fn generate_component( let field_name = ident(&item.id); let sub_component_id = self::inner_component_id(sub_component); + // TODO: Use VRcMapped::map for sub-components + self.init.push(quote!(#sub_component_id::init(VRc::map(self_rc.clone(), |self_| Self::FIELD_OFFSETS.#field_name.apply_pin(self_)));)); + self.sub_component_names.push(field_name); self.sub_component_initializers.push(quote!(#sub_component_id::new())); self.sub_component_types.push(sub_component_id); @@ -1059,9 +1062,14 @@ fn generate_component( quote!( pub fn new() -> Self { #![allow(unused)] - use sixtyfps::re_exports::*; - #create_self - self_ + use sixtyfps::re_exports::*; + #create_self + self_ + } + pub fn init(self_rc: sixtyfps::re_exports::VRcMapped) { + #![allow(unused)] + let _self = self_rc.as_pin_ref(); + #(#init)* } ) } else {