e_output_mode_apply(E_Output *output, E_Output_Mode *mode)
{
tdm_error error;
+ E_Output_Mode *current_mode = NULL;
EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(mode, EINA_FALSE);
if (!output->info.connected)
{
return EINA_FALSE;
}
+ current_mode = e_output_current_mode_get(output);
+ if (current_mode != NULL)
+ {
+ if (current_mode == mode)
+ return EINA_TRUE;
+ }
+
error = tdm_output_set_mode(output->toutput, mode->tmode);
if (error != TDM_ERROR_NONE)
{
return EINA_FALSE;
}
+ if (current_mode != NULL)
+ current_mode->current = EINA_FALSE;
+ mode->current = EINA_TRUE;
+
output->config.geom.x = 0;
output->config.geom.y = 0;
output->config.geom.w = mode->w;
return best_mode;
}
+EINTERN Eina_List *
+e_output_mode_list_get(E_Output *output)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(output, NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(output->info.modes, NULL);
+
+ return output->info.modes;
+}
+
+EINTERN E_Output_Mode *
+e_output_current_mode_get(E_Output *output)
+{
+ Eina_List *l;
+ E_Output_Mode *emode = NULL;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(output, NULL);
+
+ EINA_LIST_FOREACH(output->info.modes, l, emode)
+ {
+ if (emode->current)
+ return emode;
+ }
+
+ return NULL;
+}
+
EINTERN Eina_Bool
e_output_connected(E_Output *output)
{
int w, h; // resolution width and height
double refresh; // refresh in hz
Eina_Bool preferred : 1; // is this the preferred mode for the device?
+ Eina_Bool current : 1;
const tdm_output_mode *tmode;
};
EINTERN Eina_Bool e_output_render(E_Output *output);
EINTERN Eina_Bool e_output_setup(E_Output *output);
EINTERN E_Output_Mode * e_output_best_mode_find(E_Output *output);
+EINTERN Eina_List * e_output_mode_list_get(E_Output *output);
+EINTERN E_Output_Mode * e_output_current_mode_get(E_Output *output);
EINTERN Eina_Bool e_output_connected(E_Output *output);
E_API Eina_Bool e_output_dpms_set(E_Output *output, E_OUTPUT_DPMS val);
E_API E_OUTPUT_DPMS e_output_dpms_get(E_Output *output);