You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

151 lines
5.1 KiB

#ifdef E_TYPEDEFS
typedef struct _E_Randr2 E_Randr2;
typedef struct _E_Randr2_Screen E_Randr2_Screen;
typedef struct _E_Randr2_Mode E_Randr2_Mode;
typedef struct _E_Config_Randr2 E_Config_Randr2;
typedef struct _E_Config_Randr2_Screen E_Config_Randr2_Screen;
#else
#ifndef E_RANDR2_H
#define E_RAND2R_H
typedef enum
{
E_RANDR2_POLICY_NONE,
E_RANDR2_POLICY_EXTEND,
E_RANDR2_POLICY_CLONE,
E_RANDR2_POLICY_ASK,
} E_Randr2_Policy;
typedef enum _E_Randr2_Relative
{
E_RANDR2_RELATIVE_UNKNOWN,
E_RANDR2_RELATIVE_NONE,
E_RANDR2_RELATIVE_CLONE,
E_RANDR2_RELATIVE_TO_LEFT,
E_RANDR2_RELATIVE_TO_RIGHT,
E_RANDR2_RELATIVE_TO_ABOVE,
E_RANDR2_RELATIVE_TO_BELOW
} E_Randr2_Relative;
typedef enum _E_Randr2_Connector
{
E_RANDR2_CONNECTOR_UNDEFINED,
E_RANDR2_CONNECTOR_DVI,
E_RANDR2_CONNECTOR_HDMI_A,
E_RANDR2_CONNECTOR_HDMI_B,
E_RANDR2_CONNECTOR_MDDI,
E_RANDR2_CONNECTOR_DISPLAY_PORT
} E_Randr2_Connector;
struct _E_Randr2
{
Eina_List *screens; // available screens
int w, h; // virtual resolution needed for screens (calculated)
};
struct _E_Randr2_Mode
{
int w, h; // resolution width and height
double refresh; // refresh in hz
unsigned int flags; // randr mode flags.
Eina_Bool preferred E_BITFIELD; // is this the preferred mode for the device?
};
struct _E_Randr2_Screen
{
char *id; // string id which is "name/edid";
struct {
char *screen; // name of the screen device attached
char *name; // name of the output itself
char *edid; // full edid data
E_Randr2_Connector connector; // the connector type
unsigned int subpixel; //ecore_drm2_output_subpixel_get
Eina_Bool is_lid E_BITFIELD; // is an internal screen
Eina_Bool lid_closed E_BITFIELD; // is lid closed when screen qury'd
Eina_Bool connected E_BITFIELD; // some screen is plugged in or not
Eina_Bool backlight E_BITFIELD; // does it have backlight controls?
Eina_Bool can_rot_0 E_BITFIELD; // can it do this rotation?
Eina_Bool can_rot_90 E_BITFIELD; // can it do this rotation?
Eina_Bool can_rot_180 E_BITFIELD; // can it do this rotation?
Eina_Bool can_rot_270 E_BITFIELD; // can it do this rotation?
Eina_List *modes; // available screen modes here
struct {
int w, h; // physical width and height in mm
} size;
} info;
struct {
struct {
E_Randr2_Relative mode; // what relative mode to the screen below
char *to; // what screen this one is relative to
double align; // alignment along the edge
} relative;
Eina_Rectangle geom; // the geometry that is set (as a result)
E_Randr2_Mode mode; // screen res/refresh to use
int rotation; // 0, 90, 180, 270
int priority; // larger num == more important
Eina_Bool enabled E_BITFIELD; // should this monitor be enabled?
Eina_Bool configured E_BITFIELD; // has screen been configured by e?
Eina_Bool ignore_disconnect E_BITFIELD; // ignore disconnects for this screen...
char *profile; // profile name to use on this screen
double scale_multiplier; // if 0.0 - then dont multiply scale
} config;
};
struct _E_Config_Randr2
{
int version;
Eina_List *screens;
unsigned char restore;
unsigned char ignore_hotplug_events;
unsigned char ignore_acpi_events;
E_Randr2_Policy default_policy;
double hotplug_response;
};
struct _E_Config_Randr2_Screen
{
const char *id;
const char *rel_to;
double rel_align;
double mode_refresh;
int mode_w;
int mode_h;
int rotation;
int priority;
unsigned char rel_mode;
unsigned char enabled;
unsigned char ignore_disconnect;
const char *custom_label_screen; // name of the screen device attached
const char *profile;
double scale_multiplier;
};
extern E_API E_Config_Randr2 *e_randr2_cfg;
extern E_API E_Randr2 *e_randr2;
extern E_API int E_EVENT_RANDR_CHANGE;
EINTERN Eina_Bool e_randr2_init(void);
EINTERN int e_randr2_shutdown(void);
E_API void e_randr2_stop(void);
E_API Eina_Bool e_randr2_config_save(void);
E_API void e_randr2_config_apply(void);
E_API void e_randr2_screeninfo_update(void);
E_API void e_randr2_screen_refresh_queue(Eina_Bool lid_event);
E_API E_Config_Randr2_Screen *e_randr2_config_screen_find(E_Randr2_Screen *s, E_Config_Randr2 *cfg);
E_API void e_randr2_screens_setup(int rw, int rh);
E_API E_Randr2_Screen *e_randr2_screen_id_find(const char *id);
E_API double e_randr2_screen_dpi_get(E_Randr2_Screen *s);
E_API void e_randr2_screen_modes_sort(E_Randr2_Screen *s);
#endif
#endif