//! 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::*;
use objc2_foundation::*;

use crate::*;

/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_dom_delta_pixel?language=objc)
#[deprecated]
pub const DOM_DOM_DELTA_PIXEL: c_uint = 0x00;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_dom_delta_line?language=objc)
#[deprecated]
pub const DOM_DOM_DELTA_LINE: c_uint = 0x01;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_dom_delta_page?language=objc)
#[deprecated]
pub const DOM_DOM_DELTA_PAGE: c_uint = 0x02;

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/webkit/domwheelevent?language=objc)
    #[unsafe(super(
        DOMMouseEvent,
        DOMUIEvent,
        DOMEvent,
        DOMObject,
        WebScriptObject,
        NSObject
    ))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[cfg(all(
        feature = "DOMEvent",
        feature = "DOMMouseEvent",
        feature = "DOMObject",
        feature = "DOMUIEvent",
        feature = "WebScriptObject"
    ))]
    #[deprecated]
    pub struct DOMWheelEvent;
);

#[cfg(all(
    feature = "DOMEvent",
    feature = "DOMMouseEvent",
    feature = "DOMObject",
    feature = "DOMUIEvent",
    feature = "WebScriptObject"
))]
extern_conformance!(
    unsafe impl NSCopying for DOMWheelEvent {}
);

#[cfg(all(
    feature = "DOMEvent",
    feature = "DOMMouseEvent",
    feature = "DOMObject",
    feature = "DOMUIEvent",
    feature = "WebScriptObject"
))]
unsafe impl CopyingHelper for DOMWheelEvent {
    type Result = Self;
}

#[cfg(all(
    feature = "DOMEvent",
    feature = "DOMMouseEvent",
    feature = "DOMObject",
    feature = "DOMUIEvent",
    feature = "WebScriptObject"
))]
extern_conformance!(
    unsafe impl NSObjectProtocol for DOMWheelEvent {}
);

#[cfg(all(
    feature = "DOMEvent",
    feature = "DOMMouseEvent",
    feature = "DOMObject",
    feature = "DOMUIEvent",
    feature = "WebScriptObject"
))]
impl DOMWheelEvent {
    extern_methods!(
        #[unsafe(method(wheelDeltaX))]
        #[unsafe(method_family = none)]
        pub unsafe fn wheelDeltaX(&self) -> c_int;

        #[unsafe(method(wheelDeltaY))]
        #[unsafe(method_family = none)]
        pub unsafe fn wheelDeltaY(&self) -> c_int;

        #[deprecated]
        #[unsafe(method(wheelDelta))]
        #[unsafe(method_family = none)]
        pub unsafe fn wheelDelta(&self) -> c_int;

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

        #[cfg(feature = "DOMAbstractView")]
        /// # Safety
        ///
        /// `view` might not allow `None`.
        #[unsafe(method(initWheelEvent:wheelDeltaY:view:screenX:screenY:clientX:clientY:ctrlKey:altKey:shiftKey:metaKey:))]
        #[unsafe(method_family = none)]
        pub unsafe fn initWheelEvent_wheelDeltaY_view_screenX_screenY_clientX_clientY_ctrlKey_altKey_shiftKey_metaKey(
            &self,
            wheel_delta_x: c_int,
            wheel_delta_y: c_int,
            view: Option<&DOMAbstractView>,
            screen_x: c_int,
            screen_y: c_int,
            client_x: c_int,
            client_y: c_int,
            ctrl_key: bool,
            alt_key: bool,
            shift_key: bool,
            meta_key: bool,
        );
    );
}

/// Methods declared on superclass `DOMObject`.
#[cfg(all(
    feature = "DOMEvent",
    feature = "DOMMouseEvent",
    feature = "DOMObject",
    feature = "DOMUIEvent",
    feature = "WebScriptObject"
))]
impl DOMWheelEvent {
    extern_methods!(
        #[deprecated]
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;
    );
}

/// Methods declared on superclass `NSObject`.
#[cfg(all(
    feature = "DOMEvent",
    feature = "DOMMouseEvent",
    feature = "DOMObject",
    feature = "DOMUIEvent",
    feature = "WebScriptObject"
))]
impl DOMWheelEvent {
    extern_methods!(
        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;
    );
}
