diff options
Diffstat (limited to 'libmate-desktop/libmateui/mate-rr.h')
-rw-r--r-- | libmate-desktop/libmateui/mate-rr.h | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/libmate-desktop/libmateui/mate-rr.h b/libmate-desktop/libmateui/mate-rr.h new file mode 100644 index 0000000..ab780e0 --- /dev/null +++ b/libmate-desktop/libmateui/mate-rr.h @@ -0,0 +1,177 @@ +/* randrwrap.h + * + * Copyright 2007, 2008, Red Hat, Inc. + * + * This file is part of the Mate Library. + * + * The Mate Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Mate Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Mate Library; see the file COPYING.LIB. If not, + * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Soren Sandmann <[email protected]> + */ +#ifndef RANDR_WRAP_H +#define RANDR_WRAP_H + +#ifndef MATE_DESKTOP_USE_UNSTABLE_API +#error MateRR is unstable API. You must define MATE_DESKTOP_USE_UNSTABLE_API before including materr.h +#endif + +#include <glib.h> +#include <gdk/gdk.h> + +typedef struct MateRRScreen MateRRScreen; +typedef struct MateRROutput MateRROutput; +typedef struct MateRRCrtc MateRRCrtc; +typedef struct MateRRMode MateRRMode; + +typedef void (* MateRRScreenChanged) (MateRRScreen *screen, gpointer data); + +typedef enum +{ + MATE_RR_ROTATION_0 = (1 << 0), + MATE_RR_ROTATION_90 = (1 << 1), + MATE_RR_ROTATION_180 = (1 << 2), + MATE_RR_ROTATION_270 = (1 << 3), + MATE_RR_REFLECT_X = (1 << 4), + MATE_RR_REFLECT_Y = (1 << 5) +} MateRRRotation; + +/* Error codes */ + +#define MATE_RR_ERROR (mate_rr_error_quark ()) + +GQuark mate_rr_error_quark (void); + +typedef enum { + MATE_RR_ERROR_UNKNOWN, /* generic "fail" */ + MATE_RR_ERROR_NO_RANDR_EXTENSION, /* RANDR extension is not present */ + MATE_RR_ERROR_RANDR_ERROR, /* generic/undescribed error from the underlying XRR API */ + MATE_RR_ERROR_BOUNDS_ERROR, /* requested bounds of a CRTC are outside the maximum size */ + MATE_RR_ERROR_CRTC_ASSIGNMENT, /* could not assign CRTCs to outputs */ + MATE_RR_ERROR_NO_MATCHING_CONFIG, /* none of the saved configurations matched the current configuration */ +} MateRRError; + +#define MATE_RR_CONNECTOR_TYPE_PANEL "Panel" /* This is a laptop's built-in LCD */ + +/* MateRRScreen */ +MateRRScreen * mate_rr_screen_new (GdkScreen *screen, + MateRRScreenChanged callback, + gpointer data, + GError **error); +void mate_rr_screen_destroy (MateRRScreen *screen); +MateRROutput **mate_rr_screen_list_outputs (MateRRScreen *screen); +MateRRCrtc ** mate_rr_screen_list_crtcs (MateRRScreen *screen); +MateRRMode ** mate_rr_screen_list_modes (MateRRScreen *screen); +MateRRMode ** mate_rr_screen_list_clone_modes (MateRRScreen *screen); +void mate_rr_screen_set_size (MateRRScreen *screen, + int width, + int height, + int mm_width, + int mm_height); +MateRRCrtc * mate_rr_screen_get_crtc_by_id (MateRRScreen *screen, + guint32 id); +gboolean mate_rr_screen_refresh (MateRRScreen *screen, + GError **error); +MateRROutput * mate_rr_screen_get_output_by_id (MateRRScreen *screen, + guint32 id); +MateRROutput * mate_rr_screen_get_output_by_name (MateRRScreen *screen, + const char *name); +void mate_rr_screen_get_ranges (MateRRScreen *screen, + int *min_width, + int *max_width, + int *min_height, + int *max_height); +void mate_rr_screen_get_timestamps (MateRRScreen *screen, + guint32 *change_timestamp_ret, + guint32 *config_timestamp_ret); + +void mate_rr_screen_set_primary_output (MateRRScreen *screen, + MateRROutput *output); + +/* MateRROutput */ +guint32 mate_rr_output_get_id (MateRROutput *output); +const char * mate_rr_output_get_name (MateRROutput *output); +gboolean mate_rr_output_is_connected (MateRROutput *output); +int mate_rr_output_get_size_inches (MateRROutput *output); +int mate_rr_output_get_width_mm (MateRROutput *outout); +int mate_rr_output_get_height_mm (MateRROutput *output); +const guint8 * mate_rr_output_get_edid_data (MateRROutput *output); +MateRRCrtc ** mate_rr_output_get_possible_crtcs (MateRROutput *output); +MateRRMode * mate_rr_output_get_current_mode (MateRROutput *output); +MateRRCrtc * mate_rr_output_get_crtc (MateRROutput *output); +const char * mate_rr_output_get_connector_type (MateRROutput *output); +gboolean mate_rr_output_is_laptop (MateRROutput *output); +void mate_rr_output_get_position (MateRROutput *output, + int *x, + int *y); +gboolean mate_rr_output_can_clone (MateRROutput *output, + MateRROutput *clone); +MateRRMode ** mate_rr_output_list_modes (MateRROutput *output); +MateRRMode * mate_rr_output_get_preferred_mode (MateRROutput *output); +gboolean mate_rr_output_supports_mode (MateRROutput *output, + MateRRMode *mode); +gboolean mate_rr_output_get_is_primary (MateRROutput *output); + +/* MateRRMode */ +guint32 mate_rr_mode_get_id (MateRRMode *mode); +guint mate_rr_mode_get_width (MateRRMode *mode); +guint mate_rr_mode_get_height (MateRRMode *mode); +int mate_rr_mode_get_freq (MateRRMode *mode); + +/* MateRRCrtc */ +guint32 mate_rr_crtc_get_id (MateRRCrtc *crtc); + +#ifndef MATE_DISABLE_DEPRECATED +gboolean mate_rr_crtc_set_config (MateRRCrtc *crtc, + int x, + int y, + MateRRMode *mode, + MateRRRotation rotation, + MateRROutput **outputs, + int n_outputs, + GError **error); +#endif + +gboolean mate_rr_crtc_set_config_with_time (MateRRCrtc *crtc, + guint32 timestamp, + int x, + int y, + MateRRMode *mode, + MateRRRotation rotation, + MateRROutput **outputs, + int n_outputs, + GError **error); +gboolean mate_rr_crtc_can_drive_output (MateRRCrtc *crtc, + MateRROutput *output); +MateRRMode * mate_rr_crtc_get_current_mode (MateRRCrtc *crtc); +void mate_rr_crtc_get_position (MateRRCrtc *crtc, + int *x, + int *y); +MateRRRotation mate_rr_crtc_get_current_rotation (MateRRCrtc *crtc); +MateRRRotation mate_rr_crtc_get_rotations (MateRRCrtc *crtc); +gboolean mate_rr_crtc_supports_rotation (MateRRCrtc *crtc, + MateRRRotation rotation); + +gboolean mate_rr_crtc_get_gamma (MateRRCrtc *crtc, + int *size, + unsigned short **red, + unsigned short **green, + unsigned short **blue); +void mate_rr_crtc_set_gamma (MateRRCrtc *crtc, + int size, + unsigned short *red, + unsigned short *green, + unsigned short *blue); +#endif |