skia_safe/modules/svg/
gradient.rs

1mod linear;
2mod radial;
3
4pub use self::{linear::Linear as LinearGradient, radial::Radial as RadialGradient};
5
6use super::{BoundingBoxUnits, DebugAttributes, Iri, NodeSubtype, SpreadMethod};
7use crate::{prelude::*, Matrix};
8use skia_bindings as sb;
9
10pub type Gradient = RCHandle<sb::SkSVGGradient>;
11
12impl NodeSubtype for sb::SkSVGGradient {
13    type Base = sb::SkSVGContainer;
14}
15
16impl DebugAttributes for Gradient {
17    const NAME: &'static str = "Gradient";
18
19    fn _dbg(&self, builder: &mut std::fmt::DebugStruct) {
20        self.as_base()._dbg(
21            builder
22                .field("href", self.href())
23                .field("gradient_transform", self.gradient_transform())
24                .field("spread_method", self.spread_method())
25                .field("gradient_units", self.gradient_units()),
26        );
27    }
28}
29
30impl Gradient {
31    skia_svg_macros::attrs! {
32        SkSVGGradient => {
33            href: Iri [get(value) => Iri::from_native_ref(value), set(value) => value.into_native()],
34            gradient_transform: Matrix [get(value) => Matrix::from_native_ref(value), set(value) => value.into_native()],
35            spread_method: SpreadMethod [get(value) => &value.fType, set(value) => sb::SkSVGSpreadMethod { fType: value }],
36            gradient_units: BoundingBoxUnits [get(value) => &value.fType, set(value) => sb::SkSVGObjectBoundingBoxUnits { fType: value }]
37        }
38    }
39}