ohos-arkui-input-binding 0.1.0

OpenHarmony's arkui input binding for rust
Documentation
use ohos_arkui_input_sys::{
    ArkUI_CoastingAxisEvent, OH_ArkUI_CoastingAxisEvent_GetDeltaX,
    OH_ArkUI_CoastingAxisEvent_GetDeltaY, OH_ArkUI_CoastingAxisEvent_GetEventTime,
    OH_ArkUI_CoastingAxisEvent_GetPhase, OH_ArkUI_CoastingAxisEvent_SetPropagation,
    OH_ArkUI_UIInputEvent_GetCoastingAxisEvent,
};
use std::ptr::NonNull;

use crate::ui_input_data::check_status;
use crate::{ArkUIInputError, ArkUIInputEvent, UICoastingAxisEventPhase};

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ArkUICoastingAxisEvent {
    event: NonNull<ArkUI_CoastingAxisEvent>,
}

impl ArkUICoastingAxisEvent {
    pub fn raw(&self) -> *mut ArkUI_CoastingAxisEvent {
        self.event.as_ptr()
    }

    pub fn event_time(&self) -> i64 {
        unsafe { OH_ArkUI_CoastingAxisEvent_GetEventTime(self.raw()) }
    }

    pub fn phase(&self) -> UICoastingAxisEventPhase {
        UICoastingAxisEventPhase::from(unsafe { OH_ArkUI_CoastingAxisEvent_GetPhase(self.raw()) })
    }

    pub fn delta_x(&self) -> f32 {
        unsafe { OH_ArkUI_CoastingAxisEvent_GetDeltaX(self.raw()) }
    }

    pub fn delta_y(&self) -> f32 {
        unsafe { OH_ArkUI_CoastingAxisEvent_GetDeltaY(self.raw()) }
    }

    pub fn set_propagation(&self, propagation: bool) -> Result<(), ArkUIInputError> {
        check_status(unsafe { OH_ArkUI_CoastingAxisEvent_SetPropagation(self.raw(), propagation) })
    }
}

impl ArkUIInputEvent {
    pub fn coasting_axis_event(&self) -> Option<ArkUICoastingAxisEvent> {
        let event = unsafe { OH_ArkUI_UIInputEvent_GetCoastingAxisEvent(self.raw_mut()) };
        NonNull::new(event).map(|event| ArkUICoastingAxisEvent { event })
    }
}