hello_world.rs

  1#![cfg_attr(target_family = "wasm", no_main)]
  2
  3use gpui::{
  4    App, Bounds, Context, SharedString, Window, WindowBounds, WindowOptions, div, prelude::*, px,
  5    rgb, size,
  6};
  7use gpui_platform::application;
  8
  9struct HelloWorld {
 10    text: SharedString,
 11}
 12
 13impl Render for HelloWorld {
 14    fn render(&mut self, _window: &mut Window, _cx: &mut Context<Self>) -> impl IntoElement {
 15        div()
 16            .flex()
 17            .flex_col()
 18            .gap_3()
 19            .bg(rgb(0x505050))
 20            .size(px(500.0))
 21            .justify_center()
 22            .items_center()
 23            .shadow_lg()
 24            .border_1()
 25            .border_color(rgb(0x0000ff))
 26            .text_xl()
 27            .text_color(rgb(0xffffff))
 28            .child(format!("Hello, {}!", &self.text))
 29            .child(
 30                div()
 31                    .flex()
 32                    .gap_2()
 33                    .child(
 34                        div()
 35                            .size_8()
 36                            .bg(gpui::red())
 37                            .border_1()
 38                            .border_dashed()
 39                            .rounded_md()
 40                            .border_color(gpui::white()),
 41                    )
 42                    .child(
 43                        div()
 44                            .size_8()
 45                            .bg(gpui::green())
 46                            .border_1()
 47                            .border_dashed()
 48                            .rounded_md()
 49                            .border_color(gpui::white()),
 50                    )
 51                    .child(
 52                        div()
 53                            .size_8()
 54                            .bg(gpui::blue())
 55                            .border_1()
 56                            .border_dashed()
 57                            .rounded_md()
 58                            .border_color(gpui::white()),
 59                    )
 60                    .child(
 61                        div()
 62                            .size_8()
 63                            .bg(gpui::yellow())
 64                            .border_1()
 65                            .border_dashed()
 66                            .rounded_md()
 67                            .border_color(gpui::white()),
 68                    )
 69                    .child(
 70                        div()
 71                            .size_8()
 72                            .bg(gpui::black())
 73                            .border_1()
 74                            .border_dashed()
 75                            .rounded_md()
 76                            .rounded_md()
 77                            .border_color(gpui::white()),
 78                    )
 79                    .child(
 80                        div()
 81                            .size_8()
 82                            .bg(gpui::white())
 83                            .border_1()
 84                            .border_dashed()
 85                            .rounded_md()
 86                            .border_color(gpui::black()),
 87                    ),
 88            )
 89    }
 90}
 91
 92fn run_example() {
 93    application().run(|cx: &mut App| {
 94        let bounds = Bounds::centered(None, size(px(500.), px(500.0)), cx);
 95        cx.open_window(
 96            WindowOptions {
 97                window_bounds: Some(WindowBounds::Windowed(bounds)),
 98                ..Default::default()
 99            },
100            |_, cx| {
101                cx.new(|_| HelloWorld {
102                    text: "World".into(),
103                })
104            },
105        )
106        .unwrap();
107        cx.activate(true);
108    });
109}
110
111#[cfg(not(target_family = "wasm"))]
112fn main() {
113    run_example();
114}
115
116#[cfg(target_family = "wasm")]
117#[wasm_bindgen::prelude::wasm_bindgen(start)]
118pub fn start() {
119    gpui_platform::web_init();
120    run_example();
121}