1use gpui::{
2 color::Color, geometry::rect::RectF, scene::Shadow, AnyElement, App, Element, Entity, Quad,
3 View,
4};
5use log::LevelFilter;
6use pathfinder_geometry::vector::vec2f;
7use simplelog::SimpleLogger;
8
9fn main() {
10 SimpleLogger::init(LevelFilter::Info, Default::default()).expect("could not initialize logger");
11
12 App::new(()).unwrap().run(|cx| {
13 cx.platform().activate(true);
14 cx.add_window(Default::default(), |_| CornersView);
15 });
16}
17
18struct CornersView;
19
20impl Entity for CornersView {
21 type Event = ();
22}
23
24impl View for CornersView {
25 fn ui_name() -> &'static str {
26 "CornersView"
27 }
28
29 fn render(&mut self, _: &mut gpui::ViewContext<Self>) -> AnyElement<CornersView> {
30 CornersElement.into_any()
31 }
32}
33
34struct CornersElement;
35
36impl<V: View> gpui::Element<V> for CornersElement {
37 type LayoutState = ();
38
39 type PaintState = ();
40
41 fn layout(
42 &mut self,
43 constraint: gpui::SizeConstraint,
44 _: &mut V,
45 _: &mut gpui::LayoutContext<V>,
46 ) -> (gpui::geometry::vector::Vector2F, Self::LayoutState) {
47 (constraint.max, ())
48 }
49
50 fn paint(
51 &mut self,
52 scene: &mut gpui::SceneBuilder,
53 bounds: pathfinder_geometry::rect::RectF,
54 _: pathfinder_geometry::rect::RectF,
55 _: &mut Self::LayoutState,
56 _: &mut V,
57 _: &mut gpui::PaintContext<V>,
58 ) -> Self::PaintState {
59 scene.push_quad(Quad {
60 bounds,
61 background: Some(Color::white()),
62 ..Default::default()
63 });
64
65 scene.push_layer(None);
66
67 scene.push_quad(Quad {
68 bounds: RectF::new(vec2f(100., 100.), vec2f(100., 100.)),
69 background: Some(Color::red()),
70 border: Default::default(),
71 corner_radii: gpui::scene::CornerRadii {
72 top_left: 20.,
73 ..Default::default()
74 },
75 });
76
77 scene.push_quad(Quad {
78 bounds: RectF::new(vec2f(200., 100.), vec2f(100., 100.)),
79 background: Some(Color::green()),
80 border: Default::default(),
81 corner_radii: gpui::scene::CornerRadii {
82 top_right: 20.,
83 ..Default::default()
84 },
85 });
86
87 scene.push_quad(Quad {
88 bounds: RectF::new(vec2f(100., 200.), vec2f(100., 100.)),
89 background: Some(Color::blue()),
90 border: Default::default(),
91 corner_radii: gpui::scene::CornerRadii {
92 bottom_left: 20.,
93 ..Default::default()
94 },
95 });
96
97 scene.push_quad(Quad {
98 bounds: RectF::new(vec2f(200., 200.), vec2f(100., 100.)),
99 background: Some(Color::yellow()),
100 border: Default::default(),
101 corner_radii: gpui::scene::CornerRadii {
102 bottom_right: 20.,
103 ..Default::default()
104 },
105 });
106
107 scene.push_shadow(Shadow {
108 bounds: RectF::new(vec2f(400., 100.), vec2f(100., 100.)),
109 corner_radii: gpui::scene::CornerRadii {
110 bottom_right: 20.,
111 ..Default::default()
112 },
113 sigma: 20.0,
114 color: Color::black(),
115 });
116
117 scene.push_layer(None);
118 scene.push_quad(Quad {
119 bounds: RectF::new(vec2f(400., 100.), vec2f(100., 100.)),
120 background: Some(Color::red()),
121 border: Default::default(),
122 corner_radii: gpui::scene::CornerRadii {
123 bottom_right: 20.,
124 ..Default::default()
125 },
126 });
127
128 scene.pop_layer();
129 scene.pop_layer();
130 }
131
132 fn rect_for_text_range(
133 &self,
134 _: std::ops::Range<usize>,
135 _: pathfinder_geometry::rect::RectF,
136 _: pathfinder_geometry::rect::RectF,
137 _: &Self::LayoutState,
138 _: &Self::PaintState,
139 _: &V,
140 _: &gpui::ViewContext<V>,
141 ) -> Option<pathfinder_geometry::rect::RectF> {
142 unimplemented!()
143 }
144
145 fn debug(
146 &self,
147 _: pathfinder_geometry::rect::RectF,
148 _: &Self::LayoutState,
149 _: &Self::PaintState,
150 _: &V,
151 _: &gpui::ViewContext<V>,
152 ) -> serde_json::Value {
153 unimplemented!()
154 }
155}