Introduce Svg struct in core::svg
This commit is contained in:
parent
8708101c89
commit
d4b08462e5
18 changed files with 146 additions and 257 deletions
|
|
@ -7,6 +7,66 @@ use std::hash::{Hash, Hasher as _};
|
|||
use std::path::PathBuf;
|
||||
use std::sync::Arc;
|
||||
|
||||
/// A raster image that can be drawn.
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct Svg<H = Handle> {
|
||||
/// The handle of the [`Svg`].
|
||||
pub handle: H,
|
||||
|
||||
/// The [`Color`] filter to be applied to the [`Svg`].
|
||||
///
|
||||
/// If some [`Color`] is set, the whole [`Svg`] will be
|
||||
/// painted with it—ignoring any intrinsic colors.
|
||||
///
|
||||
/// This can be useful for coloring icons programmatically
|
||||
/// (e.g. with a theme).
|
||||
pub color: Option<Color>,
|
||||
|
||||
/// The rotation to be applied to the image; on its center.
|
||||
pub rotation: Radians,
|
||||
|
||||
/// The opacity of the [`Svg`].
|
||||
///
|
||||
/// 0 means transparent. 1 means opaque.
|
||||
pub opacity: f32,
|
||||
}
|
||||
|
||||
impl Svg<Handle> {
|
||||
/// Creates a new [`Svg`] with the given handle.
|
||||
pub fn new(handle: impl Into<Handle>) -> Self {
|
||||
Self {
|
||||
handle: handle.into(),
|
||||
color: None,
|
||||
rotation: Radians(0.0),
|
||||
opacity: 1.0,
|
||||
}
|
||||
}
|
||||
|
||||
/// Sets the [`Color`] filter of the [`Svg`].
|
||||
pub fn color(mut self, color: impl Into<Color>) -> Self {
|
||||
self.color = Some(color.into());
|
||||
self
|
||||
}
|
||||
|
||||
/// Sets the rotation of the [`Svg`].
|
||||
pub fn rotation(mut self, rotation: impl Into<Radians>) -> Self {
|
||||
self.rotation = rotation.into();
|
||||
self
|
||||
}
|
||||
|
||||
/// Sets the opacity of the [`Svg`].
|
||||
pub fn opacity(mut self, opacity: impl Into<f32>) -> Self {
|
||||
self.opacity = opacity.into();
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&Handle> for Svg {
|
||||
fn from(handle: &Handle) -> Self {
|
||||
Svg::new(handle.clone())
|
||||
}
|
||||
}
|
||||
|
||||
/// A handle of Svg data.
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct Handle {
|
||||
|
|
@ -95,12 +155,5 @@ pub trait Renderer: crate::Renderer {
|
|||
fn measure_svg(&self, handle: &Handle) -> Size<u32>;
|
||||
|
||||
/// Draws an SVG with the given [`Handle`], an optional [`Color`] filter, and inside the provided `bounds`.
|
||||
fn draw_svg(
|
||||
&mut self,
|
||||
handle: Handle,
|
||||
color: Option<Color>,
|
||||
bounds: Rectangle,
|
||||
rotation: Radians,
|
||||
opacity: f32,
|
||||
);
|
||||
fn draw_svg(&mut self, svg: Svg, bounds: Rectangle);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue