diff --git a/crates/gpui/src/fonts.rs b/crates/gpui/src/fonts.rs index 4b46f8eb79..19ff468088 100644 --- a/crates/gpui/src/fonts.rs +++ b/crates/gpui/src/fonts.rs @@ -154,6 +154,10 @@ impl Refineable for TextStyleRefinement { self.underline = refinement.underline; } } + + fn refined(self, refinement: Self::Refinement) -> Self { + todo!() + } } #[derive(JsonSchema)] diff --git a/crates/gpui3/src/elements/nested.rs b/crates/gpui3/src/elements/nested.rs index ccfe5fb4c2..94b67886c1 100644 --- a/crates/gpui3/src/elements/nested.rs +++ b/crates/gpui3/src/elements/nested.rs @@ -2,7 +2,7 @@ use crate::{ group_bounds, AnyElement, DispatchPhase, Element, IntoAnyElement, MouseMoveEvent, SharedString, Style, StyleCascade, StyleRefinement, }; -use refineable::CascadeSlot; +use refineable::{CascadeSlot, Refineable}; use smallvec::SmallVec; use std::sync::{ atomic::{AtomicBool, Ordering::SeqCst}, @@ -237,7 +237,7 @@ impl Styled for LayoutNodeState { fn computed_style(&mut self) -> &Style { self.computed_style - .get_or_insert_with(|| Style::from(self.style_cascade.merged())) + .get_or_insert_with(|| Style::default().refined(self.style_cascade.merged())) } } diff --git a/crates/gpui3/src/styled.rs b/crates/gpui3/src/styled.rs index 0170b948fe..035749c196 100644 --- a/crates/gpui3/src/styled.rs +++ b/crates/gpui3/src/styled.rs @@ -7,10 +7,7 @@ pub trait Styled { fn declared_style(&mut self) -> &mut ::Refinement; fn computed_style(&mut self) -> Self::Style { - todo!() - // let x: StyleRefinement = self.style_cascade().merged(); - - // x.into(); + Self::Style::default().refined(self.style_cascade().merged()) } fn hover(self) -> Hoverable diff --git a/crates/refineable/derive_refineable/src/derive_refineable.rs b/crates/refineable/derive_refineable/src/derive_refineable.rs index ed233e1b0d..1462b48078 100644 --- a/crates/refineable/derive_refineable/src/derive_refineable.rs +++ b/crates/refineable/derive_refineable/src/derive_refineable.rs @@ -157,7 +157,7 @@ pub fn derive_refineable(input: TokenStream) -> TokenStream { }) .collect(); - let refinement_refined_assigments: Vec = fields + let refinement_refined_assignments: Vec = fields .iter() .map(|field| { let name = &field.ident; @@ -169,37 +169,14 @@ pub fn derive_refineable(input: TokenStream) -> TokenStream { } } else { quote! { - if let Some(value) = refinement.#name { - self.#name = Some(value); + if refinement.#name.is_some() { + self.#name = refinement.#name; } } } }) .collect(); - let from_refinement_assigments: Vec = fields - .iter() - .map(|field| { - let name = &field.ident; - let is_refineable = is_refineable_field(field); - let is_optional = is_optional_field(field); - - if is_refineable { - quote! { - #name: value.#name.into(), - } - } else if is_optional { - quote! { - #name: value.#name.map(|v| v.into()), - } - } else { - quote! { - #name: value.#name.map(|v| v.into()).unwrap_or_default(), - } - } - }) - .collect(); - let debug_impl = if impl_debug_on_refinement { let refinement_field_debugs: Vec = fields .iter() @@ -266,21 +243,11 @@ pub fn derive_refineable(input: TokenStream) -> TokenStream { } fn refined(mut self, refinement: Self::Refinement) -> Self { - #( #refinement_refined_assigments )* + #( #refinement_refined_assignments )* self } } - impl #impl_generics From<#refinement_ident #ty_generics> for #ident #ty_generics - #where_clause - { - fn from(value: #refinement_ident #ty_generics) -> Self { - Self { - #( #from_refinement_assigments )* - } - } - } - impl #impl_generics ::core::default::Default for #refinement_ident #ty_generics #where_clause { @@ -306,6 +273,7 @@ pub fn derive_refineable(input: TokenStream) -> TokenStream { #debug_impl }; + gen.into() }