diff options
Diffstat (limited to 'graphics/src/layer')
| -rw-r--r-- | graphics/src/layer/image.rs | 23 | ||||
| -rw-r--r-- | graphics/src/layer/mesh.rs | 51 | ||||
| -rw-r--r-- | graphics/src/layer/quad.rs | 30 | ||||
| -rw-r--r-- | graphics/src/layer/text.rs | 26 | 
4 files changed, 130 insertions, 0 deletions
| diff --git a/graphics/src/layer/image.rs b/graphics/src/layer/image.rs new file mode 100644 index 00000000..cbba7888 --- /dev/null +++ b/graphics/src/layer/image.rs @@ -0,0 +1,23 @@ +use iced_native::{image, svg}; +use crate::Rectangle; + +/// A raster or vector image. +#[derive(Debug, Clone)] +pub enum Image { +    /// A raster image. +    Raster { +        /// The handle of a raster image. +        handle: image::Handle, + +        /// The bounds of the image. +        bounds: Rectangle, +    }, +    /// A vector image. +    Vector { +        /// The handle of a vector image. +        handle: svg::Handle, + +        /// The bounds of the image. +        bounds: Rectangle, +    }, +} diff --git a/graphics/src/layer/mesh.rs b/graphics/src/layer/mesh.rs new file mode 100644 index 00000000..0946317e --- /dev/null +++ b/graphics/src/layer/mesh.rs @@ -0,0 +1,51 @@ +//! A collection of triangle primitives. + +use crate::{Color, Point, Rectangle, triangle}; +use crate::gradient::Gradient; + +/// A mesh of triangles. +#[derive(Debug, Clone, Copy)] +pub struct Mesh<'a> { +    /// The origin of the vertices of the [`Mesh`]. +    pub origin: Point, + +    /// The vertex and index buffers of the [`Mesh`]. +    pub buffers: &'a triangle::Mesh2D, + +    /// The clipping bounds of the [`Mesh`]. +    pub clip_bounds: Rectangle<f32>, + +    /// The shader of the [`Mesh`]. +    pub style: &'a Style, +} + +#[derive(Debug, Clone)] +/// Supported shaders for primitives. +pub enum Style { +    /// Fill a primitive with a solid color. +    Solid(Color), +    /// Fill a primitive with an interpolated color. +    Gradient(Gradient) +} + +impl <'a> Into<Style> for Gradient { +    fn into(self) -> Style { +        match self { +            Gradient::Linear(linear) => { +                Style::Gradient(Gradient::Linear(linear)) +            } +        } +    } +} + +/// Returns the number of total vertices & total indices of all [`Mesh`]es. +pub fn attribute_count_of<'a>(meshes: &'a [Mesh<'a>]) -> (usize, usize) { +    meshes +        .iter() +        .map(|Mesh { buffers, .. }| { +            (buffers.vertices.len(), buffers.indices.len()) +        }) +        .fold((0, 0), |(total_v, total_i), (v, i)| { +            (total_v + v, total_i + i) +        }) +} diff --git a/graphics/src/layer/quad.rs b/graphics/src/layer/quad.rs new file mode 100644 index 00000000..4def8427 --- /dev/null +++ b/graphics/src/layer/quad.rs @@ -0,0 +1,30 @@ +/// A colored rectangle with a border. +/// +/// This type can be directly uploaded to GPU memory. +#[derive(Debug, Clone, Copy)] +#[repr(C)] +pub struct Quad { +    /// The position of the [`Quad`]. +    pub position: [f32; 2], + +    /// The size of the [`Quad`]. +    pub size: [f32; 2], + +    /// The color of the [`Quad`], in __linear RGB__. +    pub color: [f32; 4], + +    /// The border color of the [`Quad`], in __linear RGB__. +    pub border_color: [f32; 4], + +    /// The border radius of the [`Quad`]. +    pub border_radius: f32, + +    /// The border width of the [`Quad`]. +    pub border_width: f32, +} + +#[allow(unsafe_code)] +unsafe impl bytemuck::Zeroable for Quad {} + +#[allow(unsafe_code)] +unsafe impl bytemuck::Pod for Quad {} diff --git a/graphics/src/layer/text.rs b/graphics/src/layer/text.rs new file mode 100644 index 00000000..74f7a676 --- /dev/null +++ b/graphics/src/layer/text.rs @@ -0,0 +1,26 @@ +use crate::{alignment, Font, Rectangle}; + +/// A paragraph of text. +#[derive(Debug, Clone, Copy)] +pub struct Text<'a> { +    /// The content of the [`Text`]. +    pub content: &'a str, + +    /// The layout bounds of the [`Text`]. +    pub bounds: Rectangle, + +    /// The color of the [`Text`], in __linear RGB_. +    pub color: [f32; 4], + +    /// The size of the [`Text`]. +    pub size: f32, + +    /// The font of the [`Text`]. +    pub font: Font, + +    /// The horizontal alignment of the [`Text`]. +    pub horizontal_alignment: alignment::Horizontal, + +    /// The vertical alignment of the [`Text`]. +    pub vertical_alignment: alignment::Vertical, +} | 
