1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
use iced_native::{ image, svg, Background, Color, Font, HorizontalAlignment, Rectangle, Size, Vector, VerticalAlignment, }; use crate::triangle; use std::sync::Arc; /// A rendering primitive. #[derive(Debug, Clone)] pub enum Primitive { /// An empty primitive None, /// A group of primitives Group { /// The primitives of the group primitives: Vec<Primitive>, }, /// A text primitive Text { /// The contents of the text content: String, /// The bounds of the text bounds: Rectangle, /// The color of the text color: Color, /// The size of the text size: f32, /// The font of the text font: Font, /// The horizontal alignment of the text horizontal_alignment: HorizontalAlignment, /// The vertical alignment of the text vertical_alignment: VerticalAlignment, }, /// A quad primitive Quad { /// The bounds of the quad bounds: Rectangle, /// The background of the quad background: Background, /// The border radius of the quad border_radius: u16, /// The border width of the quad border_width: u16, /// The border color of the quad border_color: Color, }, /// An image primitive Image { /// The handle of the image handle: image::Handle, /// The bounds of the image bounds: Rectangle, }, /// An SVG primitive Svg { /// The path of the SVG file handle: svg::Handle, /// The bounds of the viewport bounds: Rectangle, }, /// A clip primitive Clip { /// The bounds of the clip bounds: Rectangle, /// The offset transformation of the clip offset: Vector<u32>, /// The content of the clip content: Box<Primitive>, }, /// A primitive that applies a translation Translate { /// The translation vector translation: Vector, /// The primitive to translate content: Box<Primitive>, }, /// A low-level primitive to render a mesh of triangles. /// /// It can be used to render many kinds of geometry freely. Mesh2D { /// The vertex and index buffers of the mesh buffers: triangle::Mesh2D, /// The size of the drawable region of the mesh. /// /// Any geometry that falls out of this region will be clipped. size: Size, }, /// A cached primitive. /// /// This can be useful if you are implementing a widget where primitive /// generation is expensive. Cached { /// The cached primitive cache: Arc<Primitive>, }, } impl Default for Primitive { fn default() -> Primitive { Primitive::None } }