Program Listing for File common.h

↰ Return to documentation for file (/home/docs/checkouts/readthedocs.org/user_builds/canonical-mir-documentation/checkouts/2.30/include/core/mir_toolkit/common.h)

/*
 * Simple definitions common to client and server.
 *
 * Copyright © Canonical Ltd.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 2 or 3 as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef MIR_COMMON_H_
#define MIR_COMMON_H_

enum MirWindowAttrib
{
    /* Do not specify values...code relies on 0...N ordering. */
    mir_window_attrib_type,
    mir_window_attrib_state,
    mir_window_attrib_focus = mir_window_attrib_state + 2,
    mir_window_attrib_dpi,
    mir_window_attrib_visibility,
    mir_window_attrib_preferred_orientation,
    /* Must be last */
    mir_window_attribs
};

enum MirWindowType
{
    mir_window_type_normal,
    mir_window_type_utility,
    mir_window_type_dialog,
    mir_window_type_gloss,
    mir_window_type_freestyle,
    mir_window_type_menu,
    mir_window_type_inputmethod,
    mir_window_type_satellite,
    mir_window_type_tip,
    mir_window_type_decoration,
    mir_window_types
};

enum MirWindowState
{
    mir_window_state_unknown,
    mir_window_state_restored,
    mir_window_state_minimized,
    mir_window_state_maximized,
    mir_window_state_vertmaximized,
    /* mir_window_state_semimaximized,
       Omitted for now, since it's functionally a subset of vertmaximized and
       differs only in the X coordinate. */
    mir_window_state_fullscreen,
    mir_window_state_horizmaximized,
    mir_window_state_hidden,
    mir_window_state_attached,
    mir_window_states
};

enum MirWindowFocusState
{
    mir_window_focus_state_unfocused = 0,
    mir_window_focus_state_focused,
    mir_window_focus_state_active
};

enum MirWindowVisibility
{
    mir_window_visibility_occluded = 0,
    mir_window_visibility_exposed
};

enum MirLifecycleState
{
    mir_lifecycle_state_will_suspend,
    mir_lifecycle_state_resumed,
    mir_lifecycle_connection_lost
};

enum MirPowerMode
{
    mir_power_mode_on,      /* Display in use. */
    mir_power_mode_standby, /* Blanked, low power. */
    mir_power_mode_suspend, /* Blanked, lowest power. */
    mir_power_mode_off      /* Powered down. */
};

enum MirOutputType
{
    mir_output_type_unknown = 0,      /* DRM_MODE_CONNECTOR_Unknown     */
    mir_output_type_vga = 1,          /* DRM_MODE_CONNECTOR_VGA         */
    mir_output_type_dvii = 2,         /* DRM_MODE_CONNECTOR_DVII        */
    mir_output_type_dvid = 3,         /* DRM_MODE_CONNECTOR_DVID        */
    mir_output_type_dvia = 4,         /* DRM_MODE_CONNECTOR_DVIA        */
    mir_output_type_composite = 5,    /* DRM_MODE_CONNECTOR_Composite   */
    mir_output_type_svideo = 6,       /* DRM_MODE_CONNECTOR_SVIDEO      */
    mir_output_type_lvds = 7,         /* DRM_MODE_CONNECTOR_LVDS        */
    mir_output_type_component = 8,    /* DRM_MODE_CONNECTOR_Component   */
    mir_output_type_ninepindin = 9,   /* DRM_MODE_CONNECTOR_9PinDIN     */
    mir_output_type_displayport = 10, /* DRM_MODE_CONNECTOR_DisplayPort */
    mir_output_type_hdmia = 11,       /* DRM_MODE_CONNECTOR_HDMIA       */
    mir_output_type_hdmib = 12,       /* DRM_MODE_CONNECTOR_HDMIB       */
    mir_output_type_tv = 13,          /* DRM_MODE_CONNECTOR_TV          */
    mir_output_type_edp = 14,         /* DRM_MODE_CONNECTOR_eDP         */
    mir_output_type_virtual = 15,     /* DRM_MODE_CONNECTOR_VIRTUAL     */
    mir_output_type_dsi = 16,         /* DRM_MODE_CONNECTOR_DSI         */
    mir_output_type_dpi = 17,         /* DRM_MODE_CONNECTOR_DPI         */
};

enum MirPixelFormat
{
    mir_pixel_format_invalid = 0,
    mir_pixel_format_abgr_8888 = 1,
    mir_pixel_format_xbgr_8888 = 2,
    mir_pixel_format_argb_8888 = 3,
    mir_pixel_format_xrgb_8888 = 4,
    mir_pixel_format_bgr_888 = 5,
    mir_pixel_format_rgb_888 = 6,
    mir_pixel_format_rgb_565 = 7,
    mir_pixel_format_rgba_5551 = 8,
    mir_pixel_format_rgba_4444 = 9,
    /*
     * TODO: Big endian support would require additional formats in order to
     *       composite software surfaces using OpenGL (GL_RGBA/GL_BGRA_EXT):
     *         mir_pixel_format_rgb[ax]_8888
     *         mir_pixel_format_bgr[ax]_8888
     */
    mir_pixel_formats /* Note: This is always max format + 1 */
};

/* This could be improved... https://bugs.launchpad.net/mir/+bug/1236254 */
#define MIR_BYTES_PER_PIXEL(f)                                                                                         \
    ((f) == mir_pixel_format_bgr_888   ? 3 :                                                                           \
     (f) == mir_pixel_format_rgb_888   ? 3 :                                                                           \
     (f) == mir_pixel_format_rgb_565   ? 2 :                                                                           \
     (f) == mir_pixel_format_rgba_5551 ? 2 :                                                                           \
     (f) == mir_pixel_format_rgba_4444 ? 2 :                                                                           \
                                         4)

