Remove the Stack trait, update StyledExt to include stacks

Co-Authored-By: Marshall Bowers <1486634+maxdeviant@users.noreply.github.com>
This commit is contained in:
Nate Butler 2023-11-08 15:00:47 -05:00
parent cb830a4ce0
commit f4abd95866
2 changed files with 39 additions and 26 deletions

View file

@ -1,31 +1,17 @@
use gpui::{div, Div};
use crate::prelude::*;
pub trait Stack: Styled + Sized {
/// Horizontally stacks elements.
fn h_stack(self) -> Self {
self.flex().flex_row().items_center()
}
/// Vertically stacks elements.
fn v_stack(self) -> Self {
self.flex().flex_col()
}
}
impl<V: 'static> Stack for Div<V> {}
use crate::StyledExt;
/// Horizontally stacks elements.
///
/// Sets `flex()`, `flex_row()`, `items_center()`
pub fn h_stack<V: 'static>() -> Div<V> {
div().h_stack()
div().h_flex()
}
/// Vertically stacks elements.
///
/// Sets `flex()`, `flex_col()`
pub fn v_stack<V: 'static>() -> Div<V> {
div().v_stack()
div().v_flex()
}

View file

@ -3,18 +3,36 @@ use gpui::{Div, Styled};
use crate::UITextSize;
/// Extends [`Styled`](gpui::Styled) with Zed specific styling methods.
pub trait StyledExt {
fn text_ui_size(self, size: UITextSize) -> Self;
fn text_ui(self) -> Self;
fn text_ui_sm(self) -> Self;
pub trait StyledExt: Styled {
/// Horizontally stacks elements.
///
/// Sets `flex()`, `flex_row()`, `items_center()`
fn h_flex(self) -> Self
where
Self: Sized,
{
self.flex().flex_row().items_center()
}
impl<V: 'static> StyledExt for Div<V> {
fn text_ui_size(self, size: UITextSize) -> Self {
/// Vertically stacks elements.
///
/// Sets `flex()`, `flex_col()`
fn v_flex(self) -> Self
where
Self: Sized,
{
self.flex().flex_col()
}
fn text_ui_size(self, size: UITextSize) -> Self
where
Self: Sized,
{
let size = size.rems();
self.text_size(size)
}
/// The default size for UI text.
///
/// `0.825rem` or `14px` at the default scale of `1rem` = `16px`.
@ -22,11 +40,15 @@ impl<V: 'static> StyledExt for Div<V> {
/// Note: The absolute size of this text will change based on a user's `ui_scale` setting.
///
/// Use [`text_ui_sm`] for regular-sized text.
fn text_ui(self) -> Self {
fn text_ui(self) -> Self
where
Self: Sized,
{
let size = UITextSize::default().rems();
self.text_size(size)
}
/// The small size for UI text.
///
/// `0.75rem` or `12px` at the default scale of `1rem` = `16px`.
@ -34,9 +56,14 @@ impl<V: 'static> StyledExt for Div<V> {
/// Note: The absolute size of this text will change based on a user's `ui_scale` setting.
///
/// Use [`text_ui`] for regular-sized text.
fn text_ui_sm(self) -> Self {
fn text_ui_sm(self) -> Self
where
Self: Sized,
{
let size = UITextSize::Small.rems();
self.text_size(size)
}
}
impl<V: 'static> StyledExt for Div<V> {}