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::ViewContext<V>,
 46    ) -> (gpui::geometry::vector::Vector2F, Self::LayoutState) {
 47        (constraint.max, ())
 48    }
 49
 50    fn paint(
 51        &mut self,
 52        bounds: pathfinder_geometry::rect::RectF,
 53        _: pathfinder_geometry::rect::RectF,
 54        _: &mut Self::LayoutState,
 55        _: &mut V,
 56        cx: &mut gpui::ViewContext<V>,
 57    ) -> Self::PaintState {
 58        cx.scene().push_quad(Quad {
 59            bounds,
 60            background: Some(Color::white()),
 61            ..Default::default()
 62        });
 63
 64        cx.scene().push_layer(None);
 65
 66        cx.scene().push_quad(Quad {
 67            bounds: RectF::new(vec2f(100., 100.), vec2f(100., 100.)),
 68            background: Some(Color::red()),
 69            border: Default::default(),
 70            corner_radii: gpui::scene::CornerRadii {
 71                top_left: 20.,
 72                ..Default::default()
 73            },
 74        });
 75
 76        cx.scene().push_quad(Quad {
 77            bounds: RectF::new(vec2f(200., 100.), vec2f(100., 100.)),
 78            background: Some(Color::green()),
 79            border: Default::default(),
 80            corner_radii: gpui::scene::CornerRadii {
 81                top_right: 20.,
 82                ..Default::default()
 83            },
 84        });
 85
 86        cx.scene().push_quad(Quad {
 87            bounds: RectF::new(vec2f(100., 200.), vec2f(100., 100.)),
 88            background: Some(Color::blue()),
 89            border: Default::default(),
 90            corner_radii: gpui::scene::CornerRadii {
 91                bottom_left: 20.,
 92                ..Default::default()
 93            },
 94        });
 95
 96        cx.scene().push_quad(Quad {
 97            bounds: RectF::new(vec2f(200., 200.), vec2f(100., 100.)),
 98            background: Some(Color::yellow()),
 99            border: Default::default(),
100            corner_radii: gpui::scene::CornerRadii {
101                bottom_right: 20.,
102                ..Default::default()
103            },
104        });
105
106        cx.scene().push_shadow(Shadow {
107            bounds: RectF::new(vec2f(400., 100.), vec2f(100., 100.)),
108            corner_radii: gpui::scene::CornerRadii {
109                bottom_right: 20.,
110                ..Default::default()
111            },
112            sigma: 20.0,
113            color: Color::black(),
114        });
115
116        cx.scene().push_layer(None);
117        cx.scene().push_quad(Quad {
118            bounds: RectF::new(vec2f(400., 100.), vec2f(100., 100.)),
119            background: Some(Color::red()),
120            border: Default::default(),
121            corner_radii: gpui::scene::CornerRadii {
122                bottom_right: 20.,
123                ..Default::default()
124            },
125        });
126
127        cx.scene().pop_layer();
128        cx.scene().pop_layer();
129    }
130
131    fn rect_for_text_range(
132        &self,
133        _: std::ops::Range<usize>,
134        _: pathfinder_geometry::rect::RectF,
135        _: pathfinder_geometry::rect::RectF,
136        _: &Self::LayoutState,
137        _: &Self::PaintState,
138        _: &V,
139        _: &gpui::ViewContext<V>,
140    ) -> Option<pathfinder_geometry::rect::RectF> {
141        unimplemented!()
142    }
143
144    fn debug(
145        &self,
146        _: pathfinder_geometry::rect::RectF,
147        _: &Self::LayoutState,
148        _: &Self::PaintState,
149        _: &V,
150        _: &gpui::ViewContext<V>,
151    ) -> serde_json::Value {
152        unimplemented!()
153    }
154}