/* automatically generated by rust-bindgen 0.71.1 */

pub const MIRACLE_PLUGIN_VERSION: u32 = 1;
pub const MirWindowAttrib_mir_window_attrib_type: MirWindowAttrib = 0;
pub const MirWindowAttrib_mir_window_attrib_state: MirWindowAttrib = 1;
pub const MirWindowAttrib_mir_window_attrib_focus: MirWindowAttrib = 3;
pub const MirWindowAttrib_mir_window_attrib_dpi: MirWindowAttrib = 4;
pub const MirWindowAttrib_mir_window_attrib_visibility: MirWindowAttrib = 5;
pub const MirWindowAttrib_mir_window_attrib_preferred_orientation: MirWindowAttrib = 6;
pub const MirWindowAttrib_mir_window_attribs: MirWindowAttrib = 7;
#[doc = " Attributes of a window that the client and server/shell may wish to\n get or set over the wire."]
pub type MirWindowAttrib = ::std::os::raw::c_uint;
#[doc = "< AKA \"regular\""]
pub const MirWindowType_mir_window_type_normal: MirWindowType = 0;
#[doc = "< AKA \"floating\""]
pub const MirWindowType_mir_window_type_utility: MirWindowType = 1;
pub const MirWindowType_mir_window_type_dialog: MirWindowType = 2;
pub const MirWindowType_mir_window_type_gloss: MirWindowType = 3;
pub const MirWindowType_mir_window_type_freestyle: MirWindowType = 4;
pub const MirWindowType_mir_window_type_menu: MirWindowType = 5;
#[doc = "< AKA \"OSK\" or handwriting etc."]
pub const MirWindowType_mir_window_type_inputmethod: MirWindowType = 6;
#[doc = "< AKA \"toolbox\"/\"toolbar\""]
pub const MirWindowType_mir_window_type_satellite: MirWindowType = 7;
#[doc = "< AKA \"tooltip\""]
pub const MirWindowType_mir_window_type_tip: MirWindowType = 8;
pub const MirWindowType_mir_window_type_decoration: MirWindowType = 9;
pub const MirWindowType_mir_window_types: MirWindowType = 10;
pub type MirWindowType = ::std::os::raw::c_uint;
pub const MirWindowState_mir_window_state_unknown: MirWindowState = 0;
pub const MirWindowState_mir_window_state_restored: MirWindowState = 1;
pub const MirWindowState_mir_window_state_minimized: MirWindowState = 2;
pub const MirWindowState_mir_window_state_maximized: MirWindowState = 3;
pub const MirWindowState_mir_window_state_vertmaximized: MirWindowState = 4;
pub const MirWindowState_mir_window_state_fullscreen: MirWindowState = 5;
pub const MirWindowState_mir_window_state_horizmaximized: MirWindowState = 6;
pub const MirWindowState_mir_window_state_hidden: MirWindowState = 7;
#[doc = "< Used for panels, notifications and other windows attached to output edges"]
pub const MirWindowState_mir_window_state_attached: MirWindowState = 8;
pub const MirWindowState_mir_window_states: MirWindowState = 9;
pub type MirWindowState = ::std::os::raw::c_uint;
#[doc = "< Inactive and does not have focus"]
pub const MirWindowFocusState_mir_window_focus_state_unfocused: MirWindowFocusState = 0;
#[doc = "< Active and has keybaord focus"]
pub const MirWindowFocusState_mir_window_focus_state_focused: MirWindowFocusState = 1;
#[doc = "< Active but does not have keyboard focus"]
pub const MirWindowFocusState_mir_window_focus_state_active: MirWindowFocusState = 2;
pub type MirWindowFocusState = ::std::os::raw::c_uint;
pub const MirWindowVisibility_mir_window_visibility_occluded: MirWindowVisibility = 0;
pub const MirWindowVisibility_mir_window_visibility_exposed: MirWindowVisibility = 1;
pub type MirWindowVisibility = ::std::os::raw::c_uint;
pub const MirLifecycleState_mir_lifecycle_state_will_suspend: MirLifecycleState = 0;
pub const MirLifecycleState_mir_lifecycle_state_resumed: MirLifecycleState = 1;
pub const MirLifecycleState_mir_lifecycle_connection_lost: MirLifecycleState = 2;
pub type MirLifecycleState = ::std::os::raw::c_uint;
pub const MirPowerMode_mir_power_mode_on: MirPowerMode = 0;
pub const MirPowerMode_mir_power_mode_standby: MirPowerMode = 1;
pub const MirPowerMode_mir_power_mode_suspend: MirPowerMode = 2;
pub const MirPowerMode_mir_power_mode_off: MirPowerMode = 3;
pub type MirPowerMode = ::std::os::raw::c_uint;
pub const MirOutputType_mir_output_type_unknown: MirOutputType = 0;
pub const MirOutputType_mir_output_type_vga: MirOutputType = 1;
pub const MirOutputType_mir_output_type_dvii: MirOutputType = 2;
pub const MirOutputType_mir_output_type_dvid: MirOutputType = 3;
pub const MirOutputType_mir_output_type_dvia: MirOutputType = 4;
pub const MirOutputType_mir_output_type_composite: MirOutputType = 5;
pub const MirOutputType_mir_output_type_svideo: MirOutputType = 6;
pub const MirOutputType_mir_output_type_lvds: MirOutputType = 7;
pub const MirOutputType_mir_output_type_component: MirOutputType = 8;
pub const MirOutputType_mir_output_type_ninepindin: MirOutputType = 9;
pub const MirOutputType_mir_output_type_displayport: MirOutputType = 10;
pub const MirOutputType_mir_output_type_hdmia: MirOutputType = 11;
pub const MirOutputType_mir_output_type_hdmib: MirOutputType = 12;
pub const MirOutputType_mir_output_type_tv: MirOutputType = 13;
pub const MirOutputType_mir_output_type_edp: MirOutputType = 14;
pub const MirOutputType_mir_output_type_virtual: MirOutputType = 15;
pub const MirOutputType_mir_output_type_dsi: MirOutputType = 16;
pub const MirOutputType_mir_output_type_dpi: MirOutputType = 17;
pub type MirOutputType = ::std::os::raw::c_uint;
pub const MirPromptSessionState_mir_prompt_session_state_stopped: MirPromptSessionState = 0;
pub const MirPromptSessionState_mir_prompt_session_state_started: MirPromptSessionState = 1;
pub const MirPromptSessionState_mir_prompt_session_state_suspended: MirPromptSessionState = 2;
pub type MirPromptSessionState = ::std::os::raw::c_uint;
pub const MirPixelFormat_mir_pixel_format_invalid: MirPixelFormat = 0;
pub const MirPixelFormat_mir_pixel_format_abgr_8888: MirPixelFormat = 1;
pub const MirPixelFormat_mir_pixel_format_xbgr_8888: MirPixelFormat = 2;
pub const MirPixelFormat_mir_pixel_format_argb_8888: MirPixelFormat = 3;
pub const MirPixelFormat_mir_pixel_format_xrgb_8888: MirPixelFormat = 4;
pub const MirPixelFormat_mir_pixel_format_bgr_888: MirPixelFormat = 5;
pub const MirPixelFormat_mir_pixel_format_rgb_888: MirPixelFormat = 6;
pub const MirPixelFormat_mir_pixel_format_rgb_565: MirPixelFormat = 7;
pub const MirPixelFormat_mir_pixel_format_rgba_5551: MirPixelFormat = 8;
pub const MirPixelFormat_mir_pixel_format_rgba_4444: MirPixelFormat = 9;
pub const MirPixelFormat_mir_pixel_formats: MirPixelFormat = 10;
#[doc = " 32-bit pixel formats (8888):\n The order of components in the enum matches the order of the components\n as they would be written in an integer representing a pixel value of that\n format. For example; abgr_8888 should be coded as 0xAABBGGRR, which will\n end up as R,G,B,A in memory on a little endian system, and as A,B,G,R on a\n big endian system.\n\n 24-bit pixel formats (888):\n These are in literal byte order, regardless of CPU architecture it's always\n the same. Writing these 3-byte pixels is typically slower than other formats\n but uses less memory than 32-bit and is endian-independent.\n\n 16-bit pixel formats (565/5551/4444):\n Always interpreted as one 16-bit integer per pixel with components in\n high-to-low bit order following the format name. These are the fastest\n formats, however colour quality is visibly lower."]
pub type MirPixelFormat = ::std::os::raw::c_uint;
pub const MirOrientation_mir_orientation_normal: MirOrientation = 0;
pub const MirOrientation_mir_orientation_left: MirOrientation = 90;
pub const MirOrientation_mir_orientation_inverted: MirOrientation = 180;
pub const MirOrientation_mir_orientation_right: MirOrientation = 270;
#[doc = " Describes transformations applied to both outputs and client surfaces.\n Rotations are counter-clockwise."]
pub type MirOrientation = ::std::os::raw::c_uint;
pub const MirMirrorMode_mir_mirror_mode_none: MirMirrorMode = 0;
pub const MirMirrorMode_mir_mirror_mode_vertical: MirMirrorMode = 1;
pub const MirMirrorMode_mir_mirror_mode_horizontal: MirMirrorMode = 2;
#[doc = " Describes a mirror transformation that is applied to client surfaces."]
pub type MirMirrorMode = ::std::os::raw::c_uint;
pub const MirOrientationMode_mir_orientation_mode_portrait: MirOrientationMode = 1;
pub const MirOrientationMode_mir_orientation_mode_landscape: MirOrientationMode = 2;
pub const MirOrientationMode_mir_orientation_mode_portrait_inverted: MirOrientationMode = 4;
pub const MirOrientationMode_mir_orientation_mode_landscape_inverted: MirOrientationMode = 8;
pub const MirOrientationMode_mir_orientation_mode_portrait_any: MirOrientationMode = 5;
pub const MirOrientationMode_mir_orientation_mode_landscape_any: MirOrientationMode = 10;
pub const MirOrientationMode_mir_orientation_mode_any: MirOrientationMode = 15;
pub type MirOrientationMode = ::std::os::raw::c_uint;
pub const MirEdgeAttachment_mir_edge_attachment_vertical: MirEdgeAttachment = 1;
pub const MirEdgeAttachment_mir_edge_attachment_horizontal: MirEdgeAttachment = 2;
pub const MirEdgeAttachment_mir_edge_attachment_any: MirEdgeAttachment = 3;
pub type MirEdgeAttachment = ::std::os::raw::c_uint;
#[doc = " the reference point is at the center."]
pub const MirPlacementGravity_mir_placement_gravity_center: MirPlacementGravity = 0;
#[doc = " the reference point is at the middle of the left edge."]
pub const MirPlacementGravity_mir_placement_gravity_west: MirPlacementGravity = 1;
#[doc = " the reference point is at the middle of the right edge."]
pub const MirPlacementGravity_mir_placement_gravity_east: MirPlacementGravity = 2;
#[doc = " the reference point is in the middle of the top edge."]
pub const MirPlacementGravity_mir_placement_gravity_north: MirPlacementGravity = 4;
#[doc = " the reference point is at the middle of the lower edge."]
pub const MirPlacementGravity_mir_placement_gravity_south: MirPlacementGravity = 8;
#[doc = " the reference point is at the top left corner."]
pub const MirPlacementGravity_mir_placement_gravity_northwest: MirPlacementGravity = 5;
#[doc = " the reference point is at the top right corner."]
pub const MirPlacementGravity_mir_placement_gravity_northeast: MirPlacementGravity = 6;
#[doc = " the reference point is at the lower left corner."]
pub const MirPlacementGravity_mir_placement_gravity_southwest: MirPlacementGravity = 9;
#[doc = " the reference point is at the lower right corner."]
pub const MirPlacementGravity_mir_placement_gravity_southeast: MirPlacementGravity = 10;
#[doc = " Reference point for aligning a surface relative to a rectangle.\n Each element (surface and rectangle) has a MirPlacementGravity assigned."]
pub type MirPlacementGravity = ::std::os::raw::c_uint;
#[doc = " allow flipping anchors horizontally"]
pub const MirPlacementHints_mir_placement_hints_flip_x: MirPlacementHints = 1;
#[doc = " allow flipping anchors vertically"]
pub const MirPlacementHints_mir_placement_hints_flip_y: MirPlacementHints = 2;
#[doc = " allow sliding window horizontally"]
pub const MirPlacementHints_mir_placement_hints_slide_x: MirPlacementHints = 4;
#[doc = " allow sliding window vertically"]
pub const MirPlacementHints_mir_placement_hints_slide_y: MirPlacementHints = 8;
#[doc = " allow resizing window horizontally"]
pub const MirPlacementHints_mir_placement_hints_resize_x: MirPlacementHints = 16;
#[doc = " allow resizing window vertically"]
pub const MirPlacementHints_mir_placement_hints_resize_y: MirPlacementHints = 32;
#[doc = " allow flipping aux_anchor to opposite corner"]
pub const MirPlacementHints_mir_placement_hints_antipodes: MirPlacementHints = 64;
#[doc = " allow flipping anchors on both axes"]
pub const MirPlacementHints_mir_placement_hints_flip_any: MirPlacementHints = 3;
#[doc = " allow sliding window on both axes"]
pub const MirPlacementHints_mir_placement_hints_slide_any: MirPlacementHints = 12;
#[doc = " allow resizing window on both axes"]
pub const MirPlacementHints_mir_placement_hints_resize_any: MirPlacementHints = 48;
#[doc = " Positioning hints for aligning a window relative to a rectangle.\n\n These hints determine how the window should be positioned in the case that\n the surface would fall off-screen if placed in its ideal position.\n\n For example, \\p mir_placement_hints_flip_x will invert the x component of\n \\p aux_rect_placement_offset and replace \\p mir_placement_gravity_northwest\n with \\p mir_placement_gravity_northeast and vice versa if the window extends\n beyond the left or right edges of the monitor.\n\n If \\p mir_placement_hints_slide_x is set, the window can be shifted\n horizontally to fit on-screen.\n\n If \\p mir_placement_hints_resize_x is set, the window can be shrunken\n horizontally to fit.\n\n If \\p mir_placement_hints_antipodes is set then the rect gravity may be\n substituted with the opposite corner (e.g. \\p mir_placement_gravity_northeast\n to \\p mir_placement_gravity_southwest) in combination with other options.\n\n When multiple flags are set, flipping should take precedence over sliding,\n which should take precedence over resizing."]
pub type MirPlacementHints = ::std::os::raw::c_uint;
pub const MirResizeEdge_mir_resize_edge_none: MirResizeEdge = 0;
pub const MirResizeEdge_mir_resize_edge_west: MirResizeEdge = 1;
pub const MirResizeEdge_mir_resize_edge_east: MirResizeEdge = 2;
pub const MirResizeEdge_mir_resize_edge_north: MirResizeEdge = 4;
pub const MirResizeEdge_mir_resize_edge_south: MirResizeEdge = 8;
pub const MirResizeEdge_mir_resize_edge_northwest: MirResizeEdge = 5;
pub const MirResizeEdge_mir_resize_edge_northeast: MirResizeEdge = 6;
pub const MirResizeEdge_mir_resize_edge_southwest: MirResizeEdge = 9;
pub const MirResizeEdge_mir_resize_edge_southeast: MirResizeEdge = 10;
#[doc = " Hints for resizing a window.\n\n These values are used to indicate which edge(s) of a surface\n is being dragged in a resize operation."]
pub type MirResizeEdge = ::std::os::raw::c_uint;
pub const MirFormFactor_mir_form_factor_unknown: MirFormFactor = 0;
pub const MirFormFactor_mir_form_factor_phone: MirFormFactor = 1;
pub const MirFormFactor_mir_form_factor_tablet: MirFormFactor = 2;
pub const MirFormFactor_mir_form_factor_monitor: MirFormFactor = 3;
pub const MirFormFactor_mir_form_factor_tv: MirFormFactor = 4;
pub const MirFormFactor_mir_form_factor_projector: MirFormFactor = 5;
#[doc = " Form factor associated with a physical output"]
pub type MirFormFactor = ::std::os::raw::c_uint;
#[doc = "< Arrangement of subpixels cannot be determined"]
pub const MirSubpixelArrangement_mir_subpixel_arrangement_unknown: MirSubpixelArrangement = 0;
#[doc = "< Subpixels are arranged horizontally, R, G, B from left to right"]
pub const MirSubpixelArrangement_mir_subpixel_arrangement_horizontal_rgb: MirSubpixelArrangement =
    1;
