1use assets::Assets;
2use gpui::*;
3use language::{language_settings::AllLanguageSettings, LanguageRegistry};
4use markdown::{Markdown, MarkdownStyle};
5use node_runtime::FakeNodeRuntime;
6use settings::SettingsStore;
7use std::sync::Arc;
8use theme::LoadThemes;
9use ui::div;
10use ui::prelude::*;
11
12const MARKDOWN_EXAMPLE: &'static str = r#"
13this text should be selectable
14
15wow so cool
16
17## Heading 2
18"#;
19pub fn main() {
20 env_logger::init();
21
22 App::new().with_assets(Assets).run(|cx| {
23 let store = SettingsStore::test(cx);
24 cx.set_global(store);
25 language::init(cx);
26 SettingsStore::update(cx, |store, cx| {
27 store.update_user_settings::<AllLanguageSettings>(cx, |_| {});
28 });
29 cx.bind_keys([KeyBinding::new("cmd-c", markdown::Copy, None)]);
30
31 let node_runtime = FakeNodeRuntime::new();
32 let language_registry = Arc::new(LanguageRegistry::new(
33 Task::ready(()),
34 cx.background_executor().clone(),
35 ));
36 languages::init(language_registry.clone(), node_runtime, cx);
37 theme::init(LoadThemes::JustBase, cx);
38 Assets.load_fonts(cx).unwrap();
39
40 cx.activate(true);
41 let _ = cx.open_window(WindowOptions::default(), |cx| {
42 cx.new_view(|cx| {
43 let markdown_style = MarkdownStyle {
44 base_text_style: gpui::TextStyle {
45 font_family: "Zed Mono".into(),
46 color: cx.theme().colors().text,
47 ..Default::default()
48 },
49 code_block: StyleRefinement {
50 text: Some(gpui::TextStyleRefinement {
51 font_family: Some("Zed Mono".into()),
52 background_color: Some(cx.theme().colors().editor_background),
53 ..Default::default()
54 }),
55 margin: gpui::EdgesRefinement {
56 top: Some(Length::Definite(rems(4.).into())),
57 left: Some(Length::Definite(rems(4.).into())),
58 right: Some(Length::Definite(rems(4.).into())),
59 bottom: Some(Length::Definite(rems(4.).into())),
60 },
61 ..Default::default()
62 },
63 inline_code: gpui::TextStyleRefinement {
64 font_family: Some("Zed Mono".into()),
65 background_color: Some(cx.theme().colors().editor_background),
66 ..Default::default()
67 },
68 rule_color: Color::Muted.color(cx),
69 block_quote_border_color: Color::Muted.color(cx),
70 block_quote: gpui::TextStyleRefinement {
71 color: Some(Color::Muted.color(cx)),
72 ..Default::default()
73 },
74 link: gpui::TextStyleRefinement {
75 color: Some(Color::Accent.color(cx)),
76 underline: Some(gpui::UnderlineStyle {
77 thickness: px(1.),
78 color: Some(Color::Accent.color(cx)),
79 wavy: false,
80 }),
81 ..Default::default()
82 },
83 syntax: cx.theme().syntax().clone(),
84 selection_background_color: {
85 let mut selection = cx.theme().players().local().selection;
86 selection.fade_out(0.7);
87 selection
88 },
89 break_style: Default::default(),
90 heading: Default::default(),
91 };
92 let markdown = cx.new_view(|cx| {
93 Markdown::new(MARKDOWN_EXAMPLE.into(), markdown_style, None, cx, None)
94 });
95
96 HelloWorld { markdown }
97 })
98 });
99 });
100}
101struct HelloWorld {
102 markdown: View<Markdown>,
103}
104
105impl Render for HelloWorld {
106 fn render(&mut self, _cx: &mut ViewContext<Self>) -> impl IntoElement {
107 div()
108 .flex()
109 .bg(rgb(0x2e7d32))
110 .size(Length::Definite(Pixels(700.0).into()))
111 .justify_center()
112 .items_center()
113 .shadow_lg()
114 .border_1()
115 .border_color(rgb(0x0000ff))
116 .text_xl()
117 .text_color(rgb(0xffffff))
118 .child(div().child(self.markdown.clone()).p_20())
119 }
120}