enlightenment/src/bin/e_randr_11.c

85 lines
2.8 KiB
C

#include "e_randr_private.h"
#include "e_randr.h"
//New helper functions
/**
* @brief allocate and initialize a new E_Randr_Screen_Info_11 element
* @return E_Randr_Screen_Info_11 elements or in case it could
* not be created and properly initialized, NULL
*/
E_Randr_Screen_Info_11 *
_11_screen_info_new(void)
{
E_Randr_Screen_Info_11 *randr_info_11 = NULL;
Ecore_X_Randr_Screen_Size_MM *sizes = NULL;
Ecore_X_Randr_Refresh_Rate *rates = NULL;
int i, nsizes;
EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_11_NO, NULL);
randr_info_11 = malloc(sizeof(E_Randr_Screen_Info_11));
randr_info_11->sizes = NULL;
randr_info_11->csize_index = Ecore_X_Randr_Unset;
randr_info_11->corientation = Ecore_X_Randr_Unset;
randr_info_11->orientations = Ecore_X_Randr_Unset;
randr_info_11->rates = NULL;
randr_info_11->current_rate = Ecore_X_Randr_Unset;
if (!(sizes = ecore_x_randr_screen_primary_output_sizes_get(e_randr_screen_info.root, &nsizes)))
goto _info_11_new_fail;
randr_info_11->sizes = sizes, randr_info_11->nsizes = nsizes;
ecore_x_randr_screen_primary_output_current_size_get(e_randr_screen_info.root, NULL, NULL, NULL, NULL, &(randr_info_11->csize_index));
randr_info_11->corientation = ecore_x_randr_screen_primary_output_orientation_get(e_randr_screen_info.root);
randr_info_11->orientations = ecore_x_randr_screen_primary_output_orientations_get(e_randr_screen_info.root);
randr_info_11->rates = malloc(sizeof(Ecore_X_Randr_Refresh_Rate*) * nsizes);
randr_info_11->nrates = malloc(sizeof(int) * nsizes);
for (i = 0; i < nsizes; i++)
{
if (!(rates = ecore_x_randr_screen_primary_output_refresh_rates_get(e_randr_screen_info.root, i, &randr_info_11->nrates[i])))
return EINA_FALSE;
randr_info_11->rates[i] = rates;
}
randr_info_11->current_rate = ecore_x_randr_screen_primary_output_current_refresh_rate_get(e_randr_screen_info.root);
return randr_info_11;
_info_11_new_fail:
free(randr_info_11);
return NULL;
}
//Free helper functions
/**
* @param screen_info the screen info to be freed.
*/
void
_11_screen_info_free(E_Randr_Screen_Info_11 *screen_info)
{
int x;
EINA_SAFETY_ON_NULL_RETURN(screen_info);
for (x = 0; x < screen_info->nsizes; x++)
free(screen_info->rates[x]);
free(screen_info->sizes);
free(screen_info);
}
/*****************************************************************
*
* Init. and Shutdown code
*
*****************************************************************
*/
Eina_Bool
_11_screen_info_refresh(void)
{
EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_11_NO, EINA_FALSE);
_11_screen_info_free(e_randr_screen_info.rrvd_info.randr_info_11);
e_randr_screen_info.rrvd_info.randr_info_11 = _11_screen_info_new();
return (e_randr_screen_info.rrvd_info.randr_info_11 != NULL);
}