#[doc = "< Subpixels are arranged horizontally, B, G, R from left to right"]
pub const MirSubpixelArrangement_mir_subpixel_arrangement_horizontal_bgr: MirSubpixelArrangement =
    2;
#[doc = "< Subpixels are arranged vertically, R, G, B from top to bottom"]
pub const MirSubpixelArrangement_mir_subpixel_arrangement_vertical_rgb: MirSubpixelArrangement = 3;
#[doc = "< Subpixels are arranged vertically, B, G, R from top to bottom"]
pub const MirSubpixelArrangement_mir_subpixel_arrangement_vertical_bgr: MirSubpixelArrangement = 4;
#[doc = "< Device does not have regular subpixels"]
pub const MirSubpixelArrangement_mir_subpixel_arrangement_none: MirSubpixelArrangement = 5;
#[doc = " Physical arrangement of subpixels on the physical output\n\n This is always relative to the “natural” orientation of the display - mir_orientation_normal."]
pub type MirSubpixelArrangement = ::std::os::raw::c_uint;
pub const MirShellChrome_mir_shell_chrome_normal: MirShellChrome = 0;
pub const MirShellChrome_mir_shell_chrome_low: MirShellChrome = 1;
#[doc = " Shell chrome"]
pub type MirShellChrome = ::std::os::raw::c_uint;
pub const MirPointerConfinementState_mir_pointer_unconfined: MirPointerConfinementState = 0;
pub const MirPointerConfinementState_mir_pointer_confined_oneshot: MirPointerConfinementState = 1;
pub const MirPointerConfinementState_mir_pointer_confined_persistent: MirPointerConfinementState =
    2;
pub const MirPointerConfinementState_mir_pointer_locked_oneshot: MirPointerConfinementState = 3;
pub const MirPointerConfinementState_mir_pointer_locked_persistent: MirPointerConfinementState = 4;
#[doc = " Pointer Confinement"]
pub type MirPointerConfinementState = ::std::os::raw::c_uint;
pub const MirOutputGammaSupported_mir_output_gamma_unsupported: MirOutputGammaSupported = 0;
pub const MirOutputGammaSupported_mir_output_gamma_supported: MirOutputGammaSupported = 1;
#[doc = " Supports gamma correction"]
pub type MirOutputGammaSupported = ::std::os::raw::c_uint;
#[doc = "< For desktop backgrounds and alike (lowest layer)"]
pub const MirDepthLayer_mir_depth_layer_background: MirDepthLayer = 0;
#[doc = "< For panels or other controls/decorations below normal windows"]
pub const MirDepthLayer_mir_depth_layer_below: MirDepthLayer = 1;
#[doc = "< For normal application windows"]
pub const MirDepthLayer_mir_depth_layer_application: MirDepthLayer = 2;
#[doc = "< For always-on-top application windows"]
pub const MirDepthLayer_mir_depth_layer_always_on_top: MirDepthLayer = 3;
#[doc = "< For panels or notifications that want to be above normal windows"]
pub const MirDepthLayer_mir_depth_layer_above: MirDepthLayer = 4;
#[doc = "< For overlays such as lock screens (heighest layer)"]
pub const MirDepthLayer_mir_depth_layer_overlay: MirDepthLayer = 5;
#[doc = " Depth layer controls Z ordering of surfaces.\n\n A surface will always appear on top of surfaces with a lower depth layer, and below those with a higher one.\n A depth layer can be converted to a number with mir::mir_depth_layer_get_index().\n This is useful for creating a list indexed by depth layer, or comparing the height of two layers."]
pub type MirDepthLayer = ::std::os::raw::c_uint;
#[doc = "< The surface can gain and lose focus normally"]
pub const MirFocusMode_mir_focus_mode_focusable: MirFocusMode = 0;
#[doc = "< The surface will never be given focus"]
pub const MirFocusMode_mir_focus_mode_disabled: MirFocusMode = 1;
#[doc = "< This mode causes the surface to take focus if possible, and prevents focus from\nleaving it as long as it has this mode"]
pub const MirFocusMode_mir_focus_mode_grabbing: MirFocusMode = 2;
#[doc = " Focus mode controls how a surface gains and loses focus."]
pub type MirFocusMode = ::std::os::raw::c_uint;
pub const MirTiledEdge_mir_tiled_edge_none: MirTiledEdge = 0;
pub const MirTiledEdge_mir_tiled_edge_north: MirTiledEdge = 1;
pub const MirTiledEdge_mir_tiled_edge_east: MirTiledEdge = 2;
pub const MirTiledEdge_mir_tiled_edge_south: MirTiledEdge = 4;
pub const MirTiledEdge_mir_tiled_edge_west: MirTiledEdge = 8;
#[doc = " Hints describing which edges of a surface are considered adjacent\n to another part of the tiling grid."]
pub type MirTiledEdge = ::std::os::raw::c_uint;
#[doc = "< No filter applied"]
pub const MirOutputFilter_mir_output_filter_none: MirOutputFilter = 0;
#[doc = "< Colors are converted to grayscale"]
pub const MirOutputFilter_mir_output_filter_grayscale: MirOutputFilter = 1;
#[doc = "< Colors are inverted"]
pub const MirOutputFilter_mir_output_filter_invert: MirOutputFilter = 2;
#[doc = " Filters that can be applied to output."]
pub type MirOutputFilter = ::std::os::raw::c_uint;
#[doc = " A 2D point with integer coordinates."]
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct miracle_point_t {
    #[doc = " The x coordinate."]
    pub x: i32,
    #[doc = " The y coordinate."]
    pub y: i32,
}
#[doc = " A size with integer dimensions."]
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct miracle_size_t {
    #[doc = " The width."]
    pub w: i32,
    #[doc = " The height."]
    pub h: i32,
}
pub const miracle_animation_type_miracle_animation_type_window_open: miracle_animation_type = 0;
pub const miracle_animation_type_miracle_animation_type_window_close: miracle_animation_type = 1;
pub const miracle_animation_type_miracle_animation_type_window_move: miracle_animation_type = 2;
pub const miracle_animation_type_miracle_animation_type_workspace_switch: miracle_animation_type =
    3;
