the repository of RSA merge with private repository.
[platform/core/uifw/e17.git] / src / bin / e_randr_11.c
1 #include "e_randr_private.h"
2 #include "e_randr.h"
3
4 //New helper functions
5 /**
6  * @brief allocate and initialize a new E_Randr_Screen_Info_11 element
7  * @return E_Randr_Screen_Info_11 elements or in case it could
8  * not be created and properly initialized, NULL
9  */
10 E_Randr_Screen_Info_11 *
11 _11_screen_info_new(void)
12 {
13    E_Randr_Screen_Info_11 *randr_info_11 = NULL;
14    Ecore_X_Randr_Screen_Size_MM *sizes = NULL;
15    Ecore_X_Randr_Refresh_Rate *rates = NULL;
16    int i, nsizes;
17
18    EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_11_NO, NULL);
19
20    randr_info_11 = malloc(sizeof(E_Randr_Screen_Info_11));
21
22    randr_info_11->sizes = NULL;
23    randr_info_11->csize_index = Ecore_X_Randr_Unset;
24    randr_info_11->corientation = Ecore_X_Randr_Unset;
25    randr_info_11->orientations = Ecore_X_Randr_Unset;
26    randr_info_11->rates = NULL;
27    randr_info_11->current_rate = Ecore_X_Randr_Unset;
28
29    if (!(sizes = ecore_x_randr_screen_primary_output_sizes_get(e_randr_screen_info.root, &nsizes)))
30      goto _info_11_new_fail;
31    randr_info_11->sizes = sizes, randr_info_11->nsizes = nsizes;
32    ecore_x_randr_screen_primary_output_current_size_get(e_randr_screen_info.root, NULL, NULL, NULL, NULL, &(randr_info_11->csize_index));
33    randr_info_11->corientation = ecore_x_randr_screen_primary_output_orientation_get(e_randr_screen_info.root);
34    randr_info_11->orientations = ecore_x_randr_screen_primary_output_orientations_get(e_randr_screen_info.root);
35    randr_info_11->rates = malloc(sizeof(Ecore_X_Randr_Refresh_Rate*) * nsizes);
36    randr_info_11->nrates = malloc(sizeof(int) * nsizes);
37    for (i = 0; i < nsizes; i++)
38      {
39         if (!(rates = ecore_x_randr_screen_primary_output_refresh_rates_get(e_randr_screen_info.root, i, &randr_info_11->nrates[i])))
40           return EINA_FALSE;
41         randr_info_11->rates[i] = rates;
42      }
43    randr_info_11->current_rate = ecore_x_randr_screen_primary_output_current_refresh_rate_get(e_randr_screen_info.root);
44
45    return randr_info_11;
46
47 _info_11_new_fail:
48    free(randr_info_11);
49    return NULL;
50 }
51
52 //Free helper functions
53 /**
54  * @param screen_info the screen info to be freed.
55  */
56 void
57 _11_screen_info_free(E_Randr_Screen_Info_11 *screen_info)
58 {
59    int x;
60
61    EINA_SAFETY_ON_NULL_RETURN(screen_info);
62
63    for (x = 0; x < screen_info->nsizes; x++)
64      free(screen_info->rates[x]);
65    free(screen_info->sizes);
66    free(screen_info);
67 }
68
69 /*****************************************************************
70  *
71  * Init. and Shutdown code
72  *
73  *****************************************************************
74  */
75 Eina_Bool
76 _11_screen_info_refresh(void)
77 {
78    EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_11_NO, EINA_FALSE);
79
80    _11_screen_info_free(e_randr_screen_info.rrvd_info.randr_info_11);
81    e_randr_screen_info.rrvd_info.randr_info_11 = _11_screen_info_new();
82
83    return (e_randr_screen_info.rrvd_info.randr_info_11 != NULL);
84 }