enlightenment/src/bin/e_randr.h

193 lines
5.4 KiB
C

#ifdef E_TYPEDEFS
typedef struct _E_Randr_Crtc_Info E_Randr_Crtc_Info;
typedef struct _E_Randr_Edid_Hash E_Randr_Edid_Hash;
typedef struct _E_Randr_Output_Info E_Randr_Output_Info;
typedef struct _E_Randr_Screen_Info_11 E_Randr_Screen_Info_11;
typedef struct _E_Randr_Screen_Info_12 E_Randr_Screen_Info_12;
typedef union _E_Randr_Screen_RRVD_Info E_Randr_Screen_RRVD_Info;
typedef struct _E_Randr_Screen_Info E_Randr_Screen_Info;
typedef struct _E_Randr_Serialized_Output_Policy E_Randr_Serialized_Output_Policy;
typedef struct _E_Randr_Serialized_Output E_Randr_Serialized_Output;
typedef struct _E_Randr_Serialized_Crtc E_Randr_Serialized_Crtc;
typedef struct _E_Randr_Serialized_Setup_11 E_Randr_Serialized_Setup_11;
typedef struct _E_Randr_Serialized_Setup_12 E_Randr_Serialized_Setup_12;
typedef struct _E_Randr_Serialized_Setup E_Randr_Serialized_Setup;
typedef enum _E_Randr_Configuration_Store_Modifier
{
E_RANDR_CONFIGURATION_STORE_POLICIES = (1 << 0),
E_RANDR_CONFIGURATION_STORE_RESOLUTIONS = (1 << 1),
E_RANDR_CONFIGURATION_STORE_ARRANGEMENT = (1 << 2),
E_RANDR_CONFIGURATION_STORE_ORIENTATIONS = (1 << 3),
E_RANDR_CONFIGURATION_STORE_ALL = (
E_RANDR_CONFIGURATION_STORE_POLICIES
| E_RANDR_CONFIGURATION_STORE_RESOLUTIONS
| E_RANDR_CONFIGURATION_STORE_ARRANGEMENT
| E_RANDR_CONFIGURATION_STORE_ORIENTATIONS)
} E_Randr_Configuration_Store_Modifier;
EAPI void e_randr_store_configuration(E_Randr_Screen_Info *screen_info, E_Randr_Configuration_Store_Modifier modifier);
EAPI Eina_Bool e_randr_try_restore_configuration(E_Randr_Screen_Info *screen_info);
#else
#ifndef E_RANDR_H
#define E_RANDR_H
struct _E_Randr_Crtc_Info
{
Ecore_X_ID xid;
Eina_Rectangle geometry;
Eina_Rectangle panning;
Eina_Rectangle tracking;
Eina_Rectangle border;
Ecore_X_Randr_Orientation current_orientation;
Ecore_X_Randr_Orientation orientations;
Ecore_X_Randr_Crtc_Gamma **gamma_ramps;
int gamma_ramp_size;
Eina_List *outputs;
Eina_List *possible_outputs;
Eina_List *outputs_common_modes;
Ecore_X_Randr_Mode_Info *current_mode;
};
struct _E_Randr_Edid_Hash
{
int hash;
};
struct _E_Randr_Output_Info
{
Ecore_X_ID xid;
char *name;
int name_length;
E_Randr_Crtc_Info *crtc;
Eina_List *wired_clones;
Ecore_X_Randr_Signal_Format signalformats;
Ecore_X_Randr_Signal_Format signalformat;
int connector_number;
Ecore_X_Randr_Connector_Type connector_type;
Ecore_X_Randr_Connection_Status connection_status;
Ecore_X_Randr_Output_Policy policy;
/*
* Attached Monitor specific:
*/
Eina_List *modes;
Eina_List *preferred_modes;
Eina_List *clones;
Eina_List *possible_crtcs;
Ecore_X_Randr_Screen_Size size_mm;
unsigned char *edid;
unsigned long edid_length;
E_Randr_Edid_Hash edid_hash;
int max_backlight;
double backlight_level;
Ecore_X_Render_Subpixel_Order subpixel_order;
Eina_List *compatible_outputs;
};
struct _E_Randr_Screen_Info_11
{
//List of Ecore_X_Randr_Screen_Size_MM*
Eina_List *sizes;
int csize_index;
Ecore_X_Randr_Orientation corientation;
Ecore_X_Randr_Orientation orientations;
//List of Ecore_X_Randr_Refresh_Rate*
Eina_List *rates;
Ecore_X_Randr_Refresh_Rate current_rate;
};
struct _E_Randr_Screen_Info_12
{
Ecore_X_Randr_Screen_Size min_size;
Ecore_X_Randr_Screen_Size max_size;
Ecore_X_Randr_Screen_Size current_size;
Eina_List *modes;
Eina_List *crtcs;
Eina_List *outputs;
E_Randr_Output_Info *primary_output;
Ecore_X_Randr_Relative_Alignment alignment;
};
//RRVD == RandR(R) Version Depended
union _E_Randr_Screen_RRVD_Info
{
E_Randr_Screen_Info_11 *randr_info_11;
E_Randr_Screen_Info_12 *randr_info_12;
};
struct _E_Randr_Screen_Info
{
Ecore_X_Window root;
int randr_version;
E_Randr_Screen_RRVD_Info rrvd_info;
};
//Following stuff is just for configuration purposes
struct _E_Randr_Serialized_Output_Policy
{
char *name;
int name_length;
Ecore_X_Randr_Output_Policy policy;
};
struct _E_Randr_Serialized_Output
{
char *name;
int name_length;
E_Randr_Edid_Hash edid_hash;
double backlight_level;
};
struct _E_Randr_Serialized_Crtc
{
//List of E_Randr_Serialized_Output objects that were used on the same output
Eina_List *serialized_outputs;
//the serialized mode_info misses its xid value
Ecore_X_Randr_Mode_Info mode_info;
Evas_Coord_Point pos;
//List of all possible outputs' names
//e.g. "LVDS", "CRT-0", "VGA"
Eina_List *possible_outputs_names;
Ecore_X_Randr_Orientation orientation;
};
struct _E_Randr_Serialized_Setup_12
{
double timestamp;
//List of E_Randr_Serialized_Crtc objects
Eina_List *serialized_crtcs;
/*
* List of E_Randr_Edid_Hash elements of monitors,
* that were enabled, when the setup was stored
*/
Eina_List *serialized_edid_hashes;
};
struct _E_Randr_Serialized_Setup_11
{
Ecore_X_Randr_Screen_Size_MM size;
Ecore_X_Randr_Refresh_Rate refresh_rate;
Ecore_X_Randr_Orientation orientation;
};
struct _E_Randr_Serialized_Setup
{
E_Randr_Serialized_Setup_11 *serialized_setup_11;
//List of E_Randr_Serialized_Setup_12 objects
Eina_List *serialized_setups_12;
//List of E_Randr_Serialized_Output_Policy objects
Eina_List *serialized_outputs_policies;
};
EINTERN Eina_Bool e_randr_init(void);
EAPI Eina_Bool e_randr_screen_info_refresh(void);
EINTERN int e_randr_shutdown(void);
EAPI extern E_Randr_Screen_Info *e_randr_screen_info;
#endif
#endif