#![feature(prelude_import)] #![allow(dead_code, unused_variables)] #[prelude_import] use std::prelude::rust_2021::*; #[macro_use] extern crate std; use color::black; use components::button; use element::Element; use frame::frame; use gpui::{ geometry::{rect::RectF, vector::vec2f}, platform::WindowOptions, }; use log::LevelFilter; use simplelog::SimpleLogger; use themes::{rose_pine, ThemeColors}; use view::view; mod adapter { use crate::element::{LayoutContext, PaintContext}; use gpui::{geometry::rect::RectF, LayoutEngine}; use util::ResultExt; use crate::element::AnyElement; pub struct Adapter(pub(crate) AnyElement); impl gpui::Element for Adapter { type LayoutState = Option; type PaintState = (); fn layout( &mut self, constraint: gpui::SizeConstraint, view: &mut V, cx: &mut LayoutContext, ) -> (gpui::geometry::vector::Vector2F, Self::LayoutState) { cx.push_layout_engine(LayoutEngine::new()); let node = self.0.layout(view, cx).log_err(); if let Some(node) = node { let layout_engine = cx.layout_engine().unwrap(); layout_engine.compute_layout(node, constraint.max).log_err(); } let layout_engine = cx.pop_layout_engine(); if true { if !layout_engine.is_some() { ::core::panicking::panic("assertion failed: layout_engine.is_some()") } } (constraint.max, layout_engine) } fn paint( &mut self, scene: &mut gpui::SceneBuilder, bounds: RectF, visible_bounds: RectF, layout_engine: &mut Option, view: &mut V, legacy_cx: &mut gpui::PaintContext, ) -> Self::PaintState { legacy_cx.push_layout_engine(layout_engine.take().unwrap()); let mut cx = PaintContext::new(legacy_cx, scene); self.0.paint(view, &mut cx).log_err(); *layout_engine = legacy_cx.pop_layout_engine(); if true { if !layout_engine.is_some() { ::core::panicking::panic("assertion failed: layout_engine.is_some()") } } } fn rect_for_text_range( &self, range_utf16: std::ops::Range, bounds: RectF, visible_bounds: RectF, layout: &Self::LayoutState, paint: &Self::PaintState, view: &V, cx: &gpui::ViewContext, ) -> Option { ::core::panicking::panic("not yet implemented") } fn debug( &self, bounds: RectF, layout: &Self::LayoutState, paint: &Self::PaintState, view: &V, cx: &gpui::ViewContext, ) -> gpui::serde_json::Value { ::core::panicking::panic("not yet implemented") } } } mod color { #![allow(dead_code)] use std::{num::ParseIntError, ops::Range}; use smallvec::SmallVec; pub fn rgb>(hex: u32) -> C { let r = ((hex >> 16) & 0xFF) as f32 / 255.0; let g = ((hex >> 8) & 0xFF) as f32 / 255.0; let b = (hex & 0xFF) as f32 / 255.0; Rgba { r, g, b, a: 1.0 }.into() } pub struct Rgba { pub r: f32, pub g: f32, pub b: f32, pub a: f32, } #[automatically_derived] impl ::core::clone::Clone for Rgba { #[inline] fn clone(&self) -> Rgba { let _: ::core::clone::AssertParamIsClone; *self } } #[automatically_derived] impl ::core::marker::Copy for Rgba {} #[automatically_derived] impl ::core::default::Default for Rgba { #[inline] fn default() -> Rgba { Rgba { r: ::core::default::Default::default(), g: ::core::default::Default::default(), b: ::core::default::Default::default(), a: ::core::default::Default::default(), } } } #[automatically_derived] impl ::core::fmt::Debug for Rgba { fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { ::core::fmt::Formatter::debug_struct_field4_finish( f, "Rgba", "r", &self.r, "g", &self.g, "b", &self.b, "a", &&self.a, ) } } pub trait Lerp { fn lerp(&self, level: f32) -> Hsla; } impl Lerp for Range { fn lerp(&self, level: f32) -> Hsla { let level = level.clamp(0., 1.); Hsla { h: self.start.h + (level * (self.end.h - self.start.h)), s: self.start.s + (level * (self.end.s - self.start.s)), l: self.start.l + (level * (self.end.l - self.start.l)), a: self.start.a + (level * (self.end.a - self.start.a)), } } } impl From for Rgba { fn from(value: gpui::color::Color) -> Self { Self { r: value.0.r as f32 / 255.0, g: value.0.g as f32 / 255.0, b: value.0.b as f32 / 255.0, a: value.0.a as f32 / 255.0, } } } impl From for Rgba { fn from(color: Hsla) -> Self { let h = color.h; let s = color.s; let l = color.l; let c = (1.0 - (2.0 * l - 1.0).abs()) * s; let x = c * (1.0 - ((h * 6.0) % 2.0 - 1.0).abs()); let m = l - c / 2.0; let cm = c + m; let xm = x + m; let (r, g, b) = match (h * 6.0).floor() as i32 { 0 | 6 => (cm, xm, m), 1 => (xm, cm, m), 2 => (m, cm, xm), 3 => (m, xm, cm), 4 => (xm, m, cm), _ => (cm, m, xm), }; Rgba { r, g, b, a: color.a } } } impl TryFrom<&'_ str> for Rgba { type Error = ParseIntError; fn try_from(value: &'_ str) -> Result { let r = u8::from_str_radix(&value[1..3], 16)? as f32 / 255.0; let g = u8::from_str_radix(&value[3..5], 16)? as f32 / 255.0; let b = u8::from_str_radix(&value[5..7], 16)? as f32 / 255.0; let a = if value.len() > 7 { u8::from_str_radix(&value[7..9], 16)? as f32 / 255.0 } else { 1.0 }; Ok(Rgba { r, g, b, a }) } } impl Into for Rgba { fn into(self) -> gpui::color::Color { gpui::color::rgba(self.r, self.g, self.b, self.a) } } pub struct Hsla { pub h: f32, pub s: f32, pub l: f32, pub a: f32, } #[automatically_derived] impl ::core::default::Default for Hsla { #[inline] fn default() -> Hsla { Hsla { h: ::core::default::Default::default(), s: ::core::default::Default::default(), l: ::core::default::Default::default(), a: ::core::default::Default::default(), } } } #[automatically_derived] impl ::core::marker::Copy for Hsla {} #[automatically_derived] impl ::core::clone::Clone for Hsla { #[inline] fn clone(&self) -> Hsla { let _: ::core::clone::AssertParamIsClone; *self } } #[automatically_derived] impl ::core::fmt::Debug for Hsla { fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { ::core::fmt::Formatter::debug_struct_field4_finish( f, "Hsla", "h", &self.h, "s", &self.s, "l", &self.l, "a", &&self.a, ) } } #[automatically_derived] impl ::core::marker::StructuralPartialEq for Hsla {} #[automatically_derived] impl ::core::cmp::PartialEq for Hsla { #[inline] fn eq(&self, other: &Hsla) -> bool { self.h == other.h && self.s == other.s && self.l == other.l && self.a == other.a } } pub fn hsla(h: f32, s: f32, l: f32, a: f32) -> Hsla { Hsla { h: h.clamp(0., 1.), s: s.clamp(0., 1.), l: l.clamp(0., 1.), a: a.clamp(0., 1.), } } pub fn black() -> Hsla { Hsla { h: 0., s: 0., l: 0., a: 1. } } impl From for Hsla { fn from(color: Rgba) -> Self { let r = color.r; let g = color.g; let b = color.b; let max = r.max(g.max(b)); let min = r.min(g.min(b)); let delta = max - min; let l = (max + min) / 2.0; let s = if l == 0.0 || l == 1.0 { 0.0 } else if l < 0.5 { delta / (2.0 * l) } else { delta / (2.0 - 2.0 * l) }; let h = if delta == 0.0 { 0.0 } else if max == r { ((g - b) / delta).rem_euclid(6.0) / 6.0 } else if max == g { ((b - r) / delta + 2.0) / 6.0 } else { ((r - g) / delta + 4.0) / 6.0 }; Hsla { h, s, l, a: color.a } } } impl Hsla { /// Scales the saturation and lightness by the given values, clamping at 1.0. pub fn scale_sl(mut self, s: f32, l: f32) -> Self { self.s = (self.s * s).clamp(0., 1.); self.l = (self.l * l).clamp(0., 1.); self } /// Increases the saturation of the color by a certain amount, with a max /// value of 1.0. pub fn saturate(mut self, amount: f32) -> Self { self.s += amount; self.s = self.s.clamp(0.0, 1.0); self } /// Decreases the saturation of the color by a certain amount, with a min /// value of 0.0. pub fn desaturate(mut self, amount: f32) -> Self { self.s -= amount; self.s = self.s.max(0.0); if self.s < 0.0 { self.s = 0.0; } self } /// Brightens the color by increasing the lightness by a certain amount, /// with a max value of 1.0. pub fn brighten(mut self, amount: f32) -> Self { self.l += amount; self.l = self.l.clamp(0.0, 1.0); self } /// Darkens the color by decreasing the lightness by a certain amount, /// with a max value of 0.0. pub fn darken(mut self, amount: f32) -> Self { self.l -= amount; self.l = self.l.clamp(0.0, 1.0); self } } impl From for Hsla { fn from(value: gpui::color::Color) -> Self { Rgba::from(value).into() } } impl Into for Hsla { fn into(self) -> gpui::color::Color { Rgba::from(self).into() } } pub struct ColorScale { colors: SmallVec<[Hsla; 2]>, positions: SmallVec<[f32; 2]>, } pub fn scale(colors: I) -> ColorScale where I: IntoIterator, C: Into, { let mut scale = ColorScale { colors: colors.into_iter().map(Into::into).collect(), positions: SmallVec::new(), }; let num_colors: f32 = scale.colors.len() as f32 - 1.0; scale .positions = (0..scale.colors.len()) .map(|i| i as f32 / num_colors) .collect(); scale } impl ColorScale { fn at(&self, t: f32) -> Hsla { if true { if !(0.0 <= t && t <= 1.0) { { ::core::panicking::panic_fmt( format_args!( "t value {0} is out of range. Expected value in range 0.0 to 1.0", t, ), ); } } } let position = match self .positions .binary_search_by(|a| a.partial_cmp(&t).unwrap()) { Ok(index) | Err(index) => index, }; let lower_bound = position.saturating_sub(1); let upper_bound = position.min(self.colors.len() - 1); let lower_color = &self.colors[lower_bound]; let upper_color = &self.colors[upper_bound]; match upper_bound.checked_sub(lower_bound) { Some(0) | None => *lower_color, Some(_) => { let interval_t = (t - self.positions[lower_bound]) / (self.positions[upper_bound] - self.positions[lower_bound]); let h = lower_color.h + interval_t * (upper_color.h - lower_color.h); let s = lower_color.s + interval_t * (upper_color.s - lower_color.s); let l = lower_color.l + interval_t * (upper_color.l - lower_color.l); let a = lower_color.a + interval_t * (upper_color.a - lower_color.a); Hsla { h, s, l, a } } } } } } mod components { use crate::{ element::{Element, ElementMetadata}, frame, text::ArcCow, themes::rose_pine, }; use gpui::{platform::MouseButton, ViewContext}; use playground_macros::Element; use std::{marker::PhantomData, rc::Rc}; struct ButtonHandlers { click: Option)>>, } impl Default for ButtonHandlers { fn default() -> Self { Self { click: None } } } #[element_crate = "crate"] pub struct Button { metadata: ElementMetadata, handlers: ButtonHandlers, label: Option>, icon: Option>, data: Rc, view_type: PhantomData, } impl crate::element::Element for Button { type Layout = crate::element::AnyElement; fn declared_style(&mut self) -> &mut crate::style::OptionalStyle { &mut self.metadata.style } fn handlers_mut(&mut self) -> &mut Vec> { &mut self.metadata.handlers } fn layout( &mut self, view: &mut V, cx: &mut crate::element::LayoutContext, ) -> anyhow::Result<(taffy::tree::NodeId, Self::Layout)> { let mut element = self.render(view, cx).into_any(); let node_id = element.layout(view, cx)?; Ok((node_id, element)) } fn paint<'a>( &mut self, layout: crate::element::Layout<'a, Self::Layout>, view: &mut V, cx: &mut crate::element::PaintContext, ) -> anyhow::Result<()> { layout.from_element.paint(view, cx)?; Ok(()) } } impl crate::element::IntoElement for Button { type Element = Self; fn into_element(self) -> Self { self } } impl Button { fn new() -> Self { Self { metadata: Default::default(), handlers: ButtonHandlers::default(), label: None, icon: None, data: Rc::new(()), view_type: PhantomData, } } pub fn data(self, data: D) -> Button { Button { metadata: Default::default(), handlers: ButtonHandlers::default(), label: self.label, icon: self.icon, data: Rc::new(data), view_type: PhantomData, } } } impl Button { pub fn label(mut self, label: impl Into>) -> Self { self.label = Some(label.into()); self } pub fn icon(mut self, icon: impl Into>) -> Self { self.icon = Some(icon.into()); self } pub fn click( self, handler: impl Fn(&mut V, &D, &mut ViewContext) + 'static, ) -> Self { let data = self.data.clone(); Element::click( self, MouseButton::Left, move |view, _, cx| { handler(view, data.as_ref(), cx); }, ) } } pub fn button() -> Button { Button::new() } impl Button { fn render(&mut self, view: &mut V, cx: &mut ViewContext) -> impl Element { let button = frame() .fill(rose_pine::dawn().error(0.5)) .h_4() .children(self.label.clone()); if let Some(handler) = self.handlers.click.clone() { let data = self.data.clone(); button .mouse_down( MouseButton::Left, move |view, event, cx| { handler(view, data.as_ref(), cx) }, ) } else { button } } } } mod element { use crate::{ adapter::Adapter, color::Hsla, hoverable::Hoverable, style::{Display, Fill, OptionalStyle, Overflow, Position}, }; use anyhow::Result; pub use gpui::LayoutContext; use gpui::{ geometry::{DefinedLength, Length, OptionalPoint}, platform::{MouseButton, MouseButtonEvent}, EngineLayout, EventContext, RenderContext, ViewContext, }; use playground_macros::tailwind_lengths; use std::{ any::{Any, TypeId}, cell::Cell, rc::Rc, }; pub use crate::paint_context::PaintContext; pub use taffy::tree::NodeId; pub struct Layout<'a, E: ?Sized> { pub from_engine: EngineLayout, pub from_element: &'a mut E, } pub struct ElementMetadata { pub style: OptionalStyle, pub handlers: Vec>, } pub struct EventHandler { handler: Rc)>, event_type: TypeId, outside_bounds: bool, } impl Clone for EventHandler { fn clone(&self) -> Self { Self { handler: self.handler.clone(), event_type: self.event_type, outside_bounds: self.outside_bounds, } } } impl Default for ElementMetadata { fn default() -> Self { Self { style: OptionalStyle::default(), handlers: Vec::new(), } } } pub trait Element: 'static { type Layout: 'static; fn declared_style(&mut self) -> &mut OptionalStyle; fn computed_style(&mut self) -> &OptionalStyle { self.declared_style() } fn handlers_mut(&mut self) -> &mut Vec>; fn layout( &mut self, view: &mut V, cx: &mut LayoutContext, ) -> Result<(NodeId, Self::Layout)>; fn paint<'a>( &mut self, layout: Layout, view: &mut V, cx: &mut PaintContext, ) -> Result<()>; /// Convert to a dynamically-typed element suitable for layout and paint. fn into_any(self) -> AnyElement where Self: 'static + Sized, { AnyElement { element: Box::new(self) as Box>, layout: None, } } fn adapt(self) -> Adapter where Self: Sized, Self: Element, { Adapter(self.into_any()) } fn click( self, button: MouseButton, handler: impl Fn(&mut V, &MouseButtonEvent, &mut ViewContext) + 'static, ) -> Self where Self: Sized, { let pressed: Rc> = Default::default(); self.mouse_down( button, { let pressed = pressed.clone(); move |_, _, _| { pressed.set(true); } }, ) .mouse_up_outside( button, { let pressed = pressed.clone(); move |_, _, _| { pressed.set(false); } }, ) .mouse_up( button, move |view, event, event_cx| { if pressed.get() { pressed.set(false); handler(view, event, event_cx); } }, ) } fn mouse_down( mut self, button: MouseButton, handler: impl Fn(&mut V, &MouseButtonEvent, &mut EventContext) + 'static, ) -> Self where Self: Sized, { self.handlers_mut() .push(EventHandler { handler: Rc::new(move |view, event, event_cx| { let event = event.downcast_ref::().unwrap(); if event.button == button && event.is_down { handler(view, event, event_cx); } }), event_type: TypeId::of::(), outside_bounds: false, }); self } fn mouse_down_outside( mut self, button: MouseButton, handler: impl Fn(&mut V, &MouseButtonEvent, &mut EventContext) + 'static, ) -> Self where Self: Sized, { self.handlers_mut() .push(EventHandler { handler: Rc::new(move |view, event, event_cx| { let event = event.downcast_ref::().unwrap(); if event.button == button && event.is_down { handler(view, event, event_cx); } }), event_type: TypeId::of::(), outside_bounds: true, }); self } fn mouse_up( mut self, button: MouseButton, handler: impl Fn(&mut V, &MouseButtonEvent, &mut EventContext) + 'static, ) -> Self where Self: Sized, { self.handlers_mut() .push(EventHandler { handler: Rc::new(move |view, event, event_cx| { let event = event.downcast_ref::().unwrap(); if event.button == button && !event.is_down { handler(view, event, event_cx); } }), event_type: TypeId::of::(), outside_bounds: false, }); self } fn mouse_up_outside( mut self, button: MouseButton, handler: impl Fn(&mut V, &MouseButtonEvent, &mut EventContext) + 'static, ) -> Self where Self: Sized, { self.handlers_mut() .push(EventHandler { handler: Rc::new(move |view, event, event_cx| { let event = event.downcast_ref::().unwrap(); if event.button == button && !event.is_down { handler(view, event, event_cx); } }), event_type: TypeId::of::(), outside_bounds: true, }); self } fn block(mut self) -> Self where Self: Sized, { self.declared_style().display = Some(Display::Block); self } fn flex(mut self) -> Self where Self: Sized, { self.declared_style().display = Some(Display::Flex); self } fn grid(mut self) -> Self where Self: Sized, { self.declared_style().display = Some(Display::Grid); self } fn overflow_visible(mut self) -> Self where Self: Sized, { self .declared_style() .overflow = OptionalPoint { x: Some(Overflow::Visible), y: Some(Overflow::Visible), }; self } fn overflow_hidden(mut self) -> Self where Self: Sized, { self .declared_style() .overflow = OptionalPoint { x: Some(Overflow::Hidden), y: Some(Overflow::Hidden), }; self } fn overflow_scroll(mut self) -> Self where Self: Sized, { self .declared_style() .overflow = OptionalPoint { x: Some(Overflow::Scroll), y: Some(Overflow::Scroll), }; self } fn overflow_x_visible(mut self) -> Self where Self: Sized, { self.declared_style().overflow.x = Some(Overflow::Visible); self } fn overflow_x_hidden(mut self) -> Self where Self: Sized, { self.declared_style().overflow.x = Some(Overflow::Hidden); self } fn overflow_x_scroll(mut self) -> Self where Self: Sized, { self.declared_style().overflow.x = Some(Overflow::Scroll); self } fn overflow_y_visible(mut self) -> Self where Self: Sized, { self.declared_style().overflow.y = Some(Overflow::Visible); self } fn overflow_y_hidden(mut self) -> Self where Self: Sized, { self.declared_style().overflow.y = Some(Overflow::Hidden); self } fn overflow_y_scroll(mut self) -> Self where Self: Sized, { self.declared_style().overflow.y = Some(Overflow::Scroll); self } fn relative(mut self) -> Self where Self: Sized, { self.declared_style().position = Some(Position::Relative); self } fn absolute(mut self) -> Self where Self: Sized, { self.declared_style().position = Some(Position::Absolute); self } fn inset_0(mut self) -> Self where Self: Sized, { let length = DefinedLength::Pixels(0.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_px(mut self) -> Self where Self: Sized, { let length = DefinedLength::Pixels(1.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_0_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.125).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_1(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.25).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_1_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.375).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_2(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.5).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_2_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.625).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_3(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.75).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_3_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.875).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_4(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(1.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(1.25).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_6(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(1.5).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_7(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(1.75).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_8(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(2.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_9(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(2.25).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_10(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(2.5).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_11(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(2.75).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_12(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(3.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_14(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(3.5).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_16(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(4.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_20(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(5.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_24(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(6.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_28(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(7.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_32(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(8.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_36(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(9.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_40(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(10.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_44(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(11.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_48(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(12.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_52(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(13.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_56(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(14.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_60(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(15.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_64(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(16.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_72(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(18.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_80(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(20.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_96(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(24.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_half(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(50.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_1_3rd(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(33.333333).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_2_3rd(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(66.666667).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_1_4th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(25.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_2_4th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(50.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_3_4th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(75.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_1_5th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(20.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_2_5th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(40.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_3_5th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(60.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_4_5th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(80.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_1_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(16.666667).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_2_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(33.333333).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_3_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(50.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_4_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(66.666667).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_5_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(83.333333).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_1_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(8.333333).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_2_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(16.666667).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_3_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(25.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_4_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(33.333333).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_5_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(41.666667).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_6_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(50.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_7_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(58.333333).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_8_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(66.666667).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_9_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(75.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_10_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(83.333333).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_11_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(91.666667).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn inset_full(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(100.).into(); { let inset = self .computed_style() .inset .get_or_insert_with(Default::default); inset.top = length; inset.right = length; inset.bottom = length; inset.left = length; self } } fn w(mut self, width: impl Into) -> Self where Self: Sized, { self.declared_style().size.width = Some(width.into()); self } fn w_auto(mut self) -> Self where Self: Sized, { self.declared_style().size.width = Some(Length::Auto); self } fn w_0(mut self) -> Self where Self: Sized, { let length = DefinedLength::Pixels(0.).into(); { self.declared_style().size.width = Some(length); self } } fn w_px(mut self) -> Self where Self: Sized, { let length = DefinedLength::Pixels(1.).into(); { self.declared_style().size.width = Some(length); self } } fn w_0_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.125).into(); { self.declared_style().size.width = Some(length); self } } fn w_1(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.25).into(); { self.declared_style().size.width = Some(length); self } } fn w_1_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.375).into(); { self.declared_style().size.width = Some(length); self } } fn w_2(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.5).into(); { self.declared_style().size.width = Some(length); self } } fn w_2_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.625).into(); { self.declared_style().size.width = Some(length); self } } fn w_3(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.75).into(); { self.declared_style().size.width = Some(length); self } } fn w_3_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.875).into(); { self.declared_style().size.width = Some(length); self } } fn w_4(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(1.).into(); { self.declared_style().size.width = Some(length); self } } fn w_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(1.25).into(); { self.declared_style().size.width = Some(length); self } } fn w_6(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(1.5).into(); { self.declared_style().size.width = Some(length); self } } fn w_7(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(1.75).into(); { self.declared_style().size.width = Some(length); self } } fn w_8(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(2.).into(); { self.declared_style().size.width = Some(length); self } } fn w_9(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(2.25).into(); { self.declared_style().size.width = Some(length); self } } fn w_10(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(2.5).into(); { self.declared_style().size.width = Some(length); self } } fn w_11(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(2.75).into(); { self.declared_style().size.width = Some(length); self } } fn w_12(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(3.).into(); { self.declared_style().size.width = Some(length); self } } fn w_14(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(3.5).into(); { self.declared_style().size.width = Some(length); self } } fn w_16(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(4.).into(); { self.declared_style().size.width = Some(length); self } } fn w_20(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(5.).into(); { self.declared_style().size.width = Some(length); self } } fn w_24(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(6.).into(); { self.declared_style().size.width = Some(length); self } } fn w_28(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(7.).into(); { self.declared_style().size.width = Some(length); self } } fn w_32(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(8.).into(); { self.declared_style().size.width = Some(length); self } } fn w_36(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(9.).into(); { self.declared_style().size.width = Some(length); self } } fn w_40(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(10.).into(); { self.declared_style().size.width = Some(length); self } } fn w_44(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(11.).into(); { self.declared_style().size.width = Some(length); self } } fn w_48(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(12.).into(); { self.declared_style().size.width = Some(length); self } } fn w_52(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(13.).into(); { self.declared_style().size.width = Some(length); self } } fn w_56(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(14.).into(); { self.declared_style().size.width = Some(length); self } } fn w_60(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(15.).into(); { self.declared_style().size.width = Some(length); self } } fn w_64(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(16.).into(); { self.declared_style().size.width = Some(length); self } } fn w_72(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(18.).into(); { self.declared_style().size.width = Some(length); self } } fn w_80(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(20.).into(); { self.declared_style().size.width = Some(length); self } } fn w_96(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(24.).into(); { self.declared_style().size.width = Some(length); self } } fn w_half(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(50.).into(); { self.declared_style().size.width = Some(length); self } } fn w_1_3rd(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(33.333333).into(); { self.declared_style().size.width = Some(length); self } } fn w_2_3rd(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(66.666667).into(); { self.declared_style().size.width = Some(length); self } } fn w_1_4th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(25.).into(); { self.declared_style().size.width = Some(length); self } } fn w_2_4th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(50.).into(); { self.declared_style().size.width = Some(length); self } } fn w_3_4th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(75.).into(); { self.declared_style().size.width = Some(length); self } } fn w_1_5th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(20.).into(); { self.declared_style().size.width = Some(length); self } } fn w_2_5th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(40.).into(); { self.declared_style().size.width = Some(length); self } } fn w_3_5th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(60.).into(); { self.declared_style().size.width = Some(length); self } } fn w_4_5th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(80.).into(); { self.declared_style().size.width = Some(length); self } } fn w_1_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(16.666667).into(); { self.declared_style().size.width = Some(length); self } } fn w_2_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(33.333333).into(); { self.declared_style().size.width = Some(length); self } } fn w_3_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(50.).into(); { self.declared_style().size.width = Some(length); self } } fn w_4_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(66.666667).into(); { self.declared_style().size.width = Some(length); self } } fn w_5_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(83.333333).into(); { self.declared_style().size.width = Some(length); self } } fn w_1_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(8.333333).into(); { self.declared_style().size.width = Some(length); self } } fn w_2_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(16.666667).into(); { self.declared_style().size.width = Some(length); self } } fn w_3_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(25.).into(); { self.declared_style().size.width = Some(length); self } } fn w_4_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(33.333333).into(); { self.declared_style().size.width = Some(length); self } } fn w_5_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(41.666667).into(); { self.declared_style().size.width = Some(length); self } } fn w_6_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(50.).into(); { self.declared_style().size.width = Some(length); self } } fn w_7_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(58.333333).into(); { self.declared_style().size.width = Some(length); self } } fn w_8_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(66.666667).into(); { self.declared_style().size.width = Some(length); self } } fn w_9_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(75.).into(); { self.declared_style().size.width = Some(length); self } } fn w_10_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(83.333333).into(); { self.declared_style().size.width = Some(length); self } } fn w_11_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(91.666667).into(); { self.declared_style().size.width = Some(length); self } } fn w_full(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(100.).into(); { self.declared_style().size.width = Some(length); self } } fn min_w_0(mut self) -> Self where Self: Sized, { let length = DefinedLength::Pixels(0.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_px(mut self) -> Self where Self: Sized, { let length = DefinedLength::Pixels(1.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_0_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.125).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_1(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.25).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_1_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.375).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_2(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.5).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_2_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.625).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_3(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.75).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_3_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.875).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_4(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(1.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(1.25).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_6(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(1.5).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_7(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(1.75).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_8(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(2.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_9(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(2.25).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_10(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(2.5).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_11(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(2.75).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_12(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(3.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_14(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(3.5).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_16(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(4.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_20(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(5.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_24(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(6.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_28(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(7.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_32(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(8.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_36(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(9.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_40(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(10.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_44(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(11.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_48(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(12.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_52(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(13.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_56(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(14.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_60(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(15.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_64(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(16.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_72(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(18.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_80(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(20.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_96(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(24.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_half(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(50.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_1_3rd(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(33.333333).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_2_3rd(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(66.666667).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_1_4th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(25.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_2_4th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(50.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_3_4th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(75.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_1_5th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(20.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_2_5th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(40.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_3_5th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(60.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_4_5th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(80.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_1_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(16.666667).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_2_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(33.333333).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_3_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(50.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_4_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(66.666667).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_5_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(83.333333).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_1_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(8.333333).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_2_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(16.666667).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_3_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(25.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_4_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(33.333333).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_5_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(41.666667).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_6_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(50.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_7_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(58.333333).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_8_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(66.666667).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_9_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(75.).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_10_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(83.333333).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_11_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(91.666667).into(); { self.declared_style().min_size.width = Some(length); self } } fn min_w_full(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(100.).into(); { self.declared_style().min_size.width = Some(length); self } } fn h(mut self, height: impl Into) -> Self where Self: Sized, { self.declared_style().size.height = Some(height.into()); self } fn h_auto(mut self) -> Self where Self: Sized, { self.declared_style().size.height = Some(Length::Auto); self } fn h_0(mut self) -> Self where Self: Sized, { let height = DefinedLength::Pixels(0.).into(); { self.declared_style().size.height = Some(height); self } } fn h_px(mut self) -> Self where Self: Sized, { let height = DefinedLength::Pixels(1.).into(); { self.declared_style().size.height = Some(height); self } } fn h_0_5(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(0.125).into(); { self.declared_style().size.height = Some(height); self } } fn h_1(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(0.25).into(); { self.declared_style().size.height = Some(height); self } } fn h_1_5(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(0.375).into(); { self.declared_style().size.height = Some(height); self } } fn h_2(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(0.5).into(); { self.declared_style().size.height = Some(height); self } } fn h_2_5(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(0.625).into(); { self.declared_style().size.height = Some(height); self } } fn h_3(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(0.75).into(); { self.declared_style().size.height = Some(height); self } } fn h_3_5(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(0.875).into(); { self.declared_style().size.height = Some(height); self } } fn h_4(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(1.).into(); { self.declared_style().size.height = Some(height); self } } fn h_5(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(1.25).into(); { self.declared_style().size.height = Some(height); self } } fn h_6(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(1.5).into(); { self.declared_style().size.height = Some(height); self } } fn h_7(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(1.75).into(); { self.declared_style().size.height = Some(height); self } } fn h_8(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(2.).into(); { self.declared_style().size.height = Some(height); self } } fn h_9(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(2.25).into(); { self.declared_style().size.height = Some(height); self } } fn h_10(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(2.5).into(); { self.declared_style().size.height = Some(height); self } } fn h_11(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(2.75).into(); { self.declared_style().size.height = Some(height); self } } fn h_12(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(3.).into(); { self.declared_style().size.height = Some(height); self } } fn h_14(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(3.5).into(); { self.declared_style().size.height = Some(height); self } } fn h_16(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(4.).into(); { self.declared_style().size.height = Some(height); self } } fn h_20(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(5.).into(); { self.declared_style().size.height = Some(height); self } } fn h_24(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(6.).into(); { self.declared_style().size.height = Some(height); self } } fn h_28(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(7.).into(); { self.declared_style().size.height = Some(height); self } } fn h_32(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(8.).into(); { self.declared_style().size.height = Some(height); self } } fn h_36(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(9.).into(); { self.declared_style().size.height = Some(height); self } } fn h_40(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(10.).into(); { self.declared_style().size.height = Some(height); self } } fn h_44(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(11.).into(); { self.declared_style().size.height = Some(height); self } } fn h_48(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(12.).into(); { self.declared_style().size.height = Some(height); self } } fn h_52(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(13.).into(); { self.declared_style().size.height = Some(height); self } } fn h_56(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(14.).into(); { self.declared_style().size.height = Some(height); self } } fn h_60(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(15.).into(); { self.declared_style().size.height = Some(height); self } } fn h_64(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(16.).into(); { self.declared_style().size.height = Some(height); self } } fn h_72(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(18.).into(); { self.declared_style().size.height = Some(height); self } } fn h_80(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(20.).into(); { self.declared_style().size.height = Some(height); self } } fn h_96(mut self) -> Self where Self: Sized, { let height = DefinedLength::Rems(24.).into(); { self.declared_style().size.height = Some(height); self } } fn h_half(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(50.).into(); { self.declared_style().size.height = Some(height); self } } fn h_1_3rd(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(33.333333).into(); { self.declared_style().size.height = Some(height); self } } fn h_2_3rd(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(66.666667).into(); { self.declared_style().size.height = Some(height); self } } fn h_1_4th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(25.).into(); { self.declared_style().size.height = Some(height); self } } fn h_2_4th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(50.).into(); { self.declared_style().size.height = Some(height); self } } fn h_3_4th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(75.).into(); { self.declared_style().size.height = Some(height); self } } fn h_1_5th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(20.).into(); { self.declared_style().size.height = Some(height); self } } fn h_2_5th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(40.).into(); { self.declared_style().size.height = Some(height); self } } fn h_3_5th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(60.).into(); { self.declared_style().size.height = Some(height); self } } fn h_4_5th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(80.).into(); { self.declared_style().size.height = Some(height); self } } fn h_1_6th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(16.666667).into(); { self.declared_style().size.height = Some(height); self } } fn h_2_6th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(33.333333).into(); { self.declared_style().size.height = Some(height); self } } fn h_3_6th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(50.).into(); { self.declared_style().size.height = Some(height); self } } fn h_4_6th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(66.666667).into(); { self.declared_style().size.height = Some(height); self } } fn h_5_6th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(83.333333).into(); { self.declared_style().size.height = Some(height); self } } fn h_1_12th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(8.333333).into(); { self.declared_style().size.height = Some(height); self } } fn h_2_12th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(16.666667).into(); { self.declared_style().size.height = Some(height); self } } fn h_3_12th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(25.).into(); { self.declared_style().size.height = Some(height); self } } fn h_4_12th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(33.333333).into(); { self.declared_style().size.height = Some(height); self } } fn h_5_12th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(41.666667).into(); { self.declared_style().size.height = Some(height); self } } fn h_6_12th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(50.).into(); { self.declared_style().size.height = Some(height); self } } fn h_7_12th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(58.333333).into(); { self.declared_style().size.height = Some(height); self } } fn h_8_12th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(66.666667).into(); { self.declared_style().size.height = Some(height); self } } fn h_9_12th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(75.).into(); { self.declared_style().size.height = Some(height); self } } fn h_10_12th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(83.333333).into(); { self.declared_style().size.height = Some(height); self } } fn h_11_12th(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(91.666667).into(); { self.declared_style().size.height = Some(height); self } } fn h_full(mut self) -> Self where Self: Sized, { let height = DefinedLength::Percent(100.).into(); { self.declared_style().size.height = Some(height); self } } fn min_h_0(mut self) -> Self where Self: Sized, { let length = DefinedLength::Pixels(0.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_px(mut self) -> Self where Self: Sized, { let length = DefinedLength::Pixels(1.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_0_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.125).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_1(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.25).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_1_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.375).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_2(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.5).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_2_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.625).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_3(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.75).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_3_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(0.875).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_4(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(1.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_5(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(1.25).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_6(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(1.5).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_7(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(1.75).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_8(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(2.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_9(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(2.25).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_10(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(2.5).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_11(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(2.75).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_12(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(3.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_14(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(3.5).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_16(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(4.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_20(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(5.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_24(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(6.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_28(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(7.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_32(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(8.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_36(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(9.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_40(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(10.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_44(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(11.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_48(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(12.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_52(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(13.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_56(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(14.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_60(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(15.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_64(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(16.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_72(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(18.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_80(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(20.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_96(mut self) -> Self where Self: Sized, { let length = DefinedLength::Rems(24.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_half(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(50.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_1_3rd(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(33.333333).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_2_3rd(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(66.666667).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_1_4th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(25.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_2_4th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(50.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_3_4th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(75.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_1_5th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(20.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_2_5th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(40.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_3_5th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(60.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_4_5th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(80.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_1_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(16.666667).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_2_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(33.333333).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_3_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(50.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_4_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(66.666667).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_5_6th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(83.333333).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_1_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(8.333333).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_2_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(16.666667).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_3_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(25.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_4_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(33.333333).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_5_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(41.666667).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_6_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(50.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_7_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(58.333333).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_8_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(66.666667).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_9_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(75.).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_10_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(83.333333).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_11_12th(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(91.666667).into(); { self.declared_style().min_size.height = Some(length); self } } fn min_h_full(mut self) -> Self where Self: Sized, { let length = DefinedLength::Percent(100.).into(); { self.declared_style().min_size.height = Some(length); self } } fn hoverable(self) -> Hoverable where Self: Sized, { Hoverable::new(self) } fn fill(mut self, fill: impl Into) -> Self where Self: Sized, { self.declared_style().fill = Some(Some(fill.into())); self } fn text_color(mut self, color: impl Into) -> Self where Self: Sized, { self.declared_style().text_color = Some(Some(color.into())); self } } trait ElementObject { fn style(&mut self) -> &mut OptionalStyle; fn handlers_mut(&mut self) -> &mut Vec>; fn layout( &mut self, view: &mut V, cx: &mut LayoutContext, ) -> Result<(NodeId, Box)>; fn paint( &mut self, layout: Layout, view: &mut V, cx: &mut PaintContext, ) -> Result<()>; } impl> ElementObject for E { fn style(&mut self) -> &mut OptionalStyle { Element::declared_style(self) } fn handlers_mut(&mut self) -> &mut Vec> { Element::handlers_mut(self) } fn layout( &mut self, view: &mut V, cx: &mut LayoutContext, ) -> Result<(NodeId, Box)> { let (node_id, layout) = self.layout(view, cx)?; let layout = Box::new(layout) as Box; Ok((node_id, layout)) } fn paint( &mut self, layout: Layout, view: &mut V, cx: &mut PaintContext, ) -> Result<()> { let layout = Layout { from_engine: layout.from_engine, from_element: layout.from_element.downcast_mut::().unwrap(), }; self.paint(layout, view, cx) } } /// A dynamically typed element. pub struct AnyElement { element: Box>, layout: Option<(NodeId, Box)>, } impl AnyElement { pub fn layout( &mut self, view: &mut V, cx: &mut LayoutContext, ) -> Result { let pushed_text_style = self.push_text_style(cx); let (node_id, layout) = self.element.layout(view, cx)?; self.layout = Some((node_id, layout)); if pushed_text_style { cx.pop_text_style(); } Ok(node_id) } pub fn push_text_style(&mut self, cx: &mut impl RenderContext) -> bool { let text_style = self.element.style().text_style(); if let Some(text_style) = text_style { let mut current_text_style = cx.text_style(); text_style.apply(&mut current_text_style); cx.push_text_style(current_text_style); true } else { false } } pub fn paint(&mut self, view: &mut V, cx: &mut PaintContext) -> Result<()> { let pushed_text_style = self.push_text_style(cx); let (layout_node_id, element_layout) = self .layout .as_mut() .expect("paint called before layout"); let layout = Layout { from_engine: cx .layout_engine() .unwrap() .computed_layout(*layout_node_id) .expect( "you can currently only use playground elements within an adapter", ), from_element: element_layout.as_mut(), }; let style = self.element.style(); let fill_color = style.fill.flatten().and_then(|fill| fill.color()); if let Some(fill_color) = fill_color { cx.scene .push_quad(gpui::scene::Quad { bounds: layout.from_engine.bounds, background: Some(fill_color.into()), border: Default::default(), corner_radii: Default::default(), }); } for event_handler in self.element.handlers_mut().iter().cloned() { let EngineLayout { order, bounds } = layout.from_engine; let view_id = cx.view_id(); let view_event_handler = event_handler.handler.clone(); cx.scene .interactive_regions .push(gpui::scene::InteractiveRegion { order, bounds, outside_bounds: event_handler.outside_bounds, event_handler: Rc::new(move |view, event, window_cx, view_id| { let mut view_context = ViewContext::mutable( window_cx, view_id, ); let mut event_context = EventContext::new(&mut view_context); view_event_handler( view.downcast_mut().unwrap(), event, &mut event_context, ); }), event_type: event_handler.event_type, view_id, }); } self.element.paint(layout, view, cx)?; if pushed_text_style { cx.pop_text_style(); } Ok(()) } } impl Element for AnyElement { type Layout = (); fn declared_style(&mut self) -> &mut OptionalStyle { self.element.style() } fn handlers_mut(&mut self) -> &mut Vec> { self.element.handlers_mut() } fn layout( &mut self, view: &mut V, cx: &mut LayoutContext, ) -> Result<(NodeId, Self::Layout)> { Ok((self.layout(view, cx)?, ())) } fn paint( &mut self, layout: Layout<()>, view: &mut V, cx: &mut PaintContext, ) -> Result<()> { self.paint(view, cx) } } pub trait IntoElement { type Element: Element; fn into_element(self) -> Self::Element; fn into_any_element(self) -> AnyElement where Self: Sized, { self.into_element().into_any() } } } mod frame { use crate::{ element::{ AnyElement, Element, EventHandler, IntoElement, Layout, LayoutContext, NodeId, PaintContext, }, style::{OptionalStyle, Style}, }; use anyhow::{anyhow, Result}; use gpui::LayoutNodeId; use playground_macros::IntoElement; #[element_crate = "crate"] pub struct Frame { style: OptionalStyle, handlers: Vec>, children: Vec>, } impl crate::element::IntoElement for Frame { type Element = Self; fn into_element(self) -> Self { self } } pub fn frame() -> Frame { Frame { style: OptionalStyle::default(), handlers: Vec::new(), children: Vec::new(), } } impl Element for Frame { type Layout = (); fn declared_style(&mut self) -> &mut OptionalStyle { &mut self.style } fn handlers_mut(&mut self) -> &mut Vec> { &mut self.handlers } fn layout( &mut self, view: &mut V, cx: &mut LayoutContext, ) -> Result<(NodeId, Self::Layout)> { let child_layout_node_ids = self .children .iter_mut() .map(|child| child.layout(view, cx)) .collect::>>()?; let rem_size = cx.rem_pixels(); let style: Style = self.style.into(); let node_id = cx .layout_engine() .ok_or_else(|| ::anyhow::__private::must_use({ let error = ::anyhow::__private::format_err( format_args!("no layout engine"), ); error }))? .add_node(style.to_taffy(rem_size), child_layout_node_ids)?; Ok((node_id, ())) } fn paint( &mut self, layout: Layout<()>, view: &mut V, cx: &mut PaintContext, ) -> Result<()> { for child in &mut self.children { child.paint(view, cx)?; } Ok(()) } } impl Frame { pub fn child(mut self, child: impl IntoElement) -> Self { self.children.push(child.into_any_element()); self } pub fn children(mut self, children: I) -> Self where I: IntoIterator, E: IntoElement, { self.children.extend(children.into_iter().map(|e| e.into_any_element())); self } } } mod hoverable { use std::{cell::Cell, marker::PhantomData, rc::Rc}; use gpui::{ geometry::{rect::RectF, vector::Vector2F}, scene::MouseMove, EngineLayout, }; use crate::{element::Element, style::{OptionalStyle, Style}}; pub struct Hoverable { hover_style: OptionalStyle, computed_style: Option