WIP - Next: implement Element derive macro
This commit is contained in:
@@ -16,7 +16,7 @@ doctest = false
|
||||
[dependencies]
|
||||
collections = { path = "../collections" }
|
||||
gpui_macros = { path = "../gpui_macros" }
|
||||
gpui2_macros = { path = "../gpui2_macros" }
|
||||
gpui3_macros = { path = "../gpui3_macros" }
|
||||
util = { path = "../util" }
|
||||
sum_tree = { path = "../sum_tree" }
|
||||
sqlez = { path = "../sqlez" }
|
||||
|
||||
@@ -32,6 +32,15 @@ pub trait ParentElement<S> {
|
||||
self.children_mut().push(child.into_any());
|
||||
self
|
||||
}
|
||||
|
||||
fn children(mut self, iter: impl IntoIterator<Item = impl IntoAnyElement<S>>) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.children_mut()
|
||||
.extend(iter.into_iter().map(|item| item.into_any()));
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
trait ElementObject<S> {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use crate::{
|
||||
AnyElement, Bounds, Element, Layout, LayoutId, Overflow, ParentElement, Pixels, Point,
|
||||
Refineable, RefinementCascade, Result, Style, Styled, ViewContext,
|
||||
Refineable, RefinementCascade, Result, Style, StyleHelpers, Styled, ViewContext,
|
||||
};
|
||||
use smallvec::SmallVec;
|
||||
use std::{cell::Cell, rc::Rc};
|
||||
@@ -257,6 +257,8 @@ impl<V> Styled for Div<V> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<V> StyleHelpers for Div<V> {}
|
||||
|
||||
// impl<V> Interactive<V> for Div<V> {
|
||||
// fn interaction_handlers(&mut self) -> &mut InteractionHandlers<V> {
|
||||
// &mut self.handlers
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::{Element, Layout, LayoutId, Result, Style, Styled};
|
||||
use crate::{Element, Layout, LayoutId, Result, Style, StyleHelpers, Styled};
|
||||
use refineable::RefinementCascade;
|
||||
use std::marker::PhantomData;
|
||||
use util::arc_cow::ArcCow;
|
||||
@@ -98,3 +98,5 @@ impl<S> Styled for Img<S> {
|
||||
self.style.base()
|
||||
}
|
||||
}
|
||||
|
||||
impl<S> StyleHelpers for Img<S> {}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::{Element, Layout, LayoutId, Result, Style, Styled};
|
||||
use crate::{Element, Layout, LayoutId, Result, Style, StyleHelpers, Styled};
|
||||
use refineable::RefinementCascade;
|
||||
use std::{borrow::Cow, marker::PhantomData};
|
||||
|
||||
@@ -77,3 +77,5 @@ impl<S> Styled for Svg<S> {
|
||||
self.style.base()
|
||||
}
|
||||
}
|
||||
|
||||
impl<S> StyleHelpers for Svg<S> {}
|
||||
|
||||
@@ -100,8 +100,8 @@ impl From<Size<Option<Pixels>>> for Size<Option<f32>> {
|
||||
impl Size<Length> {
|
||||
pub fn full() -> Self {
|
||||
Self {
|
||||
width: relative(1.),
|
||||
height: relative(1.),
|
||||
width: relative(1.).into(),
|
||||
height: relative(1.).into(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -410,7 +410,7 @@ impl Debug for Length {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn relative<T: From<DefiniteLength>>(fraction: f32) -> T {
|
||||
pub fn relative(fraction: f32) -> DefiniteLength {
|
||||
DefiniteLength::Fraction(fraction).into()
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ mod platform;
|
||||
mod renderer;
|
||||
mod scene;
|
||||
mod style;
|
||||
mod style_helpers;
|
||||
mod styled;
|
||||
mod taffy;
|
||||
mod text_system;
|
||||
@@ -30,6 +31,7 @@ pub use smallvec;
|
||||
pub use smol::Timer;
|
||||
use std::ops::{Deref, DerefMut};
|
||||
pub use style::*;
|
||||
pub use style_helpers::*;
|
||||
pub use styled::*;
|
||||
use taffy::TaffyLayoutEngine;
|
||||
pub use taffy::{AvailableSpace, LayoutId};
|
||||
|
||||
@@ -289,10 +289,10 @@ impl From<Hsla> for Fill {
|
||||
#[derive(Clone, Refineable, Default, Debug)]
|
||||
#[refineable(debug)]
|
||||
pub struct CornerRadii {
|
||||
top_left: AbsoluteLength,
|
||||
top_right: AbsoluteLength,
|
||||
bottom_left: AbsoluteLength,
|
||||
bottom_right: AbsoluteLength,
|
||||
pub top_left: AbsoluteLength,
|
||||
pub top_right: AbsoluteLength,
|
||||
pub bottom_left: AbsoluteLength,
|
||||
pub bottom_right: AbsoluteLength,
|
||||
}
|
||||
|
||||
impl From<TextStyle> for HighlightStyle {
|
||||
|
||||
@@ -0,0 +1,288 @@
|
||||
use crate::{
|
||||
self as gpui2, relative, rems, AlignItems, Display, Fill, FlexDirection, Hsla, JustifyContent,
|
||||
Length, Position, SharedString, Style, Styled,
|
||||
};
|
||||
|
||||
pub trait StyleHelpers: Styled<Style = Style> {
|
||||
gpui3_macros::style_helpers!();
|
||||
|
||||
fn h(mut self, height: Length) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().size.height = Some(height);
|
||||
self
|
||||
}
|
||||
|
||||
/// size_{n}: Sets width & height to {n}
|
||||
///
|
||||
/// Example:
|
||||
/// size_1: Sets width & height to 1
|
||||
fn size(mut self, size: Length) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().size.height = Some(size);
|
||||
self.declared_style().size.width = Some(size);
|
||||
self
|
||||
}
|
||||
|
||||
fn full(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().size.width = Some(relative(1.).into());
|
||||
self.declared_style().size.height = Some(relative(1.).into());
|
||||
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 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 flex_col(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().flex_direction = Some(FlexDirection::Column);
|
||||
self
|
||||
}
|
||||
|
||||
fn flex_row(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().flex_direction = Some(FlexDirection::Row);
|
||||
self
|
||||
}
|
||||
|
||||
fn flex_1(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().flex_grow = Some(1.);
|
||||
self.declared_style().flex_shrink = Some(1.);
|
||||
self.declared_style().flex_basis = Some(relative(0.).into());
|
||||
self
|
||||
}
|
||||
|
||||
fn flex_auto(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().flex_grow = Some(1.);
|
||||
self.declared_style().flex_shrink = Some(1.);
|
||||
self.declared_style().flex_basis = Some(Length::Auto);
|
||||
self
|
||||
}
|
||||
|
||||
fn flex_initial(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().flex_grow = Some(0.);
|
||||
self.declared_style().flex_shrink = Some(1.);
|
||||
self.declared_style().flex_basis = Some(Length::Auto);
|
||||
self
|
||||
}
|
||||
|
||||
fn flex_none(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().flex_grow = Some(0.);
|
||||
self.declared_style().flex_shrink = Some(0.);
|
||||
self
|
||||
}
|
||||
|
||||
fn grow(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().flex_grow = Some(1.);
|
||||
self
|
||||
}
|
||||
|
||||
fn items_start(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().align_items = Some(AlignItems::FlexStart);
|
||||
self
|
||||
}
|
||||
|
||||
fn items_end(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().align_items = Some(AlignItems::FlexEnd);
|
||||
self
|
||||
}
|
||||
|
||||
fn items_center(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().align_items = Some(AlignItems::Center);
|
||||
self
|
||||
}
|
||||
|
||||
fn justify_between(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().justify_content = Some(JustifyContent::SpaceBetween);
|
||||
self
|
||||
}
|
||||
|
||||
fn justify_center(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().justify_content = Some(JustifyContent::Center);
|
||||
self
|
||||
}
|
||||
|
||||
fn justify_start(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().justify_content = Some(JustifyContent::Start);
|
||||
self
|
||||
}
|
||||
|
||||
fn justify_end(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().justify_content = Some(JustifyContent::End);
|
||||
self
|
||||
}
|
||||
|
||||
fn justify_around(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().justify_content = Some(JustifyContent::SpaceAround);
|
||||
self
|
||||
}
|
||||
|
||||
fn fill<F>(mut self, fill: F) -> Self
|
||||
where
|
||||
F: Into<Fill>,
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().fill = Some(fill.into());
|
||||
self
|
||||
}
|
||||
|
||||
fn border_color<C>(mut self, border_color: C) -> Self
|
||||
where
|
||||
C: Into<Hsla>,
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().border_color = Some(border_color.into());
|
||||
self
|
||||
}
|
||||
|
||||
fn text_color<C>(mut self, color: C) -> Self
|
||||
where
|
||||
C: Into<Hsla>,
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().text_color = Some(color.into());
|
||||
self
|
||||
}
|
||||
|
||||
fn text_xs(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().font_size = Some(rems(0.75));
|
||||
self
|
||||
}
|
||||
|
||||
fn text_sm(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().font_size = Some(rems(0.875));
|
||||
self
|
||||
}
|
||||
|
||||
fn text_base(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().font_size = Some(rems(1.0));
|
||||
self
|
||||
}
|
||||
|
||||
fn text_lg(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().font_size = Some(rems(1.125));
|
||||
self
|
||||
}
|
||||
|
||||
fn text_xl(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().font_size = Some(rems(1.25));
|
||||
self
|
||||
}
|
||||
|
||||
fn text_2xl(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().font_size = Some(rems(1.5));
|
||||
self
|
||||
}
|
||||
|
||||
fn text_3xl(mut self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().font_size = Some(rems(1.875));
|
||||
self
|
||||
}
|
||||
|
||||
fn font(mut self, family_name: impl Into<SharedString>) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
self.declared_style().font_family = Some(family_name.into());
|
||||
self
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user