mirror of
https://github.com/zed-industries/zed.git
synced 2024-12-27 02:48:34 +00:00
WIP
This commit is contained in:
parent
a56fab8c11
commit
a0b6e500cf
6 changed files with 58 additions and 59 deletions
|
@ -1,10 +1,10 @@
|
|||
use crate::{
|
||||
div::div,
|
||||
element::{Element, ParentElement},
|
||||
element::{IntoElement, ParentElement},
|
||||
interactive::Interactive,
|
||||
style::StyleHelpers,
|
||||
text::ArcCow,
|
||||
themes::rose_pine,
|
||||
themes::Theme,
|
||||
};
|
||||
use gpui::{platform::MouseButton, ViewContext};
|
||||
use playground_macros::Element;
|
||||
|
@ -81,10 +81,11 @@ impl<V: 'static, D: 'static> Button<V, D> {
|
|||
&mut self,
|
||||
view: &mut V,
|
||||
cx: &mut ViewContext<V>,
|
||||
) -> impl Element<V> + Interactive<V> {
|
||||
// TODO: Drive theme from the context
|
||||
) -> impl IntoElement<V> + Interactive<V> {
|
||||
let colors = &cx.theme::<Theme>().colors;
|
||||
|
||||
let button = div()
|
||||
.fill(rose_pine::dawn().error(0.5))
|
||||
.fill(colors.error(0.5))
|
||||
.h_4()
|
||||
.children(self.label.clone());
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@ use crate::element::PaintContext;
|
|||
pub trait Interactive<V: 'static> {
|
||||
fn interaction_handlers(&mut self) -> &mut InteractionHandlers<V>;
|
||||
|
||||
// One line change.
|
||||
fn on_mouse_down(
|
||||
mut self,
|
||||
button: MouseButton,
|
||||
|
|
|
@ -1,16 +1,14 @@
|
|||
#![allow(dead_code, unused_variables)]
|
||||
use crate::{element::ParentElement, style::StyleHelpers};
|
||||
use element::{Element, IntoElement};
|
||||
use element::Element;
|
||||
use gpui::{
|
||||
geometry::{pixels, rect::RectF, vector::vec2f},
|
||||
geometry::{rect::RectF, vector::vec2f},
|
||||
platform::WindowOptions,
|
||||
ViewContext,
|
||||
};
|
||||
use log::LevelFilter;
|
||||
use playground_macros::Element;
|
||||
use simplelog::SimpleLogger;
|
||||
use themes::{current_theme, rose_pine, Theme, ThemeColors};
|
||||
use themes::{rose_pine, Theme, ThemeColors};
|
||||
use view::view;
|
||||
use workspace::workspace;
|
||||
|
||||
mod adapter;
|
||||
mod color;
|
||||
|
@ -26,6 +24,7 @@ mod style;
|
|||
mod text;
|
||||
mod themes;
|
||||
mod view;
|
||||
mod workspace;
|
||||
|
||||
fn main() {
|
||||
SimpleLogger::init(LevelFilter::Info, Default::default()).expect("could not initialize logger");
|
||||
|
@ -55,48 +54,3 @@ fn main() {
|
|||
fn playground<V: 'static>(theme: Theme) -> impl Element<V> {
|
||||
workspace().themed(theme)
|
||||
}
|
||||
|
||||
fn workspace<V: 'static>() -> impl Element<V> {
|
||||
WorkspaceElement
|
||||
}
|
||||
|
||||
use crate as playground;
|
||||
#[derive(Element)]
|
||||
struct WorkspaceElement;
|
||||
|
||||
impl WorkspaceElement {
|
||||
fn render<V: 'static>(&mut self, _: &mut V, cx: &mut ViewContext<V>) -> impl Element<V> {
|
||||
use div::div;
|
||||
let theme = &cx.theme::<Theme>().colors;
|
||||
// one line change1!
|
||||
div()
|
||||
.full()
|
||||
.flex()
|
||||
.flex_col()
|
||||
.fill(theme.base(0.5))
|
||||
.child(self.title_bar(cx))
|
||||
.child(self.stage(cx))
|
||||
.child(self.status_bar(cx))
|
||||
}
|
||||
|
||||
fn title_bar<V: 'static>(&mut self, cx: &mut ViewContext<V>) -> impl IntoElement<V> {
|
||||
use div::div;
|
||||
|
||||
let theme = ¤t_theme(cx).colors;
|
||||
div().h(pixels(cx.titlebar_height())).fill(theme.base(0.))
|
||||
}
|
||||
|
||||
fn status_bar<V: 'static>(&mut self, cx: &mut ViewContext<V>) -> impl IntoElement<V> {
|
||||
use div::div;
|
||||
|
||||
let theme = ¤t_theme(cx).colors;
|
||||
div().h(pixels(cx.titlebar_height())).fill(theme.base(0.))
|
||||
}
|
||||
|
||||
fn stage<V: 'static>(&mut self, cx: &mut ViewContext<V>) -> impl IntoElement<V> {
|
||||
use div::div;
|
||||
|
||||
let theme = ¤t_theme(cx).colors;
|
||||
div().flex_grow()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ pub struct Theme {
|
|||
pub colors: ThemeColors,
|
||||
}
|
||||
|
||||
pub fn current_theme<'a>(cx: &'a WindowContext) -> &'a Theme {
|
||||
pub fn theme<'a>(cx: &'a WindowContext) -> &'a Theme {
|
||||
cx.theme::<Theme>()
|
||||
}
|
||||
|
||||
|
|
45
crates/gpui/playground/src/workspace.rs
Normal file
45
crates/gpui/playground/src/workspace.rs
Normal file
|
@ -0,0 +1,45 @@
|
|||
use crate::div::div;
|
||||
use crate::element::{IntoElement, ParentElement};
|
||||
use crate::style::StyleHelpers;
|
||||
use crate::themes::theme;
|
||||
use crate::{element::Element, themes::Theme};
|
||||
use gpui::geometry::pixels;
|
||||
use gpui::ViewContext;
|
||||
use playground_macros::Element;
|
||||
|
||||
use crate as playground;
|
||||
#[derive(Element)]
|
||||
struct WorkspaceElement;
|
||||
|
||||
pub fn workspace<V: 'static>() -> impl Element<V> {
|
||||
WorkspaceElement
|
||||
}
|
||||
|
||||
impl WorkspaceElement {
|
||||
fn render<V: 'static>(&mut self, _: &mut V, cx: &mut ViewContext<V>) -> impl IntoElement<V> {
|
||||
let theme = &cx.theme::<Theme>().colors;
|
||||
div()
|
||||
.full()
|
||||
.flex()
|
||||
.flex_col()
|
||||
.fill(theme.base(0.5))
|
||||
.child(self.title_bar(cx))
|
||||
.child(self.stage(cx))
|
||||
.child(self.status_bar(cx))
|
||||
}
|
||||
|
||||
fn title_bar<V: 'static>(&mut self, cx: &mut ViewContext<V>) -> impl IntoElement<V> {
|
||||
let colors = &theme(cx).colors;
|
||||
div().h(pixels(cx.titlebar_height())).fill(colors.base(0.))
|
||||
}
|
||||
|
||||
fn status_bar<V: 'static>(&mut self, cx: &mut ViewContext<V>) -> impl IntoElement<V> {
|
||||
let colors = &theme(cx).colors;
|
||||
div().h(pixels(cx.titlebar_height())).fill(colors.base(0.))
|
||||
}
|
||||
|
||||
fn stage<V: 'static>(&mut self, cx: &mut ViewContext<V>) -> impl IntoElement<V> {
|
||||
let colors = &theme(cx).colors;
|
||||
div().flex_grow()
|
||||
}
|
||||
}
|
|
@ -69,7 +69,7 @@ pub fn derive_element(input: TokenStream) -> TokenStream {
|
|||
view: &mut V,
|
||||
cx: &mut playground::element::LayoutContext<V>,
|
||||
) -> anyhow::Result<(playground::element::LayoutId, Self::PaintState)> {
|
||||
let mut rendered_element = self.render(view, cx).into_any();
|
||||
let mut rendered_element = self.render(view, cx).into_element().into_any();
|
||||
let layout_id = rendered_element.layout(view, cx)?;
|
||||
Ok((layout_id, rendered_element))
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue