use std::fmt;
use std::cmp;
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum LogType {
Info,
Warn,
Error,
Wayland
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum BackendType {
None,
DRM,
X11
}
bitflags! {
#[repr(C)]
pub flags EventBit: u32 {
const EVENT_READABLE = 1,
const EVENT_WRITEABLE = 2,
const EVENT_HANGUP = 4,
const EVENT_ERROR = 8
}
}
bitflags! {
#[repr(C)]
pub flags ViewState: u32 {
const VIEW_MAXIMIZED = 1,
const VIEW_FULLSCREEN = 2,
const VIEW_RESIZING = 4,
const VIEW_MOVING = 8,
const VIEW_ACTIVATED = 16
}
}
bitflags! {
#[repr(C)]
pub flags ViewType: u32 {
const VIEW_BIT_OVERRIDE_REDIRECT = 1,
const VIEW_BIT_UNMANAGED = 2,
const VIEW_BIT_SPLASH = 4,
const VIEW_BIT_MODAL = 8,
const VIEW_BIT_POPUP = 16
}
}
bitflags! {
#[repr(C)]
pub flags ResizeEdge: u32 {
const EDGE_NONE = 0,
const RESIZE_TOP = 1,
const RESIZE_BOTTOM = 2,
const RESIZE_LEFT = 4,
const RESIZE_TOPLEFT = 5,
const RESIZE_BOTTOMLEFT = 6,
const RESIZE_RIGHT = 8,
const RESIZE_TOPRIGHT = 9,
const RESIZE_BOTTOMRIGHT = 10
}
}
bitflags! {
#[repr(C)]
pub flags ViewPropertyType: u32 {
const PROPERTY_TITLE = 0,
const PROPRETY_CLASS = 1,
const PROPERTY_APP_ID = 2,
const PROPERTY_PID = 4
}
}
bitflags! {
#[repr(C)]
pub flags KeyMod: u32 {
const MOD_NONE = 0,
const MOD_SHIFT = 1,
const MOD_CAPS = 2,
const MOD_CTRL = 4,
const MOD_ALT = 8,
const MOD_MOD2 = 16,
const MOD_MOD3 = 32,
const MOD_MOD4 = 64,
const MOD_MOD5 = 128
}
}
bitflags! {
#[repr(C)]
pub flags KeyboardLed: u32 {
const NUM_LOCK = 1,
const CAPS_LOCK = 2,
const SCROL_LLOCK = 4,
const SCROLL_LOCK = 4
}
}
bitflags! {
#[repr(C)]
pub flags PositionerAnchorBit: u32 {
const WLC_BIT_ANCHOR_NONE = 0,
const WLC_BIT_ANCHOR_TOP = 1<<0,
const WLC_BIT_ANCHOR_BOTTOM = 1<<1,
const WLC_BIT_ANCHOR_LEFT = 1<<2,
const WLC_BIT_ANCHOR_RIGHT = 1<<3
}
}
bitflags! {
#[repr(C)]
pub flags PositionerGravityBit: u32 {
const WLC_BIT_GRAVITY_NONE = 0,
const WLC_BIT_GRAVITY_TOP = 1<<0,
const WLC_BIT_GRAVITY_BOTTOM = 1<<1,
const WLC_BIT_GRAVITY_LEFT = 1<<2,
const WLC_BIT_GRAVITY_RIGHT = 1<<3
}
}
bitflags! {
#[repr(C)]
pub flags PositionerConstraintAdjustmentBits: u32 {
const WLC_BIT_CONSTRAINT_ADJUSTMENT_NONE = 0,
const WLC_BIT_CONSTRAINT_ADJUSTMENT_SLIDE_X = 1<<0,
const WLC_BIT_CONSTRAINT_ADJUSTMENT_SLIDE_Y = 1<<1,
const WLC_BIT_CONSTRAINT_ADJUSTMENT_FLIP_X = 1<<2,
const WLC_BIT_CONSTRAINT_ADJUSTMENT_FLIP_Y = 1<<3,
const WLC_BIT_CONSTRAINT_ADJUSTMENT_RESIZE_X = 1<<4,
const WLC_BIT_CONSTRAINT_ADJUSTMENT_RESIZE_Y = 1<<5
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum KeyState {
Released = 0,
Pressed = 1
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum ButtonState {
Released = 0,
Pressed = 1
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum ScrollAxis {
None = 0,
Vertical = 1,
Horizontal = 2,
Both = 3
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum TouchType {
Down,
Up,
Motion,
Frame,
Cancel
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub struct KeyboardModifiers {
pub leds: KeyboardLed,
pub mods: KeyMod
}
#[repr(C)]
#[derive(Debug, Eq, PartialEq, Copy, Clone, Hash)]
pub struct Point {
pub x: i32,
pub y: i32
}
impl Point {
pub fn origin() -> Point {
Point { x: 0, y: 0 }
}
pub fn new(x: i32, y: i32) -> Point {
Point { x: x, y: y }
}
pub fn from_min_coords(a: Point, b: Point) -> Point {
Point::new(cmp::min(a.x, b.x), cmp::min(a.y, b.y))
}
pub fn from_max_coords(a: Point, b: Point) -> Point {
Point::new(cmp::max(a.x, b.x), cmp::max(a.y, b.y))
}
}
impl fmt::Display for Point {
fn fmt(&self, format: &mut fmt::Formatter) -> fmt::Result {
write!(format, "({}, {})", self.x, self.y)
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub struct Size {
pub w: u32,
pub h: u32
}
impl Size {
pub fn zero() -> Size {
Size { w: 0, h: 0 }
}
pub fn new(w: u32, h: u32) -> Size {
Size { w: w, h: h }
}
pub fn from_min_dimensions(a: Size, b: Size) -> Size {
Size::new(cmp::min(a.h, b.h), cmp::min(a.w, b.w))
}
pub fn from_max_dimensions(a: Size, b: Size) -> Size {
Size::new(cmp::max(a.h, b.h), cmp::max(a.w, b.w))
}
}
impl fmt::Display for Size {
fn fmt(&self, format: &mut fmt::Formatter) -> fmt::Result {
write!(format, "{} x {}", self.w, self.h)
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub struct Geometry {
pub origin: Point,
pub size: Size
}
impl Geometry {
pub fn zero() -> Geometry {
Geometry { origin: Point::origin(), size: Size::zero() }
}
pub fn new(origin: Point, size: Size) -> Geometry {
Geometry { origin: origin, size: size }
}
pub fn contains_point(self, point: Point) -> bool {
point.x <= self.origin.x + self.size.w as i32 &&
point.y <= self.origin.y + self.size.h as i32
}
pub fn contains_geometry(self, other: Geometry) -> bool {
self.origin.x <= other.origin.x
&& self.origin.y <= other.origin.y
&& self.origin.x + self.size.w as i32
>= other.origin.x + other.size.w as i32
&& self.origin.y + self.size.h as i32
>= other.origin.y + other.size.h as i32
}
}
impl fmt::Display for Geometry {
fn fmt(&self, format: &mut fmt::Formatter) -> fmt::Result {
write!(format, "[{} at {}]", self.size, self.origin)
}
}
#[repr(C)]
pub struct LibinputDevice;