pub const miracle_animation_type_miracle_animation_type_window_none: miracle_animation_type = 4;
pub type miracle_animation_type = ::std::os::raw::c_uint;
#[doc = " Describes the properties of a window.\n\n Plugin authors may use this information to decide on the placement of a window.\n\n Use #miracle_plugin_get_application to get the application from which this window\n originated.\n\n Use #miracle_plugin_get_workspace to get the workspace of the window."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct miracle_window_info_t {
    #[doc = " The type of this window."]
    pub window_type: MirWindowType,
    #[doc = " The state of the window."]
    pub state: MirWindowState,
    #[doc = " The position of the window.\n\n If the window has not yet been placed, this will be arbitrary."]
    pub top_left: miracle_point_t,
    #[doc = " The size of the window."]
    pub size: miracle_size_t,
    #[doc = " The depth layer of the window."]
    pub depth_layer: MirDepthLayer,
    #[doc = " Pointer to internal data.\n\n Please do not use unless you plan to be very sneaky!"]
    pub internal: u64,
    #[doc = " The 4x4 transform matrix of the window (column-major).\n\n Defaults to the identity matrix."]
    pub transform: [f32; 16usize],
    #[doc = " The alpha (opacity) of the window.\n\n Defaults to 1.0 (fully opaque)."]
    pub alpha: f32,
}
impl Default for miracle_window_info_t {
    fn default() -> Self {
        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
        unsafe {
            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
            s.assume_init()
        }
    }
}
#[doc = " Describes a workspace."]
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct miracle_workspace_t {
    #[doc = " If `TRUE`, the workspace is valid.\n\n This may be `FALSE` for shell components that are not tethered to a particular\n workspace."]
    pub is_set: i32,
    #[doc = " If `TRUE`, #number is set."]
    pub has_number: i32,
    #[doc = " The number of the workspace.\n\n Only valid if #has_number is `TRUE`."]
    pub number: u32,
    #[doc = " If `TRUE`, #name is set."]
    pub has_name: i32,
    #[doc = " Pointer to internal data.\n\n Please do not use unless you plan to be very sneaky."]
    pub internal: u64,
    #[doc = " The position of the workspace area."]
    pub position: miracle_point_t,
    #[doc = " The size of the workspace area."]
    pub size: miracle_size_t,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct miracle_plugin_animation_frame_data_t {
    #[doc = " Animation type.\n\n This one of #miracle_animation_type."]
    pub type_: u32,
    #[doc = " The runtime of the animation frame in seconds."]
    pub runtime_seconds: f32,
    #[doc = " The origin area, packed with x, y, w, and h."]
    pub origin: [f32; 4usize],
    #[doc = " The destination area, packed with x, y, w, and h."]
    pub destination: [f32; 4usize],
    #[doc = " The opacity start of the animation."]
    pub opacity_start: f32,
    #[doc = " The opacity end of the animation."]
    pub opacity_end: f32,
    #[doc = " If `TRUE`, #window_info and #window_name are valid.\n\n Set for window events (open, close, move). Not set for workspace events."]
    pub has_window_info: i32,
    #[doc = " Info about the window being animated.\n\n Only valid when #has_window_info is `TRUE`. The `internal` field is the\n stable window ID, usable for host calls such as #miracle_window_set_state."]
    pub window_info: miracle_window_info_t,
    #[doc = " Null-terminated window title (up to 255 characters).\n\n Only valid when #has_window_info is `TRUE`."]
    pub window_name: [::std::os::raw::c_char; 256usize],
    #[doc = " If `TRUE`, #workspace and #workspace_name are valid."]
    pub has_workspace: i32,
    #[doc = " Info about the workspace of the animated object.\n\n Only valid when #has_workspace is `TRUE`. The `internal` field is the\n stable workspace ID, usable for host calls such as\n #miracle_plugin_get_workspace_tree."]
    pub workspace: miracle_workspace_t,
    #[doc = " Null-terminated workspace name (up to 255 characters).\n\n Only valid when #has_workspace is `TRUE` and the workspace has a name."]
    pub workspace_name: [::std::os::raw::c_char; 256usize],
}
impl Default for miracle_plugin_animation_frame_data_t {
    fn default() -> Self {
        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
        unsafe {
            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
            s.assume_init()
        }
    }
}
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct miracle_plugin_animation_frame_result_t {
    #[doc = " If set to `TRUE`, the animation is considered completed.\n\n At this point, the animated object will be moved to its destination\n with the appropriate opacity. The animation will be removed from the\n system."]
    pub completed: i32,
    #[doc = " If `TRUE`, #area is set."]
    pub has_area: i32,
    #[doc = " The area as a packed rectangle of x, y, width, and height.\n\n Be careful when using this value, as Mir will set this as the _actual_\n rectangle of the object. For example, if setting a window's rectangle,\n Mir will issue a position and resize request to the window. This is\n NOT something that you would want to do every frame. It is better to use\n the #transform if you want to animate the scale."]
    pub area: [f32; 4usize],
    #[doc = " If `TRUE`, #transform is set."]
    pub has_transform: i32,
    #[doc = " The transform to apply to the animated object.\n\n This transform is backed by a glm::mat4, which is a column-major transform."]
    pub transform: [f32; 16usize],
    #[doc = " If `TRUE`, #opacity is set."]
    pub has_opacity: i32,
    #[doc = " The opacity of the object.\n\n This must be [0, 1]."]
    pub opacity: f32,
    #[doc = " If `TRUE`, #clip_area is set.\n\n When set, #clip_area is used as the scissor rectangle to reveal the\n window's surface gradually, while #area carries the window's actual\n target geometry sent to the client via configure. This separation\n avoids blank space during resize animations: the client renders at\n the final size immediately, and the clip progressively reveals it."]
    pub has_clip_area: i32,
    #[doc = " The scissor-clip rectangle as a packed x, y, width, height."]
    pub clip_area: [f32; 4usize],
}
#[doc = " Describes the properties of an application.\n\n Plugin authors may use #miracle_plugin_get_application to get the application\n given a window."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct miracle_application_info_t {
    #[doc = " The name of the application."]
    pub application_name: *const ::std::os::raw::c_char,
    #[doc = " Internal data."]
    pub internal: u64,
}
impl Default for miracle_application_info_t {
    fn default() -> Self {
        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
        unsafe {
            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
            s.assume_init()
        }
    }
}
#[doc = " The container has a single window in it."]
pub const miracle_container_type_miracle_container_type_window: miracle_container_type = 0;
#[doc = " The container has multiple children in it."]
pub const miracle_container_type_miracle_container_type_parent: miracle_container_type = 1;
#[doc = " The type of the container."]
pub type miracle_container_type = ::std::os::raw::c_uint;
#[doc = " None layout."]
pub const miracle_layout_scheme_miracle_layout_scheme_none: miracle_layout_scheme = 0;
#[doc = " A horizontal layout."]
pub const miracle_layout_scheme_miracle_layout_scheme_horizontal: miracle_layout_scheme = 1;
#[doc = " A vertical layout."]
pub const miracle_layout_scheme_miracle_layout_scheme_vertical: miracle_layout_scheme = 2;
#[doc = " A tabbed layout."]
pub const miracle_layout_scheme_miracle_layout_scheme_tabbed: miracle_layout_scheme = 3;
#[doc = " A stacked layout."]
pub const miracle_layout_scheme_miracle_layout_scheme_stacking: miracle_layout_scheme = 4;
#[doc = " Describes a layout for a container."]
pub type miracle_layout_scheme = ::std::os::raw::c_uint;
#[doc = " Describes a container in a tree.\n\n A container may either a parent or a window. Parent containers\n have children, which can be retrieved via #miracle_plugin_get_child_from_container.\n\n The window of a window container can be retrieved via\n #miracle_plugin_get_window_info_from_container."]
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct miracle_container_t {
    #[doc = " The type of the container.\n\n This is a #miracle_container_type."]
    pub type_: u32,
    #[doc = " If `TRUE`, the container is floating within its workspace.\n\n This is only set if #type is #miracle_container_type_parent."]
    pub is_floating: i32,
    #[doc = " Describes how a container is laying out its content.\n\n This is #miracle_layut_scheme.\n\n This is only set if #type is #miracle_container_type_parent."]
    pub layout_scheme: u32,
    #[doc = " The number of child containers inside of this container.\n\n Use #miracle_plugin_get_child_from_container to query the container by index."]
    pub num_child_containers: u32,
    #[doc = " Pointer to internal data.\n\n Please do not use unless you plan to be very sneaky!"]
    pub internal: u64,
}
#[doc = " Describes an output."]
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct miracle_output_t {
    #[doc = " The position of the output."]
    pub position: miracle_point_t,
    #[doc = " The size of the output."]
    pub size: miracle_size_t,
    #[doc = " If `TRUE`, the output is the primary output, otherwise `FALSE`."]
    pub is_primary: i32,
    #[doc = " The number of workspaces on this output."]
    pub num_workspaces: u32,
    #[doc = " Pointer to internal data.\n\n Please do not use unless you plan to be very sneaky."]
    pub internal: u64,
}
#[doc = " If selected, the plugin lets miracle place the window according\n to its own strategy."]
pub const miracle_window_management_strategy_t_miracle_window_management_strategy_system:
    miracle_window_management_strategy_t = 0;
