skia_safe/modules/svg/fe/
component_transfer.rs

1use super::{DebugAttributes, NodeSubtype};
2use crate::{impl_default_make, prelude::*, scalar};
3use skia_bindings as sb;
4
5pub type FuncKind = sb::SkSVGFeFuncType;
6variant_name!(FuncKind::Identity);
7
8pub type Func = RCHandle<sb::SkSVGFeFunc>;
9
10impl NodeSubtype for sb::SkSVGFeFunc {
11    type Base = sb::SkSVGFe;
12}
13
14impl DebugAttributes for Func {
15    const NAME: &'static str = "FeFunc";
16
17    fn _dbg(&self, builder: &mut std::fmt::DebugStruct) {
18        self.as_base()._dbg(
19            builder
20                .field("amplitude", &self.amplitude())
21                .field("exponent", &self.exponent())
22                .field("intercept", &self.intercept())
23                .field("offset", &self.offset())
24                .field("slope", &self.slope())
25                .field("table_values", &self.table_values())
26                .field("kind", self.kind()),
27        );
28    }
29}
30
31impl Func {
32    pub fn func_a() -> Self {
33        Self::from_ptr(unsafe { sb::C_SkSVGFeFunc_MakeFuncA() }).unwrap()
34    }
35
36    pub fn func_r() -> Self {
37        Self::from_ptr(unsafe { sb::C_SkSVGFeFunc_MakeFuncR() }).unwrap()
38    }
39
40    pub fn func_g() -> Self {
41        Self::from_ptr(unsafe { sb::C_SkSVGFeFunc_MakeFuncG() }).unwrap()
42    }
43
44    pub fn func_b() -> Self {
45        Self::from_ptr(unsafe { sb::C_SkSVGFeFunc_MakeFuncB() }).unwrap()
46    }
47
48    pub fn table_values(&self) -> &[scalar] {
49        unsafe {
50            safer::from_raw_parts(
51                sb::C_SkSVGFeFunc_getTableValues(self.native()),
52                sb::C_SkSVGFeFunc_getTableValuesCount(self.native()),
53            )
54        }
55    }
56
57    // TODO: wrap getTable()
58
59    skia_svg_macros::attrs! {
60        SkSVGFeFunc => {
61            *amplitude: scalar [get(value) => value, set(value) => value],
62            *exponent: scalar [get(value) => value, set(value) => value],
63            *intercept: scalar [get(value) => value, set(value) => value],
64            *offset: scalar [get(value) => value, set(value) => value],
65            *slope: scalar [get(value) => value, set(value) => value],
66            "type" as kind: FuncKind [get(value) => value, set(value) => value]
67        }
68    }
69}
70
71pub type ComponentTransfer = RCHandle<sb::SkSVGFeComponentTransfer>;
72
73impl NodeSubtype for sb::SkSVGFeComponentTransfer {
74    type Base = sb::SkSVGFe;
75}
76
77impl_default_make!(ComponentTransfer, sb::C_SkSVGFeComponentTransfer_Make);
78
79impl DebugAttributes for ComponentTransfer {
80    const NAME: &'static str = "FeComponentTransfer";
81
82    fn _dbg(&self, builder: &mut std::fmt::DebugStruct) {
83        self.as_base()._dbg(builder);
84    }
85}