//! 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)]
    #[cfg(feature = "UIDynamicBehavior")]
    pub struct UIFieldBehavior;

    #[cfg(feature = "UIDynamicBehavior")]
    unsafe impl ClassType for UIFieldBehavior {
        #[inherits(NSObject)]
        type Super = UIDynamicBehavior;
        type Mutability = MainThreadOnly;
    }
);

#[cfg(feature = "UIDynamicBehavior")]
unsafe impl NSObjectProtocol for UIFieldBehavior {}

extern_methods!(
    #[cfg(feature = "UIDynamicBehavior")]
    unsafe impl UIFieldBehavior {
        #[method_id(@__retain_semantics Init init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[method(addItem:)]
        pub unsafe fn addItem(&self, item: &ProtocolObject<dyn UIDynamicItem>);

        #[method(removeItem:)]
        pub unsafe fn removeItem(&self, item: &ProtocolObject<dyn UIDynamicItem>);

        #[method_id(@__retain_semantics Other items)]
        pub unsafe fn items(&self) -> Retained<NSArray<ProtocolObject<dyn UIDynamicItem>>>;

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

        #[method(setPosition:)]
        pub unsafe fn setPosition(&self, position: CGPoint);

        #[cfg(feature = "UIRegion")]
        #[method_id(@__retain_semantics Other region)]
        pub unsafe fn region(&self) -> Retained<UIRegion>;

        #[cfg(feature = "UIRegion")]
        #[method(setRegion:)]
        pub unsafe fn setRegion(&self, region: &UIRegion);

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

        #[method(setStrength:)]
        pub unsafe fn setStrength(&self, strength: CGFloat);

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

        #[method(setFalloff:)]
        pub unsafe fn setFalloff(&self, falloff: CGFloat);

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

        #[method(setMinimumRadius:)]
        pub unsafe fn setMinimumRadius(&self, minimum_radius: CGFloat);

        #[method(direction)]
        pub unsafe fn direction(&self) -> CGVector;

        #[method(setDirection:)]
        pub unsafe fn setDirection(&self, direction: CGVector);

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

        #[method(setSmoothness:)]
        pub unsafe fn setSmoothness(&self, smoothness: CGFloat);

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

        #[method(setAnimationSpeed:)]
        pub unsafe fn setAnimationSpeed(&self, animation_speed: CGFloat);

        #[method_id(@__retain_semantics Other dragField)]
        pub unsafe fn dragField(mtm: MainThreadMarker) -> Retained<Self>;

        #[method_id(@__retain_semantics Other vortexField)]
        pub unsafe fn vortexField(mtm: MainThreadMarker) -> Retained<Self>;

        #[method_id(@__retain_semantics Other radialGravityFieldWithPosition:)]
        pub unsafe fn radialGravityFieldWithPosition(
            position: CGPoint,
            mtm: MainThreadMarker,
        ) -> Retained<Self>;

        #[method_id(@__retain_semantics Other linearGravityFieldWithVector:)]
        pub unsafe fn linearGravityFieldWithVector(
            direction: CGVector,
            mtm: MainThreadMarker,
        ) -> Retained<Self>;

        #[method_id(@__retain_semantics Other velocityFieldWithVector:)]
        pub unsafe fn velocityFieldWithVector(
            direction: CGVector,
            mtm: MainThreadMarker,
        ) -> Retained<Self>;

        #[method_id(@__retain_semantics Other noiseFieldWithSmoothness:animationSpeed:)]
        pub unsafe fn noiseFieldWithSmoothness_animationSpeed(
            smoothness: CGFloat,
            speed: CGFloat,
            mtm: MainThreadMarker,
        ) -> Retained<Self>;

        #[method_id(@__retain_semantics Other turbulenceFieldWithSmoothness:animationSpeed:)]
        pub unsafe fn turbulenceFieldWithSmoothness_animationSpeed(
            smoothness: CGFloat,
            speed: CGFloat,
            mtm: MainThreadMarker,
        ) -> Retained<Self>;

        #[method_id(@__retain_semantics Other springField)]
        pub unsafe fn springField(mtm: MainThreadMarker) -> Retained<Self>;

        #[method_id(@__retain_semantics Other electricField)]
        pub unsafe fn electricField(mtm: MainThreadMarker) -> Retained<Self>;

        #[method_id(@__retain_semantics Other magneticField)]
        pub unsafe fn magneticField(mtm: MainThreadMarker) -> Retained<Self>;

        #[cfg(feature = "block2")]
        #[method_id(@__retain_semantics Other fieldWithEvaluationBlock:)]
        pub unsafe fn fieldWithEvaluationBlock(
            block: &block2::Block<
                dyn Fn(
                    NonNull<UIFieldBehavior>,
                    CGPoint,
                    CGVector,
                    CGFloat,
                    CGFloat,
                    NSTimeInterval,
                ) -> CGVector,
            >,
            mtm: MainThreadMarker,
        ) -> Retained<Self>;
    }
);

extern_methods!(
    /// Methods declared on superclass `NSObject`
    #[cfg(feature = "UIDynamicBehavior")]
    unsafe impl UIFieldBehavior {
        #[method_id(@__retain_semantics New new)]
        pub unsafe fn new(mtm: MainThreadMarker) -> Retained<Self>;
    }
);