#[doc = " Describes a window that will be placed in the tiling grid."]
pub const miracle_window_management_strategy_t_miracle_window_management_strategy_tiled:
    miracle_window_management_strategy_t = 1;
#[doc = " Describes a window whose behavior is entirely determined by\n the plugin."]
pub const miracle_window_management_strategy_t_miracle_window_management_strategy_freestyle:
    miracle_window_management_strategy_t = 2;
#[doc = " Describes the placement strategy for a window.\n\n This is used by #miracle_placement_t."]
pub type miracle_window_management_strategy_t = ::std::os::raw::c_uint;
#[doc = " Describes a tiled placement which is controlled by the plugin system."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct miracle_tiled_placement_t {
    #[doc = " The ID of the parent container that this window should be placed inside.\n\n If the container has #miracle_container_t::type of #miracle_container_type_window, then\n the #layout_scheme will be applied to that window to form a new\n parent before placing the window at the #index.\n\n If the container has #miracle_container_t::type of #miracle_container_type_parent, then\n the #layout_scheme will be ignored and the window will be placed at\n the #index.\n\n If this is 0, then it is assumed to be null."]
    pub parent_internal: u64,
    #[doc = " The index at which this container will be placed within the parent."]
    pub index: u32,
    #[doc = " The requested layout scheme of the new parent.\n\n This will only be used if #miracle_container_type_parent has #miracle_container_t::type of #miracle_container_type_parent."]
    pub layout_scheme: miracle_layout_scheme,
}
impl Default for miracle_tiled_placement_t {
    fn default() -> Self {
        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
        unsafe {
            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
            s.assume_init()
        }
    }
}
#[doc = " Describes a freestyle placement which is fully controlled by the plugin."]
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct miracle_freestyle_placement_t {
    #[doc = " The top left position of the window."]
    pub top_left: miracle_point_t,
    #[doc = " The depth layer of the window.\n\n Plugin authors are encouraged to use #miracle_window_info_t::depth_layer\n unless they would like to force the window into a different depth for\n whatever reason."]
    pub depth_layer: u32,
    #[doc = " The workspace that this window should be placed on.\n\n If `0`, the window will always be shown.\n\n Defaults to the currently selected workspace."]
    pub workspace_internal: u64,
    #[doc = " The size of the window.\n\n This value may not be honored by the window itself."]
    pub size: miracle_size_t,
    #[doc = " The 4x4 transform matrix applied to the window (column-major).\n\n Defaults to the identity matrix."]
    pub transform: [f32; 16usize],
    #[doc = " The alpha (opacity) of the window.\n\n Defaults to 1.0 (fully opaque)."]
    pub alpha: f32,
    #[doc = " Whether the window can be resized.\n\n Defaults to `TRUE`."]
    pub resizable: i32,
    #[doc = " Whether the window can be moved.\n\n Defaults to `TRUE`."]
    pub movable: i32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct miracle_placement_t {
    #[doc = " The placement strategy for this window.\n\n This is miracle_window_management_strategy_t.\n\n Defaults to the #miracle_window_management_strategy_system."]
    pub strategy: u32,
    #[doc = " The freestyle placement strategy.\n\n This is only honored if #strategy is #miracle_window_management_strategy_freestyle."]
    pub freestyle_placement: miracle_freestyle_placement_t,
    #[doc = " The titled placement strategy.\n\n This is only honored if #strategy is #miracle_window_management_strategy_tiled."]
    pub tiled_placement: miracle_tiled_placement_t,
}
impl Default for miracle_placement_t {
    fn default() -> Self {
        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
        unsafe {
            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
            s.assume_init()
        }
    }
}
#[doc = " Describes a keyboard event."]
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct miracle_keyboard_event_t {
    #[doc = " The keyboard action."]
    pub action: u32,
    #[doc = " The keysym."]
    pub keysym: u32,
    #[doc = " The raw scan code."]
    pub scan_code: i32,
    #[doc = " The modifiers held during the event."]
    pub modifiers: u32,
}
#[doc = " Describes a pointer event."]
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct miracle_pointer_event_t {
    #[doc = " The x position of the pointer."]
    pub x: f32,
    #[doc = " The y position of the pointer."]
    pub y: f32,
    #[doc = " The pointer action.\n\n This is one of the MirPointerAction values."]
    pub action: u32,
    #[doc = " The modifiers held during the event."]
    pub modifiers: u32,
    #[doc = " The buttons held during the event."]
    pub buttons: u32,
}
#[doc = " A single shader-pass descriptor used with #miracle_register_window_sample_to_rgba."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct miracle_shader_pass_t {
    #[doc = " Pointer to the GLSL source bytes for this pass."]
    pub glsl: *const ::std::os::raw::c_char,
    #[doc = " Byte length of the GLSL source."]
    pub len: i32,
}
impl Default for miracle_shader_pass_t {
    fn default() -> Self {
        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
        unsafe {
            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
            s.assume_init()
        }
    }
}
pub const MirEventType_mir_event_type_key: MirEventType = 0;
pub const MirEventType_mir_event_type_motion: MirEventType = 1;
pub const MirEventType_mir_event_type_window: MirEventType = 2;
pub const MirEventType_mir_event_type_resize: MirEventType = 3;
pub const MirEventType_mir_event_type_prompt_session_state_change: MirEventType = 4;
pub const MirEventType_mir_event_type_orientation: MirEventType = 5;
pub const MirEventType_mir_event_type_close_window: MirEventType = 6;
pub const MirEventType_mir_event_type_input: MirEventType = 7;
pub const MirEventType_mir_event_type_input_configuration: MirEventType = 8;
pub const MirEventType_mir_event_type_window_output: MirEventType = 9;
pub const MirEventType_mir_event_type_input_device_state: MirEventType = 10;
pub const MirEventType_mir_event_type_window_placement: MirEventType = 11;
pub type MirEventType = ::std::os::raw::c_uint;
pub const MirInputEventType_mir_input_event_type_key: MirInputEventType = 0;
pub const MirInputEventType_mir_input_event_type_touch: MirInputEventType = 1;
pub const MirInputEventType_mir_input_event_type_pointer: MirInputEventType = 2;
pub const MirInputEventType_mir_input_event_type_keyboard_resync: MirInputEventType = 3;
pub const MirInputEventType_mir_input_event_types: MirInputEventType = 4;
pub type MirInputEventType = ::std::os::raw::c_uint;
pub const MirInputEventModifier_mir_input_event_modifier_none: MirInputEventModifier = 1;
pub const MirInputEventModifier_mir_input_event_modifier_alt: MirInputEventModifier = 2;
pub const MirInputEventModifier_mir_input_event_modifier_alt_left: MirInputEventModifier = 4;
pub const MirInputEventModifier_mir_input_event_modifier_alt_right: MirInputEventModifier = 8;
pub const MirInputEventModifier_mir_input_event_modifier_shift: MirInputEventModifier = 16;
pub const MirInputEventModifier_mir_input_event_modifier_shift_left: MirInputEventModifier = 32;
pub const MirInputEventModifier_mir_input_event_modifier_shift_right: MirInputEventModifier = 64;
pub const MirInputEventModifier_mir_input_event_modifier_sym: MirInputEventModifier = 128;
pub const MirInputEventModifier_mir_input_event_modifier_function: MirInputEventModifier = 256;
pub const MirInputEventModifier_mir_input_event_modifier_ctrl: MirInputEventModifier = 512;
pub const MirInputEventModifier_mir_input_event_modifier_ctrl_left: MirInputEventModifier = 1024;
pub const MirInputEventModifier_mir_input_event_modifier_ctrl_right: MirInputEventModifier = 2048;
pub const MirInputEventModifier_mir_input_event_modifier_meta: MirInputEventModifier = 4096;
pub const MirInputEventModifier_mir_input_event_modifier_meta_left: MirInputEventModifier = 8192;
pub const MirInputEventModifier_mir_input_event_modifier_meta_right: MirInputEventModifier = 16384;
pub const MirInputEventModifier_mir_input_event_modifier_caps_lock: MirInputEventModifier = 32768;
pub const MirInputEventModifier_mir_input_event_modifier_num_lock: MirInputEventModifier = 65536;
pub const MirInputEventModifier_mir_input_event_modifier_scroll_lock: MirInputEventModifier =
    131072;
