#![allow(non_camel_case_types)]
use crate::{Extent, Position, c_char, c_int};
pub(crate) type xcb_window_t = u32;
pub(crate) type xcb_gcontext_t = u32;
pub(crate) type xcb_keycode_t = u8;
pub(crate) type xcb_timestamp_t = u32;
#[doc = crate::_tags!(unix ffi)]
#[repr(C)]
#[derive(Debug)]
pub(crate) struct xcb_connection_t {
_private: [u8; 0],
}
#[link(name = "xcb")]
unsafe extern "C" {
pub(crate) fn xcb_connect(display: *const c_char, screen: *mut c_int) -> *mut xcb_connection_t;
pub(crate) fn xcb_connection_has_error(c: *mut xcb_connection_t) -> c_int;
pub(crate) fn xcb_disconnect(c: *mut xcb_connection_t);
pub(crate) fn xcb_flush(c: *mut xcb_connection_t) -> c_int;
pub(crate) fn xcb_generate_id(c: *mut xcb_connection_t) -> u32;
}
#[doc = crate::_tags!(unix ffi)]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub(crate) struct xcb_setup_t {
pub status: u8,
pad0: u8,
pub protocol_major_version: u16,
pub protocol_minor_version: u16,
pub length: u16,
pub release_number: u32,
pub resource_id_base: u32,
pub resource_id_mask: u32,
pub motion_buffer_size: u32,
pub vendor_len: u16,
pub maximum_request_length: u16,
pub roots_len: u8,
pub pixmap_formats_len: u8,
pub image_byte_order: u8,
pub bitmap_format_bit_order: u8,
pub bitmap_format_scanline_unit: u8,
pub bitmap_format_scanline_pad: u8,
pub min_keycode: u8,
pub max_keycode: u8,
pad1: [u8; 4],
}
#[doc = crate::_tags!(unix ffi)]
#[repr(C)]
#[derive(Debug)]
pub(crate) struct xcb_screen_t {
pub root: xcb_window_t,
pub default_colormap: u32, pub white_pixel: u32,
pub black_pixel: u32,
pub current_input_masks: u32,
pub width_in_pixels: u16,
pub height_in_pixels: u16,
pub width_in_millimeters: u16,
pub height_in_millimeters: u16,
pub min_installed_maps: u16,
pub max_installed_maps: u16,
pub root_visual: u32, pub backing_stores: u8,
pub save_unders: u8,
pub root_depth: u8,
pub allowed_depths_len: u8,
}
#[doc = crate::_tags!(unix ffi iterator)]
#[repr(C)]
#[derive(Debug)]
pub(crate) struct xcb_screen_iterator_t {
pub(in super::super) data: *mut xcb_screen_t,
pub(in super::super) rem: c_int,
pub(in super::super) index: c_int,
}
#[link(name = "xcb")]
unsafe extern "C" {
pub(crate) fn xcb_get_setup(c: *mut xcb_connection_t) -> *const xcb_setup_t;
pub(crate) fn xcb_setup_roots_iterator(setup: *const xcb_setup_t) -> xcb_screen_iterator_t;
}
#[link(name = "xcb")]
unsafe extern "C" {
pub(crate) fn xcb_create_gc(
c: *mut xcb_connection_t,
cid: xcb_gcontext_t,
drawable: xcb_window_t,
value_mask: u32,
value_list: *const u32,
);
pub(crate) fn xcb_free_gc(conn: *mut xcb_connection_t, gc: xcb_gcontext_t);
pub(crate) fn xcb_create_window(
c: *mut xcb_connection_t,
depth: u8,
wid: xcb_window_t,
parent: xcb_window_t,
x: i16,
y: i16,
width: u16,
height: u16,
border_width: u16,
class: u16,
visual: u32,
value_mask: u32,
value_list: *const u32,
);
pub(crate) fn xcb_destroy_window(conn: *mut xcb_connection_t, window: xcb_window_t);
pub(crate) fn xcb_map_window(c: *mut xcb_connection_t, window: xcb_window_t) -> u32;
pub(crate) fn xcb_change_property(
c: *mut xcb_connection_t,
mode: u8,
window: u32,
property: u32,
type_: u32,
format: u8,
data_len: u32,
data: *const u8,
);
}
#[doc = crate::_tags!(unix ffi)]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub(crate) struct xcb_rectangle_t {
pub x: i16,
pub y: i16,
pub width: u16,
pub height: u16,
}
impl xcb_rectangle_t {
pub fn new(pos: Position<i16, 2>, ext: Extent<u16, 2>) -> Self {
Self {
x: pos.x(),
y: pos.y(),
width: ext.w(),
height: ext.h(),
}
}
}
#[link(name = "xcb")]
unsafe extern "C" {
pub(crate) fn xcb_poly_fill_rectangle(
c: *mut xcb_connection_t,
drawable: xcb_window_t,
gc: xcb_gcontext_t,
rectangles_len: u32,
rectangles: *const xcb_rectangle_t,
);
pub(crate) fn xcb_put_image(
c: *mut xcb_connection_t,
format: u8,
drawable: xcb_window_t,
gc: xcb_gcontext_t,
width: u16,
height: u16,
dst_x: i16,
dst_y: i16,
left_pad: u8,
depth: u8,
data_len: u32,
data: *const u8,
);
}
pub(crate) type xcb_intern_atom_cookie_t = u32;
#[doc = crate::_tags!(unix ffi)]
#[repr(C)]
#[derive(Debug)]
pub(crate) struct xcb_void_cookie_t {
sequence: u32,
}
#[doc = crate::_tags!(unix ffi)]
#[repr(C)]
#[derive(Debug)]
pub struct xcb_intern_atom_reply_t {
pub response_type: u8,
pub pad0: u8,
pub sequence: u16,
pub length: u32,
pub atom: u32, }
#[link(name = "xcb")]
unsafe extern "C" {
pub(crate) fn xcb_intern_atom(
c: *mut xcb_connection_t,
only_if_exists: u8,
name_len: u16,
name: *const u8,
) -> xcb_intern_atom_cookie_t;
pub(crate) fn xcb_intern_atom_reply(
c: *mut xcb_connection_t,
cookie: xcb_intern_atom_cookie_t,
e: *mut *mut xcb_generic_error_t,
) -> *mut xcb_intern_atom_reply_t;
}
#[doc = crate::_tags!(unix ffi error)]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct xcb_generic_error_t {
pub response_type: u8,
pub error_code: u8,
pub sequence: u16,
pub resource_id: u32,
pub minor_code: u16,
pub major_code: u8,
pub pad0: u8,
pub pad: [u32; 5],
pub full_sequence: u32,
}
#[doc = crate::_tags!(unix ffi event)]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub(crate) struct xcb_generic_event_t {
pub response_type: u8,
pad0: u8,
pub sequence: u16,
pub pad: [u32; 7],
pub full_sequence: u32,
}
#[doc = crate::_tags!(unix ffi event)]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub(crate) struct xcb_key_press_event_t {
pub response_type: u8,
pub detail: xcb_keycode_t, pub sequence: u16,
pub time: xcb_timestamp_t, pub root: xcb_window_t, pub event: xcb_window_t, pub child: xcb_window_t, pub root_x: i16,
pub root_y: i16,
pub event_x: i16,
pub event_y: i16,
pub state: u16,
pub same_screen: u8,
pad0: u8,
}
pub type xcb_button_press_event_t = xcb_key_press_event_t;
pub type xcb_motion_notify_event_t = xcb_key_press_event_t;
#[doc = crate::_tags!(unix ffi event)]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub(crate) struct xcb_expose_event_t {
pub response_type: u8,
_pad0: u8,
pub sequence: u16,
pub window: xcb_window_t, pub x: u16,
pub y: u16,
pub width: u16,
pub height: u16,
pub count: u16,
_pad1: [u8; 2],
}
#[doc = crate::_tags!(unix ffi event)]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub(crate) struct xcb_enter_notify_event_t {
pub response_type: u8,
pub detail: u8,
pub sequence: u16,
pub time: xcb_timestamp_t, pub root: xcb_window_t, pub event: xcb_window_t, pub child: xcb_window_t, pub root_x: i16,
pub root_y: i16,
pub event_x: i16,
pub event_y: i16,
pub state: u16,
pub mode: u8,
pub same_screen_focus: u8,
_pad1: [u8; 3],
}
pub type xcb_leave_notify_event_t = xcb_enter_notify_event_t;
#[doc = crate::_tags!(unix ffi event)]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub(crate) struct xcb_map_notify_event_t {
pub response_type: u8,
_pad0: u8,
pub sequence: u16,
pub event: xcb_window_t, pub window: xcb_window_t, pub override_redirect: u8,
_pad1: [u8; 3],
}
#[doc = crate::_tags!(unix ffi event)]
pub type xcb_unmap_notify_event_t = xcb_map_notify_event_t;
#[doc = crate::_tags!(unix ffi event)]
#[repr(C)]
#[derive(Clone, Copy, Debug)]
pub(crate) struct xcb_client_message_event_t {
pub response_type: u8,
pub format: u8,
pub sequence: u16,
pub window: xcb_window_t, pub type_: u32, pub data: xcb_client_message_data_t,
}
#[doc = crate::_tags!(unix ffi)]
#[repr(C)]
#[derive(Clone, Copy)]
pub(crate) union xcb_client_message_data_t {
pub data8: [u8; 20],
pub data16: [u16; 10],
pub data32: [u32; 5],
}
crate::impl_trait! { fmt::Debug for xcb_client_message_data_t |self,f|
f.write_str("xcb_client_message_data_t { … }")
}
#[doc = crate::_tags!(unix ffi event)]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub(crate) struct xcb_configure_notify_event_t {
pub response_type: u8,
pad0: u8,
pub sequence: u16,
pub event: xcb_window_t, pub window: xcb_window_t, pub above_sibling: xcb_window_t, pub x: i16,
pub y: i16,
pub width: u16,
pub height: u16,
pub border_width: u16,
pub override_redirect: u8,
pad1: u8,
}
#[link(name = "xcb")]
unsafe extern "C" {
pub(crate) fn xcb_poll_for_event(c: *mut xcb_connection_t) -> *mut xcb_generic_event_t;
pub(crate) fn xcb_poll_for_queued_event(c: *mut xcb_connection_t) -> *mut xcb_generic_event_t;
pub(crate) fn xcb_wait_for_event(c: *mut xcb_connection_t) -> *mut xcb_generic_event_t;
}