1use gpui::{
  2    App, AppContext, Application, Bounds, Context, Window, WindowBounds, WindowOptions, div,
  3    linear_color_stop, linear_gradient, pattern_slash, prelude::*, px, rgb, size,
  4};
  5
  6struct PatternExample;
  7
  8impl Render for PatternExample {
  9    fn render(&mut self, _window: &mut Window, _cx: &mut Context<Self>) -> impl IntoElement {
 10        div()
 11            .flex()
 12            .flex_col()
 13            .gap_3()
 14            .bg(rgb(0xffffff))
 15            .size(px(600.0))
 16            .justify_center()
 17            .items_center()
 18            .shadow_lg()
 19            .text_xl()
 20            .text_color(rgb(0x000000))
 21            .child("Pattern Example")
 22            .child(
 23                div()
 24                    .flex()
 25                    .flex_col()
 26                    .border_1()
 27                    .border_color(gpui::blue())
 28                    .child(div().w(px(54.0)).h(px(18.0)).bg(pattern_slash(
 29                        gpui::red(),
 30                        18.0 / 4.0,
 31                        18.0 / 4.0,
 32                    )))
 33                    .child(div().w(px(54.0)).h(px(18.0)).bg(pattern_slash(
 34                        gpui::red(),
 35                        18.0 / 4.0,
 36                        18.0 / 4.0,
 37                    )))
 38                    .child(div().w(px(54.0)).h(px(18.0)).bg(pattern_slash(
 39                        gpui::red(),
 40                        18.0 / 4.0,
 41                        18.0 / 4.0,
 42                    )))
 43                    .child(div().w(px(54.0)).h(px(18.0)).bg(pattern_slash(
 44                        gpui::red(),
 45                        18.0 / 4.0,
 46                        18.0 / 2.0,
 47                    ))),
 48            )
 49            .child(
 50                div()
 51                    .flex()
 52                    .flex_col()
 53                    .border_1()
 54                    .border_color(gpui::blue())
 55                    .bg(gpui::green().opacity(0.16))
 56                    .child("Elements the same height should align")
 57                    .child(div().w(px(256.0)).h(px(56.0)).bg(pattern_slash(
 58                        gpui::red(),
 59                        56.0 / 6.0,
 60                        56.0 / 6.0,
 61                    )))
 62                    .child(div().w(px(256.0)).h(px(56.0)).bg(pattern_slash(
 63                        gpui::green(),
 64                        56.0 / 6.0,
 65                        56.0 / 6.0,
 66                    )))
 67                    .child(div().w(px(256.0)).h(px(56.0)).bg(pattern_slash(
 68                        gpui::blue(),
 69                        56.0 / 6.0,
 70                        56.0 / 6.0,
 71                    )))
 72                    .child(div().w(px(256.0)).h(px(26.0)).bg(pattern_slash(
 73                        gpui::yellow(),
 74                        56.0 / 6.0,
 75                        56.0 / 6.0,
 76                    ))),
 77            )
 78            .child(
 79                div()
 80                    .border_1()
 81                    .border_color(gpui::blue())
 82                    .w(px(240.0))
 83                    .h(px(40.0))
 84                    .bg(gpui::red()),
 85            )
 86            .child(
 87                div()
 88                    .border_1()
 89                    .border_color(gpui::blue())
 90                    .w(px(240.0))
 91                    .h(px(40.0))
 92                    .bg(linear_gradient(
 93                        45.,
 94                        linear_color_stop(gpui::red(), 0.),
 95                        linear_color_stop(gpui::blue(), 1.),
 96                    )),
 97            )
 98    }
 99}
100
101fn main() {
102    Application::new().run(|cx: &mut App| {
103        let bounds = Bounds::centered(None, size(px(600.0), px(600.0)), cx);
104        cx.open_window(
105            WindowOptions {
106                window_bounds: Some(WindowBounds::Windowed(bounds)),
107                ..Default::default()
108            },
109            |_window, cx| cx.new(|_cx| PatternExample),
110        )
111        .unwrap();
112
113        cx.activate(true);
114    });
115}