//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use core::ffi::*;
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
#[cfg(feature = "objc2-core-foundation")]
use objc2_core_foundation::*;
use objc2_foundation::*;

use crate::*;

/// [Apple's documentation](https://developer.apple.com/documentation/quartzcore/camediatimingfillmode?language=objc)
// NS_TYPED_ENUM
pub type CAMediaTimingFillMode = NSString;

extern_protocol!(
    /// [Apple's documentation](https://developer.apple.com/documentation/quartzcore/camediatiming?language=objc)
    pub unsafe trait CAMediaTiming {
        #[cfg(feature = "objc2-core-foundation")]
        #[unsafe(method(beginTime))]
        #[unsafe(method_family = none)]
        fn beginTime(&self) -> CFTimeInterval;

        #[cfg(feature = "objc2-core-foundation")]
        /// Setter for [`beginTime`][Self::beginTime].
        #[unsafe(method(setBeginTime:))]
        #[unsafe(method_family = none)]
        fn setBeginTime(&self, begin_time: CFTimeInterval);

        #[cfg(feature = "objc2-core-foundation")]
        #[unsafe(method(duration))]
        #[unsafe(method_family = none)]
        fn duration(&self) -> CFTimeInterval;

        #[cfg(feature = "objc2-core-foundation")]
        /// Setter for [`duration`][Self::duration].
        #[unsafe(method(setDuration:))]
        #[unsafe(method_family = none)]
        fn setDuration(&self, duration: CFTimeInterval);

        #[unsafe(method(speed))]
        #[unsafe(method_family = none)]
        fn speed(&self) -> c_float;

        /// Setter for [`speed`][Self::speed].
        #[unsafe(method(setSpeed:))]
        #[unsafe(method_family = none)]
        fn setSpeed(&self, speed: c_float);

        #[cfg(feature = "objc2-core-foundation")]
        #[unsafe(method(timeOffset))]
        #[unsafe(method_family = none)]
        fn timeOffset(&self) -> CFTimeInterval;

        #[cfg(feature = "objc2-core-foundation")]
        /// Setter for [`timeOffset`][Self::timeOffset].
        #[unsafe(method(setTimeOffset:))]
        #[unsafe(method_family = none)]
        fn setTimeOffset(&self, time_offset: CFTimeInterval);

        #[unsafe(method(repeatCount))]
        #[unsafe(method_family = none)]
        fn repeatCount(&self) -> c_float;

        /// Setter for [`repeatCount`][Self::repeatCount].
        #[unsafe(method(setRepeatCount:))]
        #[unsafe(method_family = none)]
        fn setRepeatCount(&self, repeat_count: c_float);

        #[cfg(feature = "objc2-core-foundation")]
        #[unsafe(method(repeatDuration))]
        #[unsafe(method_family = none)]
        fn repeatDuration(&self) -> CFTimeInterval;

        #[cfg(feature = "objc2-core-foundation")]
        /// Setter for [`repeatDuration`][Self::repeatDuration].
        #[unsafe(method(setRepeatDuration:))]
        #[unsafe(method_family = none)]
        fn setRepeatDuration(&self, repeat_duration: CFTimeInterval);

        #[unsafe(method(autoreverses))]
        #[unsafe(method_family = none)]
        fn autoreverses(&self) -> bool;

        /// Setter for [`autoreverses`][Self::autoreverses].
        #[unsafe(method(setAutoreverses:))]
        #[unsafe(method_family = none)]
        fn setAutoreverses(&self, autoreverses: bool);

        #[unsafe(method(fillMode))]
        #[unsafe(method_family = none)]
        fn fillMode(&self) -> Retained<CAMediaTimingFillMode>;

        /// Setter for [`fillMode`][Self::fillMode].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        #[unsafe(method(setFillMode:))]
        #[unsafe(method_family = none)]
        fn setFillMode(&self, fill_mode: &CAMediaTimingFillMode);
    }
);

extern "C" {
    /// [Apple's documentation](https://developer.apple.com/documentation/quartzcore/kcafillmodeforwards?language=objc)
    pub static kCAFillModeForwards: &'static CAMediaTimingFillMode;
}

extern "C" {
    /// [Apple's documentation](https://developer.apple.com/documentation/quartzcore/kcafillmodebackwards?language=objc)
    pub static kCAFillModeBackwards: &'static CAMediaTimingFillMode;
}

extern "C" {
    /// [Apple's documentation](https://developer.apple.com/documentation/quartzcore/kcafillmodeboth?language=objc)
    pub static kCAFillModeBoth: &'static CAMediaTimingFillMode;
}

extern "C" {
    /// [Apple's documentation](https://developer.apple.com/documentation/quartzcore/kcafillmoderemoved?language=objc)
    pub static kCAFillModeRemoved: &'static CAMediaTimingFillMode;
}
