cbf-chrome 0.1.0-alpha.4

Chromium-specific safe API layer for CBF.
Documentation
//! Chrome-specific mouse event types and button identifiers, with conversions to/from `cbf` equivalents.

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ChromeMouseEventType {
    Down,
    Up,
    Move,
    Enter,
    Leave,
}

impl From<ChromeMouseEventType> for cbf::data::mouse::MouseEventType {
    fn from(value: ChromeMouseEventType) -> Self {
        match value {
            ChromeMouseEventType::Down => Self::Down,
            ChromeMouseEventType::Up => Self::Up,
            ChromeMouseEventType::Move => Self::Move,
            ChromeMouseEventType::Enter => Self::Enter,
            ChromeMouseEventType::Leave => Self::Leave,
        }
    }
}

impl From<cbf::data::mouse::MouseEventType> for ChromeMouseEventType {
    fn from(value: cbf::data::mouse::MouseEventType) -> Self {
        match value {
            cbf::data::mouse::MouseEventType::Down => Self::Down,
            cbf::data::mouse::MouseEventType::Up => Self::Up,
            cbf::data::mouse::MouseEventType::Move => Self::Move,
            cbf::data::mouse::MouseEventType::Enter => Self::Enter,
            cbf::data::mouse::MouseEventType::Leave => Self::Leave,
        }
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ChromeMouseButton {
    None,
    Left,
    Middle,
    Right,
    Back,
    Forward,
}

impl From<ChromeMouseButton> for cbf::data::mouse::MouseButton {
    fn from(value: ChromeMouseButton) -> Self {
        match value {
            ChromeMouseButton::None => Self::None,
            ChromeMouseButton::Left => Self::Left,
            ChromeMouseButton::Middle => Self::Middle,
            ChromeMouseButton::Right => Self::Right,
            ChromeMouseButton::Back => Self::Back,
            ChromeMouseButton::Forward => Self::Forward,
        }
    }
}

impl From<cbf::data::mouse::MouseButton> for ChromeMouseButton {
    fn from(value: cbf::data::mouse::MouseButton) -> Self {
        match value {
            cbf::data::mouse::MouseButton::None => Self::None,
            cbf::data::mouse::MouseButton::Left => Self::Left,
            cbf::data::mouse::MouseButton::Middle => Self::Middle,
            cbf::data::mouse::MouseButton::Right => Self::Right,
            cbf::data::mouse::MouseButton::Back => Self::Back,
            cbf::data::mouse::MouseButton::Forward => Self::Forward,
        }
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ChromePointerType {
    Unknown,
    Mouse,
    Pen,
    Touch,
    Eraser,
}

impl From<ChromePointerType> for cbf::data::mouse::PointerType {
    fn from(value: ChromePointerType) -> Self {
        match value {
            ChromePointerType::Unknown => Self::Unknown,
            ChromePointerType::Mouse => Self::Mouse,
            ChromePointerType::Pen => Self::Pen,
            ChromePointerType::Touch => Self::Touch,
            ChromePointerType::Eraser => Self::Eraser,
        }
    }
}

impl From<cbf::data::mouse::PointerType> for ChromePointerType {
    fn from(value: cbf::data::mouse::PointerType) -> Self {
        match value {
            cbf::data::mouse::PointerType::Unknown => Self::Unknown,
            cbf::data::mouse::PointerType::Mouse => Self::Mouse,
            cbf::data::mouse::PointerType::Pen => Self::Pen,
            cbf::data::mouse::PointerType::Touch => Self::Touch,
            cbf::data::mouse::PointerType::Eraser => Self::Eraser,
        }
    }
}

#[derive(Debug, Clone, PartialEq)]
pub struct ChromeMouseEvent {
    pub type_: ChromeMouseEventType,
    pub modifiers: u32,
    pub button: ChromeMouseButton,
    pub click_count: i32,
    pub position_in_widget_x: f32,
    pub position_in_widget_y: f32,
    pub position_in_screen_x: f32,
    pub position_in_screen_y: f32,
    pub movement_x: f32,
    pub movement_y: f32,
    pub is_raw_movement_event: bool,
    pub pointer_type: ChromePointerType,
}

impl From<ChromeMouseEvent> for cbf::data::mouse::MouseEvent {
    fn from(value: ChromeMouseEvent) -> Self {
        Self {
            type_: value.type_.into(),
            modifiers: value.modifiers,
            button: value.button.into(),
            click_count: value.click_count,
            position_in_widget_x: value.position_in_widget_x,
            position_in_widget_y: value.position_in_widget_y,
            position_in_screen_x: value.position_in_screen_x,
            position_in_screen_y: value.position_in_screen_y,
            movement_x: value.movement_x,
            movement_y: value.movement_y,
            is_raw_movement_event: value.is_raw_movement_event,
            pointer_type: value.pointer_type.into(),
        }
    }
}

impl From<cbf::data::mouse::MouseEvent> for ChromeMouseEvent {
    fn from(value: cbf::data::mouse::MouseEvent) -> Self {
        Self {
            type_: value.type_.into(),
            modifiers: value.modifiers,
            button: value.button.into(),
            click_count: value.click_count,
            position_in_widget_x: value.position_in_widget_x,
            position_in_widget_y: value.position_in_widget_y,
            position_in_screen_x: value.position_in_screen_x,
            position_in_screen_y: value.position_in_screen_y,
            movement_x: value.movement_x,
            movement_y: value.movement_y,
            is_raw_movement_event: value.is_raw_movement_event,
            pointer_type: value.pointer_type.into(),
        }
    }
}