//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use objc2::__framework_prelude::*;
use objc2_foundation::*;

use crate::*;

extern_class!(
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct UIBezierPath;

    unsafe impl ClassType for UIBezierPath {
        type Super = NSObject;
        type Mutability = InteriorMutable;
    }
);

unsafe impl NSCoding for UIBezierPath {}

unsafe impl NSCopying for UIBezierPath {}

unsafe impl NSObjectProtocol for UIBezierPath {}

unsafe impl NSSecureCoding for UIBezierPath {}

extern_methods!(
    unsafe impl UIBezierPath {
        #[method_id(@__retain_semantics Other bezierPath)]
        pub unsafe fn bezierPath() -> Retained<Self>;

        #[method_id(@__retain_semantics Other bezierPathWithRect:)]
        pub unsafe fn bezierPathWithRect(rect: CGRect) -> Retained<Self>;

        #[method_id(@__retain_semantics Other bezierPathWithOvalInRect:)]
        pub unsafe fn bezierPathWithOvalInRect(rect: CGRect) -> Retained<Self>;

        #[method_id(@__retain_semantics Other bezierPathWithRoundedRect:cornerRadius:)]
        pub unsafe fn bezierPathWithRoundedRect_cornerRadius(
            rect: CGRect,
            corner_radius: CGFloat,
        ) -> Retained<Self>;

        #[cfg(feature = "UIGeometry")]
        #[method_id(@__retain_semantics Other bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:)]
        pub unsafe fn bezierPathWithRoundedRect_byRoundingCorners_cornerRadii(
            rect: CGRect,
            corners: UIRectCorner,
            corner_radii: CGSize,
        ) -> Retained<Self>;

        #[method_id(@__retain_semantics Other bezierPathWithArcCenter:radius:startAngle:endAngle:clockwise:)]
        pub unsafe fn bezierPathWithArcCenter_radius_startAngle_endAngle_clockwise(
            center: CGPoint,
            radius: CGFloat,
            start_angle: CGFloat,
            end_angle: CGFloat,
            clockwise: bool,
        ) -> Retained<Self>;

        #[method_id(@__retain_semantics Init init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[method_id(@__retain_semantics Init initWithCoder:)]
        pub unsafe fn initWithCoder(
            this: Allocated<Self>,
            coder: &NSCoder,
        ) -> Option<Retained<Self>>;

        #[method(moveToPoint:)]
        pub unsafe fn moveToPoint(&self, point: CGPoint);

        #[method(addLineToPoint:)]
        pub unsafe fn addLineToPoint(&self, point: CGPoint);

        #[method(addCurveToPoint:controlPoint1:controlPoint2:)]
        pub unsafe fn addCurveToPoint_controlPoint1_controlPoint2(
            &self,
            end_point: CGPoint,
            control_point1: CGPoint,
            control_point2: CGPoint,
        );

        #[method(addQuadCurveToPoint:controlPoint:)]
        pub unsafe fn addQuadCurveToPoint_controlPoint(
            &self,
            end_point: CGPoint,
            control_point: CGPoint,
        );

        #[method(addArcWithCenter:radius:startAngle:endAngle:clockwise:)]
        pub unsafe fn addArcWithCenter_radius_startAngle_endAngle_clockwise(
            &self,
            center: CGPoint,
            radius: CGFloat,
            start_angle: CGFloat,
            end_angle: CGFloat,
            clockwise: bool,
        );

        #[method(closePath)]
        pub unsafe fn closePath(&self);

        #[method(removeAllPoints)]
        pub unsafe fn removeAllPoints(&self);

        #[method(appendPath:)]
        pub unsafe fn appendPath(&self, bezier_path: &UIBezierPath);

        #[method_id(@__retain_semantics Other bezierPathByReversingPath)]
        pub unsafe fn bezierPathByReversingPath(&self) -> Retained<UIBezierPath>;

        #[method(applyTransform:)]
        pub unsafe fn applyTransform(&self, transform: CGAffineTransform);

        #[method(isEmpty)]
        pub unsafe fn isEmpty(&self) -> bool;

        #[method(bounds)]
        pub unsafe fn bounds(&self) -> CGRect;

        #[method(currentPoint)]
        pub unsafe fn currentPoint(&self) -> CGPoint;

        #[method(containsPoint:)]
        pub unsafe fn containsPoint(&self, point: CGPoint) -> bool;

        #[method(lineWidth)]
        pub unsafe fn lineWidth(&self) -> CGFloat;

        #[method(setLineWidth:)]
        pub unsafe fn setLineWidth(&self, line_width: CGFloat);

        #[method(miterLimit)]
        pub unsafe fn miterLimit(&self) -> CGFloat;

        #[method(setMiterLimit:)]
        pub unsafe fn setMiterLimit(&self, miter_limit: CGFloat);

        #[method(flatness)]
        pub unsafe fn flatness(&self) -> CGFloat;

        #[method(setFlatness:)]
        pub unsafe fn setFlatness(&self, flatness: CGFloat);

        #[method(usesEvenOddFillRule)]
        pub unsafe fn usesEvenOddFillRule(&self) -> bool;

        #[method(setUsesEvenOddFillRule:)]
        pub unsafe fn setUsesEvenOddFillRule(&self, uses_even_odd_fill_rule: bool);

        #[method(setLineDash:count:phase:)]
        pub unsafe fn setLineDash_count_phase(
            &self,
            pattern: *mut CGFloat,
            count: NSInteger,
            phase: CGFloat,
        );

        #[method(getLineDash:count:phase:)]
        pub unsafe fn getLineDash_count_phase(
            &self,
            pattern: *mut CGFloat,
            count: *mut NSInteger,
            phase: *mut CGFloat,
        );

        #[method(fill)]
        pub unsafe fn fill(&self);

        #[method(stroke)]
        pub unsafe fn stroke(&self);

        #[method(addClip)]
        pub unsafe fn addClip(&self);
    }
);

extern_methods!(
    /// Methods declared on superclass `NSObject`
    unsafe impl UIBezierPath {
        #[method_id(@__retain_semantics New new)]
        pub unsafe fn new() -> Retained<Self>;
    }
);
