ferroui_base/media/
quadratic_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 QuadraticBezierSegment {
11 base: PathSegment,
12}
13
14ferro_class!(QuadraticBezierSegment: PathSegment);
15crate::ferro_class_info!(QuadraticBezierSegment { new: QuadraticBezierSegment::new });
16ferro_impl_classes!(QuadraticBezierSegment: FerroObjectImpl);
17
18impl PathSegmentImpl for QuadraticBezierSegment {
19 fn apply_to(this: &Self, ctx: &mut dyn IGeometryContext) {
20 ctx.quadratic_bezier_to(this.point1(), this.point2(), this.is_stroked());
21 }
22
23 fn to_string(this: &Self) -> String {
24 format!("Q {} {}", this.point1(), this.point2())
25 }
26}
27
28crate::ferro_properties! { impl QuadraticBezierSegment {
29 ferro_property!(pub fn point1_property() -> StyledProperty<Point> {
30 FerroProperty::register::<QuadraticBezierSegment, _>("Point1", Point::default())
31 });
32
33 ferro_property!(pub fn point2_property() -> StyledProperty<Point> {
34 FerroProperty::register::<QuadraticBezierSegment, _>("Point2", Point::default())
35 });
36} }
37
38impl QuadraticBezierSegment {
39 pub fn construct() -> Self {
41 Self { base: PathSegment::construct() }
42 }
43
44 pub fn new() -> Ref<Self> {
45 instantiate(Self::construct())
46 }
47
48 pub fn point1(&self) -> Point {
50 self.get_value(Self::point1_property())
51 }
52
53 pub fn set_point1(&self, value: Point) {
54 self.set_value(Self::point1_property(), value)
55 }
56
57 pub fn point2(&self) -> Point {
59 self.get_value(Self::point2_property())
60 }
61
62 pub fn set_point2(&self, value: Point) {
63 self.set_value(Self::point2_property(), value)
64 }
65}