/* See LICENSE file for copyright and license details. */
/**
* The highest number of the `struct_version` field in
* `struct libaxl_display_info` that this header file
* supports
*/
#define LIBAXL_DISPLAY_INFO_VERSION 0
/**
* Standard byte orders
*/
enum libaxl_byte_order {
/**
* Least significant byte first
*/
LIBAXL_LSB_FIRST,
/**
* Most significant byte first
*/
LIBAXL_MSB_FIRST
};
/**
* Standard bit orders
*/
enum libaxl_bit_order {
/**
* Least significant bit leftmost
*/
LIBAXL_LSB_LEFTMOST,
/**
* Most significant bit leftmost
*/
LIBAXL_MSB_LEFTMOST
};
struct libaxl_format {
uint8_t depth;
uint8_t bits_per_pixel;
uint8_t scanline_pad;
uint8_t __unused[5];
};
struct libaxl_visual_type {
libaxl_visual_t visual_id;
uint8_t class; /* LIBAXL_STATIC_GRAY, LIBAXL_GRAY_SCALE, LIBAXL_STATIC_COLOR,
* LIBAXL_PSEUDO_COLOR, LIBAXL_TRUE_COLOR, LIBAXL_DIRECT_COLOR */
uint8_t bits_per_rgb_value;
uint16_t colormap_entries;
uint32_t red_mask;
uint32_t green_mask;
uint32_t blue_mask;
uint32_t __unused;
};
struct libaxl_depth {
uint8_t depth;
uint8_t __pad;
uint16_t number_of_visuals;
uint32_t __unused;
struct libaxl_visual_type visuals[];
};
/**
* Screen information
*/
struct libaxl_screen {
/**
* The root window of the screen
*
* This is always an LIBAXL_INPUT_OUTPUT window
*/
libaxl_window_t root;
/**
* The map initially associated with the root window
*
* Windows with minimal colour requires may want to
* use this colormap if they use the same depth as
* the root window.
*/
libaxl_colormap_t default_colormap;
/**
* Bright colour usable for implementing monochrome
* applications using `.default_colormap`
*
* This colour is permanently allocated
*
* May be set to a dark colour on some screens
* (that what the colours to be inverted); the
* actual RGB value is unspecified and may any
* colour and not necessarily black or white
*/
uint32_t white_pixel;
/**
* Dark colour usable for implementing monochrome
* applications using `.default_colormap`
*
* This colour is permanently allocated
*
* May be set to a bright colour on some screens
* (that what the colours to be inverted); the
* actual RGB value is unspecified and may any
* colour and not necessarily black or white
*/
uint32_t black_pixel;
uint32_t current_input_masks; /* TODO SETofEVENTS */
/**
* The width, in pixels, of the root window;
* which cannot be changed in the core protocol
*
* This value will not update when root window
* is resized, but new connections may get an
* update value
*/
uint16_t width_in_pixels;
/**
* The height, in pixels, of the root window;
* which cannot be changed in the core protocol
*
* This value will not update when root window
* is resized, but new connections may get an
* update value
*/
uint16_t height_in_pixels;
/**
* The width, in millimeters, of the root window;
* which cannot be changed in the core protocol
*
* This value will not update when root window
* is resized or the monitor is changed
*
* Note that the horizontal and vertical DPI
* (dots per inch) of a monitor are not
* necessarily equal to each other
*/
uint16_t width_in_millimeters;
/**
* The height, in millimeters, of the root window;
* which cannot be changed in the core protocol
*
* This value will not update when root window
* is resized or the monitor is changed
*
* Note that the horizontal and vertical DPI
* (dots per inch) of a monitor are not
* necessarily equal to each other
*/
uint16_t height_in_millimeters;
uint16_t min_installed_maps;
uint16_t max_installed_maps;
libaxl_visual_t root_visual;
uint8_t backing_stores;
libaxl_bool_t save_under;
uint8_t root_depth;
uint8_t number_of_allowed_depths;
struct libaxl_depth allowed_depths[];
};
/**
* Information about the display, display server, and connection
*/
struct libaxl_display_info {
/**
* The version number of this structure that this library uses.
* When using dynamic linking, is important use the version that
* is the lowest of the number stored in this field and the
* number stored in the LIBAXL_DISPLAY_INFO_VERSION constant.
*/
int struct_version; /* TODO set when creating LIBAXL_CONNECTION */
/* SINCE STRUCT VERSION 0: */
/**
* The major number of version of the protocol negotiated
* between the client and the server. This is not necessarily
* the same number as returned in the second parameter of
* the libaxl_receive_handshake() function.
*/
int protocol_version_major;
/**
* The minor number of version of the protocol negotiated
* between the client and the server. This is not necessarily
* the same number as returned in the third parameter of
* the libaxl_receive_handshake() function.
*/
int protocol_version_minor;
/**
* The version of the protocol negotiated between the client
* and the server, encoded as the sum of the major number
* multipled by 10000 and the minor number.
*/
int protocol_version;
/**
* The byte order generally used in communication with the
* display server
*/
enum libaxl_byte_order protocol_byte_order;
/**
* The byte order used in images
*/
enum libaxl_byte_order image_byte_order;
/**
* The smallest keycode transmitted by the server
*
* Will never be less than 8
*/
unsigned int min_keycode;
/**
* The greatest keycode transmitted by the server
*
* This field has the `unsigned int` type rather than the
* `libaxl_keycode_t` type because the latter is restricted
* to 8-bits, and a future version of the protocol could
* theoretically use a larger value
*/
unsigned int max_keycode;
/**
* Some identification of the owner of the server implementation
*/
const char *vendor;
/**
* Release number for the implementation. The vendor controls
* the semantics of this number.
*/
uint32_t vendor_release;
/**
* The bit order used in the units in the scanlines of bitmaps
*/
enum libaxl_bit_order bitmap_format_bit_order;
/**
* Number of bits (will be a multiple of 8) that the scanlines
* in bitmaps are quantised into units of
*
* Will never greater than `bitmap_format_scanline_pad`
*/
size_t bitmap_format_scanline_unit;
/**
* Number of bits (will be a multiple of 8), that scanlines in
* bitmaps are padded to
*/
size_t bitmap_format_scanline_pad;
/**
* The server may retain recent pointer motion history with
* finer granularity than is reported by LIBAXL_EVENT_MOTION_NOTIFY
* events, and which may be requested with
* LIBAXL_REQUEST_GET_MOTION_EVENTS requests
*/
size_t motion_buffer_size;
/**
* The maximum value that can may appear in the length field
* in requests (that field is filled in by the library). Any
* requests larger than this (it is in byte-quads, meaning
* that it is multipled by 4 to get limit in bytes) generate
* a LIBAXL_ERROR_LENGTH error and the request is discarded.
*
* This field will always be at least 4096 (meaning 16384 bytes)
*/
size_t maximum_request_length;
/**
* The number of elements in `.formats`
*/
size_t nformats;
const struct libaxl_format *formats; /* TODO doc */
/**
* The number of elements in `.screens`
*/
size_t nscreens;
/**
* List of all screens in the display
*/
const struct libaxl_format *screens;
};