#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct EventCode(pub u32);
impl EventCode {
pub const ALL: Self = Self(0);
pub const PRESSED: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_PRESSED);
pub const PRESSING: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_PRESSING);
pub const SHORT_CLICKED: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_SHORT_CLICKED);
pub const SINGLE_CLICKED: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_SINGLE_CLICKED);
pub const DOUBLE_CLICKED: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_DOUBLE_CLICKED);
pub const TRIPLE_CLICKED: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_TRIPLE_CLICKED);
pub const LONG_PRESSED: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_LONG_PRESSED);
pub const LONG_PRESSED_REPEAT: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_LONG_PRESSED_REPEAT);
pub const CLICKED: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_CLICKED);
pub const VALUE_CHANGED: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_VALUE_CHANGED);
pub const SCROLL: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_SCROLL);
pub const DRAW_TASK_ADDED: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_DRAW_TASK_ADDED);
pub const DRAW_MAIN_END: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_DRAW_MAIN_END);
pub const FOCUSED: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_FOCUSED);
pub const DEFOCUSED: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_DEFOCUSED);
pub const READY: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_READY);
pub const KEY: Self = Self(oxivgl_sys::lv_event_code_t_LV_EVENT_KEY);
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Key(pub u32);
impl Key {
pub const UP: Self = Self(oxivgl_sys::lv_key_t_LV_KEY_UP);
pub const DOWN: Self = Self(oxivgl_sys::lv_key_t_LV_KEY_DOWN);
pub const RIGHT: Self = Self(oxivgl_sys::lv_key_t_LV_KEY_RIGHT);
pub const LEFT: Self = Self(oxivgl_sys::lv_key_t_LV_KEY_LEFT);
pub const ESC: Self = Self(oxivgl_sys::lv_key_t_LV_KEY_ESC);
pub const DEL: Self = Self(oxivgl_sys::lv_key_t_LV_KEY_DEL);
pub const BACKSPACE: Self = Self(oxivgl_sys::lv_key_t_LV_KEY_BACKSPACE);
pub const ENTER: Self = Self(oxivgl_sys::lv_key_t_LV_KEY_ENTER);
pub const NEXT: Self = Self(oxivgl_sys::lv_key_t_LV_KEY_NEXT);
pub const PREV: Self = Self(oxivgl_sys::lv_key_t_LV_KEY_PREV);
pub const HOME: Self = Self(oxivgl_sys::lv_key_t_LV_KEY_HOME);
pub const END: Self = Self(oxivgl_sys::lv_key_t_LV_KEY_END);
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct ObjFlag(pub u32);
impl ObjFlag {
pub const CLICKABLE: Self = Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_CLICKABLE);
pub const CHECKABLE: Self = Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_CHECKABLE);
pub const SCROLLABLE: Self = Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_SCROLLABLE);
pub const IGNORE_LAYOUT: Self = Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_IGNORE_LAYOUT);
pub const EVENT_BUBBLE: Self = Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_EVENT_BUBBLE);
pub const EVENT_TRICKLE: Self = Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_EVENT_TRICKLE);
pub const SCROLL_ELASTIC: Self = Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_SCROLL_ELASTIC);
pub const SCROLL_ONE: Self = Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_SCROLL_ONE);
pub const SNAPPABLE: Self = Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_SNAPPABLE);
pub const FLOATING: Self = Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_FLOATING);
pub const PRESS_LOCK: Self = Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_PRESS_LOCK);
pub const SEND_DRAW_TASK_EVENTS: Self = Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_SEND_DRAW_TASK_EVENTS);
pub const ADV_HITTEST: Self = Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_ADV_HITTEST);
pub const CLICK_FOCUSABLE: Self = Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_CLICK_FOCUSABLE);
pub const FLEX_IN_NEW_TRACK: Self =
Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_FLEX_IN_NEW_TRACK);
pub const HIDDEN: Self = Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_HIDDEN);
pub const SCROLL_MOMENTUM: Self =
Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_SCROLL_MOMENTUM);
pub const SCROLL_CHAIN: Self = Self(oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_SCROLL_CHAIN);
}
impl core::ops::BitOr for ObjFlag {
type Output = Self;
fn bitor(self, rhs: Self) -> Self {
Self(self.0 | rhs.0)
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct ObjState(pub u32);
impl ObjState {
pub const DEFAULT: Self = Self(oxivgl_sys::lv_state_t_LV_STATE_DEFAULT);
pub const CHECKED: Self = Self(oxivgl_sys::lv_state_t_LV_STATE_CHECKED);
pub const FOCUSED: Self = Self(oxivgl_sys::lv_state_t_LV_STATE_FOCUSED);
pub const PRESSED: Self = Self(oxivgl_sys::lv_state_t_LV_STATE_PRESSED);
pub const DISABLED: Self = Self(oxivgl_sys::lv_state_t_LV_STATE_DISABLED);
pub const SCROLLED: Self = Self(oxivgl_sys::lv_state_t_LV_STATE_SCROLLED);
pub const ANY: Self = Self(oxivgl_sys::lv_state_t_LV_STATE_ANY);
}
impl core::ops::BitOr for ObjState {
type Output = Self;
fn bitor(self, rhs: Self) -> Self {
Self(self.0 | rhs.0)
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Opa(pub u8);
impl Opa {
pub const TRANSP: Self = Self(oxivgl_sys::_lv_opacity_level_t_LV_OPA_TRANSP as u8);
pub const OPA_10: Self = Self(oxivgl_sys::_lv_opacity_level_t_LV_OPA_10 as u8);
pub const OPA_20: Self = Self(oxivgl_sys::_lv_opacity_level_t_LV_OPA_20 as u8);
pub const OPA_30: Self = Self(oxivgl_sys::_lv_opacity_level_t_LV_OPA_30 as u8);
pub const OPA_40: Self = Self(oxivgl_sys::_lv_opacity_level_t_LV_OPA_40 as u8);
pub const OPA_50: Self = Self(oxivgl_sys::_lv_opacity_level_t_LV_OPA_50 as u8);
pub const OPA_60: Self = Self(oxivgl_sys::_lv_opacity_level_t_LV_OPA_60 as u8);
pub const OPA_70: Self = Self(oxivgl_sys::_lv_opacity_level_t_LV_OPA_70 as u8);
pub const OPA_80: Self = Self(oxivgl_sys::_lv_opacity_level_t_LV_OPA_80 as u8);
pub const OPA_90: Self = Self(oxivgl_sys::_lv_opacity_level_t_LV_OPA_90 as u8);
pub const COVER: Self = Self(oxivgl_sys::_lv_opacity_level_t_LV_OPA_COVER as u8);
}
#[repr(u32)]
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum ScrollbarMode {
Off = oxivgl_sys::lv_scrollbar_mode_t_LV_SCROLLBAR_MODE_OFF,
On = oxivgl_sys::lv_scrollbar_mode_t_LV_SCROLLBAR_MODE_ON,
Active = oxivgl_sys::lv_scrollbar_mode_t_LV_SCROLLBAR_MODE_ACTIVE,
Auto = oxivgl_sys::lv_scrollbar_mode_t_LV_SCROLLBAR_MODE_AUTO,
}
#[repr(u32)]
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum ScrollSnap {
None = oxivgl_sys::lv_scroll_snap_t_LV_SCROLL_SNAP_NONE,
Start = oxivgl_sys::lv_scroll_snap_t_LV_SCROLL_SNAP_START,
End = oxivgl_sys::lv_scroll_snap_t_LV_SCROLL_SNAP_END,
Center = oxivgl_sys::lv_scroll_snap_t_LV_SCROLL_SNAP_CENTER,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct ScrollDir(pub u32);
impl ScrollDir {
pub const NONE: Self = Self(oxivgl_sys::lv_dir_t_LV_DIR_NONE);
pub const HOR: Self = Self(oxivgl_sys::lv_dir_t_LV_DIR_HOR);
pub const VER: Self = Self(oxivgl_sys::lv_dir_t_LV_DIR_VER);
pub const ALL: Self = Self(oxivgl_sys::lv_dir_t_LV_DIR_ALL);
pub const TOP: Self = Self(oxivgl_sys::lv_dir_t_LV_DIR_TOP);
pub const BOTTOM: Self = Self(oxivgl_sys::lv_dir_t_LV_DIR_BOTTOM);
pub const LEFT: Self = Self(oxivgl_sys::lv_dir_t_LV_DIR_LEFT);
pub const RIGHT: Self = Self(oxivgl_sys::lv_dir_t_LV_DIR_RIGHT);
}
impl core::ops::BitOr for ScrollDir {
type Output = Self;
fn bitor(self, rhs: Self) -> Self {
Self(self.0 | rhs.0)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn event_code_known_values() {
assert_eq!(EventCode::ALL.0, 0);
assert_eq!(EventCode::PRESSED.0, 1);
assert_eq!(EventCode::LONG_PRESSED.0, 8);
assert_eq!(EventCode::LONG_PRESSED_REPEAT.0, 9);
assert_eq!(EventCode::CLICKED.0, 10);
assert_eq!(EventCode::VALUE_CHANGED.0, 35);
assert_eq!(
EventCode::DEFOCUSED.0,
oxivgl_sys::lv_event_code_t_LV_EVENT_DEFOCUSED
);
}
#[test]
fn event_code_equality() {
assert_eq!(EventCode::CLICKED, EventCode::CLICKED);
assert_ne!(EventCode::CLICKED, EventCode::PRESSED);
}
#[test]
fn event_code_unknown_value_roundtrips() {
let custom = EventCode(999);
assert_eq!(custom.0, 999);
assert_ne!(custom, EventCode::ALL);
}
#[test]
fn obj_flag_values_match_bindings() {
assert_eq!(
ObjFlag::CLICKABLE.0,
oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_CLICKABLE
);
assert_eq!(
ObjFlag::CHECKABLE.0,
oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_CHECKABLE
);
assert_eq!(
ObjFlag::SCROLLABLE.0,
oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_SCROLLABLE
);
assert_eq!(
ObjFlag::IGNORE_LAYOUT.0,
oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_IGNORE_LAYOUT
);
assert_eq!(
ObjFlag::EVENT_BUBBLE.0,
oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_EVENT_BUBBLE
);
}
#[test]
fn obj_flag_bitor_combines_bits() {
let combined = ObjFlag::CLICKABLE | ObjFlag::CHECKABLE;
assert_eq!(combined.0, ObjFlag::CLICKABLE.0 | ObjFlag::CHECKABLE.0);
}
#[test]
fn obj_flag_bitor_idempotent() {
let flag = ObjFlag::SCROLLABLE | ObjFlag::SCROLLABLE;
assert_eq!(flag, ObjFlag::SCROLLABLE);
}
#[test]
fn obj_state_values_match_bindings() {
assert_eq!(
ObjState::DEFAULT.0,
oxivgl_sys::lv_state_t_LV_STATE_DEFAULT
);
assert_eq!(
ObjState::CHECKED.0,
oxivgl_sys::lv_state_t_LV_STATE_CHECKED
);
assert_eq!(
ObjState::FOCUSED.0,
oxivgl_sys::lv_state_t_LV_STATE_FOCUSED
);
assert_eq!(
ObjState::PRESSED.0,
oxivgl_sys::lv_state_t_LV_STATE_PRESSED
);
}
#[test]
fn obj_state_pressed_is_not_0x20() {
assert_ne!(ObjState::PRESSED.0, 0x20);
assert_eq!(
ObjState::PRESSED.0,
oxivgl_sys::lv_state_t_LV_STATE_PRESSED
);
}
#[test]
fn obj_state_bitor_combines() {
let combined = ObjState::CHECKED | ObjState::PRESSED;
assert_eq!(combined.0, ObjState::CHECKED.0 | ObjState::PRESSED.0);
}
#[test]
fn obj_state_default_is_zero() {
assert_eq!(ObjState::DEFAULT.0, 0);
}
#[test]
fn scrollbar_mode_discriminants() {
assert_eq!(
ScrollbarMode::Off as u32,
oxivgl_sys::lv_scrollbar_mode_t_LV_SCROLLBAR_MODE_OFF
);
assert_eq!(
ScrollbarMode::On as u32,
oxivgl_sys::lv_scrollbar_mode_t_LV_SCROLLBAR_MODE_ON
);
assert_eq!(
ScrollbarMode::Active as u32,
oxivgl_sys::lv_scrollbar_mode_t_LV_SCROLLBAR_MODE_ACTIVE
);
assert_eq!(
ScrollbarMode::Auto as u32,
oxivgl_sys::lv_scrollbar_mode_t_LV_SCROLLBAR_MODE_AUTO
);
}
#[test]
fn opa_values_match_bindings() {
assert_eq!(
Opa::TRANSP.0,
oxivgl_sys::_lv_opacity_level_t_LV_OPA_TRANSP as u8
);
assert_eq!(
Opa::OPA_20.0,
oxivgl_sys::_lv_opacity_level_t_LV_OPA_20 as u8
);
assert_eq!(
Opa::OPA_50.0,
oxivgl_sys::_lv_opacity_level_t_LV_OPA_50 as u8
);
assert_eq!(
Opa::COVER.0,
oxivgl_sys::_lv_opacity_level_t_LV_OPA_COVER as u8
);
}
#[test]
fn opa_transp_is_zero() {
assert_eq!(Opa::TRANSP.0, 0);
}
#[test]
fn opa_cover_is_255() {
assert_eq!(Opa::COVER.0, 255);
}
#[test]
fn obj_flag_hidden_matches_binding() {
assert_eq!(
ObjFlag::HIDDEN.0,
oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_HIDDEN
);
}
#[test]
fn obj_flag_scroll_momentum_matches_binding() {
assert_eq!(
ObjFlag::SCROLL_MOMENTUM.0,
oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_SCROLL_MOMENTUM
);
}
#[test]
fn obj_flag_scroll_chain_matches_binding() {
assert_eq!(
ObjFlag::SCROLL_CHAIN.0,
oxivgl_sys::lv_obj_flag_t_LV_OBJ_FLAG_SCROLL_CHAIN
);
}
#[test]
fn opa_monotonic() {
assert!(Opa::OPA_10.0 < Opa::OPA_20.0);
assert!(Opa::OPA_50.0 < Opa::OPA_90.0);
assert!(Opa::OPA_90.0 < Opa::COVER.0);
}
}