corner_radii.rs

  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}