ferroui_base/media/
bezier_segment.rs1use crate::media::{PathSegment, PathSegmentImpl};
2use crate::platform::IGeometryContext;
3use crate::{
4 ferro_class, ferro_impl_classes, ferro_property, instantiate, FerroObjectImpl, FerroProperty, Point, Ref,
5 StyledProperty,
6};
7
8#[repr(C)]
10pub struct BezierSegment {
11 base: PathSegment,
12}
13
14ferro_class!(BezierSegment: PathSegment);
15crate::ferro_class_info!(BezierSegment { new: BezierSegment::new });
16ferro_impl_classes!(BezierSegment: FerroObjectImpl);
17
18impl PathSegmentImpl for BezierSegment {
19 fn apply_to(this: &Self, ctx: &mut dyn IGeometryContext) {
20 ctx.cubic_bezier_to(this.point1(), this.point2(), this.point3(), this.is_stroked());
21 }
22
23 fn to_string(this: &Self) -> String {
24 format!("C {} {} {}", this.point1(), this.point2(), this.point3())
25 }
26}
27
28crate::ferro_properties! { impl BezierSegment {
29 ferro_property!(pub fn point1_property() -> StyledProperty<Point> {
30 FerroProperty::register::<BezierSegment, _>("Point1", Point::default())
31 });
32
33 ferro_property!(pub fn point2_property() -> StyledProperty<Point> {
34 FerroProperty::register::<BezierSegment, _>("Point2", Point::default())
35 });
36
37 ferro_property!(pub fn point3_property() -> StyledProperty<Point> {
38 FerroProperty::register::<BezierSegment, _>("Point3", Point::default())
39 });
40} }
41
42impl BezierSegment {
43 pub fn construct() -> Self {
45 Self { base: PathSegment::construct() }
46 }
47
48 pub fn new() -> Ref<Self> {
49 instantiate(Self::construct())
50 }
51
52 pub fn point1(&self) -> Point {
54 self.get_value(Self::point1_property())
55 }
56
57 pub fn set_point1(&self, value: Point) {
58 self.set_value(Self::point1_property(), value)
59 }
60
61 pub fn point2(&self) -> Point {
63 self.get_value(Self::point2_property())
64 }
65
66 pub fn set_point2(&self, value: Point) {
67 self.set_value(Self::point2_property(), value)
68 }
69
70 pub fn point3(&self) -> Point {
72 self.get_value(Self::point3_property())
73 }
74
75 pub fn set_point3(&self, value: Point) {
76 self.set_value(Self::point3_property(), value)
77 }
78}