enum MirOrientation
{
    mir_orientation_normal = 0,
    mir_orientation_left = 90,
    mir_orientation_inverted = 180,
    mir_orientation_right = 270
};

enum MirMirrorMode
{
    mir_mirror_mode_none,
    mir_mirror_mode_vertical,
    mir_mirror_mode_horizontal
};

enum MirOrientationMode
{
    mir_orientation_mode_portrait = 1 << 0,
    mir_orientation_mode_landscape = 1 << 1,
    mir_orientation_mode_portrait_inverted = 1 << 2,
    mir_orientation_mode_landscape_inverted = 1 << 3,
    mir_orientation_mode_portrait_any = mir_orientation_mode_portrait | mir_orientation_mode_portrait_inverted,
    mir_orientation_mode_landscape_any = mir_orientation_mode_landscape | mir_orientation_mode_landscape_inverted,
    mir_orientation_mode_any = mir_orientation_mode_portrait_any | mir_orientation_mode_landscape_any
};

enum MirEdgeAttachment
{
    mir_edge_attachment_vertical = 1 << 0,
    mir_edge_attachment_horizontal = 1 << 1,
    mir_edge_attachment_any = mir_edge_attachment_vertical | mir_edge_attachment_horizontal
};

// Inspired by GdkGravity
enum MirPlacementGravity
{
    mir_placement_gravity_center = 0,

    mir_placement_gravity_west = 1 << 0,

    mir_placement_gravity_east = 1 << 1,

    mir_placement_gravity_north = 1 << 2,

    mir_placement_gravity_south = 1 << 3,

    mir_placement_gravity_northwest = mir_placement_gravity_north | mir_placement_gravity_west,

    mir_placement_gravity_northeast = mir_placement_gravity_north | mir_placement_gravity_east,

    mir_placement_gravity_southwest = mir_placement_gravity_south | mir_placement_gravity_west,

    mir_placement_gravity_southeast = mir_placement_gravity_south | mir_placement_gravity_east
};

// Inspired by GdkAnchorHints
enum MirPlacementHints
{
    mir_placement_hints_flip_x = 1 << 0,

    mir_placement_hints_flip_y = 1 << 1,

    mir_placement_hints_slide_x = 1 << 2,

    mir_placement_hints_slide_y = 1 << 3,

    mir_placement_hints_resize_x = 1 << 4,

    mir_placement_hints_resize_y = 1 << 5,

    mir_placement_hints_antipodes [[deprecated("UNUSED since Mir 2.0")]] = 1 << 6,

    mir_placement_hints_flip_any = mir_placement_hints_flip_x | mir_placement_hints_flip_y,

    mir_placement_hints_slide_any = mir_placement_hints_slide_x | mir_placement_hints_slide_y,

    mir_placement_hints_resize_any = mir_placement_hints_resize_x | mir_placement_hints_resize_y,
};

enum MirResizeEdge
{
    mir_resize_edge_none = 0,
    mir_resize_edge_west = 1 << 0,
    mir_resize_edge_east = 1 << 1,
    mir_resize_edge_north = 1 << 2,
    mir_resize_edge_south = 1 << 3,
    mir_resize_edge_northwest = mir_resize_edge_north | mir_resize_edge_west,
    mir_resize_edge_northeast = mir_resize_edge_north | mir_resize_edge_east,
    mir_resize_edge_southwest = mir_resize_edge_south | mir_resize_edge_west,
    mir_resize_edge_southeast = mir_resize_edge_south | mir_resize_edge_east
};

enum MirFormFactor
{
    mir_form_factor_unknown,
    mir_form_factor_phone,
    mir_form_factor_tablet,
    mir_form_factor_monitor,
    mir_form_factor_tv,
    mir_form_factor_projector,
};

enum MirSubpixelArrangement
{
    mir_subpixel_arrangement_unknown,
    mir_subpixel_arrangement_horizontal_rgb,
    mir_subpixel_arrangement_horizontal_bgr,
    mir_subpixel_arrangement_vertical_rgb,
    mir_subpixel_arrangement_vertical_bgr,
    mir_subpixel_arrangement_none
};

enum MirShellChrome
{
    mir_shell_chrome_normal,
    mir_shell_chrome_low,
};

enum MirPointerConfinementState
{
    mir_pointer_unconfined,
    mir_pointer_confined_oneshot,
    mir_pointer_confined_persistent,
    mir_pointer_locked_oneshot,
    mir_pointer_locked_persistent,
};

enum MirOutputGammaSupported
{
    mir_output_gamma_unsupported,
    mir_output_gamma_supported
};

enum MirDepthLayer
{
    mir_depth_layer_background,
    mir_depth_layer_below,
    mir_depth_layer_application,
    mir_depth_layer_always_on_top,
    mir_depth_layer_above,
    mir_depth_layer_overlay,
};

enum MirFocusMode
{
    mir_focus_mode_focusable,
    mir_focus_mode_disabled,
    mir_focus_mode_grabbing,
};

enum MirTiledEdge
{
    mir_tiled_edge_none = 0,
    mir_tiled_edge_north = 1 << 0,
    mir_tiled_edge_east = 1 << 1,
    mir_tiled_edge_south = 1 << 2,
    mir_tiled_edge_west = 1 << 3
};

enum MirOutputFilter
{
    mir_output_filter_none,
    mir_output_filter_grayscale,
    mir_output_filter_invert,
};

#endif