#[doc = " Description of key modifier state."]
pub type MirInputEventModifier = ::std::os::raw::c_uint;
pub type MirInputEventModifiers = ::std::os::raw::c_uint;
pub const MirKeyboardAction_mir_keyboard_action_up: MirKeyboardAction = 0;
pub const MirKeyboardAction_mir_keyboard_action_down: MirKeyboardAction = 1;
pub const MirKeyboardAction_mir_keyboard_action_repeat: MirKeyboardAction = 2;
pub const MirKeyboardAction_mir_keyboard_action_modifiers: MirKeyboardAction = 3;
pub const MirKeyboardAction_mir_keyboard_actions: MirKeyboardAction = 4;
#[doc = " Possible actions for changing key state"]
pub type MirKeyboardAction = ::std::os::raw::c_uint;
pub const MirTouchAction_mir_touch_action_up: MirTouchAction = 0;
pub const MirTouchAction_mir_touch_action_down: MirTouchAction = 1;
pub const MirTouchAction_mir_touch_action_change: MirTouchAction = 2;
pub const MirTouchAction_mir_touch_actions: MirTouchAction = 3;
#[doc = " Possible per touch actions for state changing"]
pub type MirTouchAction = ::std::os::raw::c_uint;
pub const MirTouchAxis_mir_touch_axis_x: MirTouchAxis = 0;
pub const MirTouchAxis_mir_touch_axis_y: MirTouchAxis = 1;
pub const MirTouchAxis_mir_touch_axis_pressure: MirTouchAxis = 2;
pub const MirTouchAxis_mir_touch_axis_touch_major: MirTouchAxis = 3;
pub const MirTouchAxis_mir_touch_axis_touch_minor: MirTouchAxis = 4;
pub const MirTouchAxis_mir_touch_axis_size: MirTouchAxis = 5;
pub const MirTouchAxis_mir_touch_axes: MirTouchAxis = 6;
#[doc = " Identifiers for touch axis"]
pub type MirTouchAxis = ::std::os::raw::c_uint;
pub const MirTouchTooltype_mir_touch_tooltype_unknown: MirTouchTooltype = 0;
pub const MirTouchTooltype_mir_touch_tooltype_finger: MirTouchTooltype = 1;
pub const MirTouchTooltype_mir_touch_tooltype_stylus: MirTouchTooltype = 2;
pub const MirTouchTooltype_mir_touch_tooltypes: MirTouchTooltype = 3;
#[doc = " Identifiers for per-touch tool types"]
pub type MirTouchTooltype = ::std::os::raw::c_uint;
pub const MirPointerAction_mir_pointer_action_button_up: MirPointerAction = 0;
pub const MirPointerAction_mir_pointer_action_button_down: MirPointerAction = 1;
pub const MirPointerAction_mir_pointer_action_enter: MirPointerAction = 2;
pub const MirPointerAction_mir_pointer_action_leave: MirPointerAction = 3;
pub const MirPointerAction_mir_pointer_action_motion: MirPointerAction = 4;
pub const MirPointerAction_mir_pointer_actions: MirPointerAction = 5;
#[doc = " Possible pointer actions"]
pub type MirPointerAction = ::std::os::raw::c_uint;
pub const MirPointerAxis_mir_pointer_axis_x: MirPointerAxis = 0;
pub const MirPointerAxis_mir_pointer_axis_y: MirPointerAxis = 1;
pub const MirPointerAxis_mir_pointer_axis_vscroll: MirPointerAxis = 2;
pub const MirPointerAxis_mir_pointer_axis_hscroll: MirPointerAxis = 3;
pub const MirPointerAxis_mir_pointer_axis_relative_x: MirPointerAxis = 4;
pub const MirPointerAxis_mir_pointer_axis_relative_y: MirPointerAxis = 5;
pub const MirPointerAxis_mir_pointer_axis_vscroll_discrete: MirPointerAxis = 6;
pub const MirPointerAxis_mir_pointer_axis_hscroll_discrete: MirPointerAxis = 7;
pub const MirPointerAxis_mir_pointer_axis_vscroll_value120: MirPointerAxis = 8;
pub const MirPointerAxis_mir_pointer_axis_hscroll_value120: MirPointerAxis = 9;
pub const MirPointerAxis_mir_pointer_axes: MirPointerAxis = 10;
#[doc = " Identifiers for pointer axis"]
pub type MirPointerAxis = ::std::os::raw::c_uint;
pub const MirPointerButton_mir_pointer_button_primary: MirPointerButton = 1;
pub const MirPointerButton_mir_pointer_button_secondary: MirPointerButton = 2;
pub const MirPointerButton_mir_pointer_button_tertiary: MirPointerButton = 4;
pub const MirPointerButton_mir_pointer_button_back: MirPointerButton = 8;
pub const MirPointerButton_mir_pointer_button_forward: MirPointerButton = 16;
pub const MirPointerButton_mir_pointer_button_side: MirPointerButton = 32;
pub const MirPointerButton_mir_pointer_button_extra: MirPointerButton = 64;
pub const MirPointerButton_mir_pointer_button_task: MirPointerButton = 128;
pub type MirPointerButton = ::std::os::raw::c_uint;
pub type MirPointerButtons = ::std::os::raw::c_uint;
pub const MirPointerAxisSource_mir_pointer_axis_source_none: MirPointerAxisSource = 0;
pub const MirPointerAxisSource_mir_pointer_axis_source_wheel: MirPointerAxisSource = 1;
pub const MirPointerAxisSource_mir_pointer_axis_source_finger: MirPointerAxisSource = 2;
pub const MirPointerAxisSource_mir_pointer_axis_source_continuous: MirPointerAxisSource = 3;
pub const MirPointerAxisSource_mir_pointer_axis_source_wheel_tilt: MirPointerAxisSource = 4;
#[doc = " Identifiers for pointer event source"]
pub type MirPointerAxisSource = ::std::os::raw::c_uint;
